Я работаю над реализацией алгоритма муравьиных колоний. Я должен моделировать муравьев как мультиагентную систему, используя масона. Я думаю, что у меня есть все части, чтобы заставить это работать, но у меня есть проблемы с расписанием. Прямо сейчас все муравьи добавляются в расписание, затем выполняется все остальное, а затем обрабатывается расписание.
Как мне позволить 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 выполняется два раза перед выполнением муравьев.