Когда выполняются пошаговые методы каменщиков? - PullRequest
1 голос
/ 21 июня 2019

Я работаю над реализацией алгоритма муравьиных колоний. Я должен моделировать муравьев как мультиагентную систему, используя масона. Я думаю, что у меня есть все части, чтобы заставить это работать, но у меня есть проблемы с расписанием. Прямо сейчас все муравьи добавляются в расписание, затем выполняется все остальное, а затем обрабатывается расписание. Как мне позволить 10 муравьям делать свою работу, затем обновлять массив, затем снова 10 муравьев (и так далее)?

Я попробовал немного занято (позор мне) после добавления муравьев в расписание:

while(!schedule.scheduleComplete()){ }

но это не сработало по назначению, я полагаю, потому что расписание выполняется только после завершения метода SimulationState.start ().

Вот так выглядит мой класс SimulationState прямо сейчас. Если потребуется информация о каких-либо других классах, я тоже поделюсь этим.


public class SimulationState extends SimState {

    public SimulationState(long seed) {
        super(seed);
    }

    AntColonyOptimization antColonyOptimization = new AntColonyOptimization();

    public static void main(String[] args) {
        doLoop(SimulationState.class, args);
        System.exit(0);
    }


    @Override
    public void start() {
        super.start();
        List<Ant> Ants = new ArrayList<>();
schedule.
        for (int c = 0; c < 2 ;c++) {
            for (int i = 0; i < 10; i++) {
                Ants.add(new Ant(antColonyOptimization.pheromones));
            }

            for (int i = 0; i < 10; i++) {
                schedule.scheduleOnce(Ants.get(i));
            }

            antColonyOptimization.decayPheromones();
        }

        System.out.println(schedule.scheduleComplete());
    }

    @Override
    public void finish() {
        super.finish();
        System.out.println("simulation finished");
    }

}

Может быть, я должен добавить хотя бы метод шага муравья:

@Override
    public void step(SimState state) {
        SimulationState simulationState = (SimulationState) state;
        findRoute();
        route.printRoute(takenRoute);
        calculateDistance();
//        if (antColonyOptimization.antsCounter == 9) {
//            addPheromones();
//            antColonyOptimization.decayPheromones();
//        }
        addPheromones();
        System.out.println("Ant is done!");
    }

Я ожидал, что будет добавлено и выполнено десять муравьев, затем для вызова метода decayPheromones () и затем снова та же процедура.

Вместо этого добавляются 10 муравьев, а затем перезаписываются 10 новыми муравьями, метод decayPheromones выполняется два раза перед выполнением муравьев.

...