梅森特工的分步方法何时执行?

时间:2019-06-21 20:54:50

标签: java schedule agent mason

我正在研究一种蚁群算法。我应该使用梅森将蚂蚁建模为多代理系统。我想我已经准备就绪,可以工作了,但是我在调​​度方面遇到了问题。现在,所有蚂蚁都添加到计划中,然后执行其他所有操作,然后处理计划。 如何让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个新的蚂蚁覆盖了它们,在执行这些蚂蚁之前,将两次执行体衰法。

0 个答案:

没有答案