我正在研究一种蚁群算法。我应该使用梅森将蚂蚁建模为多代理系统。我想我已经准备就绪,可以工作了,但是我在调度方面遇到了问题。现在,所有蚂蚁都添加到计划中,然后执行其他所有操作,然后处理计划。 如何让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");
}
}
也许我应该至少添加蚂蚁的step方法:
@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!");
}
我希望先添加并执行十个蚂蚁,然后再调用delayPheromones()方法,然后再次执行相同的过程。
相反,添加了10个蚂蚁,然后用10个新的蚂蚁覆盖了它们,在执行这些蚂蚁之前,将两次执行体衰法。