JADE AchieveREInitiator не работает должным образом. prepareRequests не вызывается
В настоящее время я использую JADE для создания агентной платформы для решения задач планирования. Дело в том, что определенное поведение расширяет AchieveREInitiator не работает должным образом в каком-то определенном состоянии программы. Это класс поведения:
class ACOInitiator extends AchieveREInitiator {
Agent myAgent;
List<Schedule> roundSchedules;
public ACOInitiator(Agent a, ACLMessage msg) {
super(a, msg);
this.myAgent = a;
roundSchedules = new ArrayList<Schedule>();
System.out.println(msg.getContent()); //This is properly printed.
// TODO Auto-generated constructor stub
}
@Override
protected Vector prepareRequests(ACLMessage request) {
System.out.println(request.getContent()); //In some specific state, this is not printed.
Vector v = new Vector(1);
for (int i = 1; i <= Properties.antNum; i++) {
AID aAID = new AID("Ant" + i, AID.ISLOCALNAME);
request.addReceiver(aAID);
aAID = null;
}
v.addElement(request);
return v;
}
@Override
protected void handleAgree(ACLMessage agree) {
try {
roundSchedules.add((Schedule) (agree.getContentObject()));
} catch (UnreadableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
agree = null;
}
@Override
protected void handleAllResponses(Vector responses) {
Collections.sort(roundSchedules);
Environment.iterSolution = roundSchedules.get(0);
roundSchedules = null;
Environment.setState(Environment.STATE_ITERATION_CHECKING);
responses = null;
myAgent.removeBehaviour(this);
}
}
При выполнении программы отображаются следующие результаты:
Generate solution.
Generate solution.
Iteration #1: 788.0(0.48s) (New best solution)
Generate solution.
Generate solution.
Iteration #2: 809.0(0.12s) r = 1/2
Generate solution.
Generate solution.
Iteration #3: 793.0(0.08s) r = 2/2
......
----- Simulation starts -----
......
@120
Breakdown machines:
Repaired machines:
Incoming jobs: 2-5;
Generate solution.
----- All schemes finished -----
Это нежелательно. Видимо, две строки для печати одинаковы. Вот почему на каждой итерации на этапе решения 2 "Генерировать решение". напечатаны. Тем не менее, на более поздней стадии моделирования, только 1 "Генерировать решение". печатается и программы идут до конца. Можно сделать вывод, что метод prepareRequests не вызывается автоматически, как на более ранней стадии. Я новичок в JADE, и проблема беспокоит меня пару дней. Пожалуйста, помогите, если вы программист JADE.
1 ответ
Я не уверен, что понимаю ваш вопрос или проблему, но из того, что я вижу, первая распечатка "Создать решение" происходит в конструкторе:
public ACOInitiator (Агент a, сообщение ACLMessage) { -> System.out.println(msg.getContent())
второй в методе подготовки запросов:
защищенный вектор prepareRequests(запрос ACLMessage) {-> System.out.println(msg.getContent()) .
Также помните, что при взаимодействии с несколькими агентами поведение инициатора будет ожидать ответа от всех его поведений респондента.
Надеюсь, что это поможет, если нет, попробуйте приложить диаграммы сниффера.