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()) .

Также помните, что при взаимодействии с несколькими агентами поведение инициатора будет ожидать ответа от всех его поведений респондента.

Надеюсь, что это поможет, если нет, попробуйте приложить диаграммы сниффера.

Другие вопросы по тегам