首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

简单蚁群算法 + JAVA实现蚁群算法(3)

简单蚁群算法 + JAVA实现蚁群算法(3)

public void go() {
      
        //保存最好的路径和路径长度
        double bestTotal = Double.MAX_VALUE;
        int[] bestTour = new int[distance.length+1];
      
        //新建蚂蚁数组,用来引用所创建的蚂蚁
        Ant[] ant = new Ant[numbersOfAnt];
      
        //进行iterationTimes次迭代
        while (iterationTimes != 0) {
            //初始化新的一批蚂蚁(这里用构造新的蚂蚁代替重置蚂蚁状态)
            for (int i=0; i<numbersOfAnt; i++) {
                ant = new Ant();
            }
           
            //进行一次迭代(即让所有的蚂蚁构建一条路径)
            for (int i=0; i<numbersOfAnt; i++) {

                ant.constructSolution();
                //如果蚂蚁构建的路径长度比上次最好的还好,那么保存这个长度和它所走的路径
                if (ant.total<bestTotal) {
                  
                    bestTotal = ant.total;
                    System.arraycopy(ant.tour, 1, bestTour, 1, bestTour.length-1);
                }
            }
           
            //蒸发信息素
            evaporatePheromone();
           
            //释放信息素
            for (int i=0; i<numbersOfAnt; i++) {

                ant.releasePheromone();
            }
           
            //报告本次迭代的信息
            System.out.format("本次为倒数第%d次迭代,当前最优路径长度为%10.2f\n",iterationTimes,bestTotal);
           
            //迭代总数减去1,进行下次迭代
            iterationTimes--;
        }
      
        //输出最好的路径长度
        System.out.format("得到的最优的路径长度为:%10.2f\n",bestTotal);
        //输出最好的路径
        System.out.println("最优路径如下:");
        for (int i=1; i<bestTour.length; i++) {
           
            System.out.print("→"+bestTour);
        }
    }

    private void evaporatePheromone() {
      
        for (int i = 1; i < pheromone.length; i++)
            for (int j = 1; j < pheromone.length; j++) {

                pheromone[j] *= 1-rate;
            }
      
    }
}
继承事业,薪火相传
返回列表