蚁群算法代码就java 蚁群算法代码含界面( 三 )


System.arraycopy(ant[i].tour, 1, bestTour, 1, bestTour.length-1);
}
【蚁群算法代码就java 蚁群算法代码含界面】}
//蒸发信息素
evaporatePheromone();
//释放信息素
for (int i=0; inumbersOfAnt; i++) {
ant[i].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; ibestTour.length; i++) {
System.out.print("→"+bestTour[i]);
}
}
private void evaporatePheromone() {
for (int i = 1; ipheromone.length; i++)
for (int j = 1; jpheromone.length; j++) {
pheromone[i][j] *= 1-rate;
}
}
}
蚂蚁算法原理及实现代码蚁群算法(ant colony optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术 。它由Marco Dorigo于1992年在他的博士论文中引入 , 其灵感来源于蚂蚁在寻找食物过程中发现路径的行为 。
为什么小小的蚂蚁能够找到食物?他们具有智能么?设想,如果我们要为蚂蚁设计一个人工智能的程序,那么这个程序要多么复杂呢?首先 , 你要让蚂蚁能够避开障碍物,就必须根据适当的地形给它编进指令让他们能够巧妙的避开障碍物,其次,要让蚂蚁找到食物,就需要让他们遍历空间上的所有点;再次,如果要让蚂蚁找到最短的路径,那么需要计算所有可能的路径并且比较它们的大小,而且更重要的是,你要小心翼翼的编程,因为程序的错误也许会让你前功尽弃 。这是多么不可思议的程序!太复杂了,恐怕没人能够完成这样繁琐冗余的程序 。
然而,事实并没有你想得那么复杂 , 上面这个程序每个蚂蚁的核心程序编码不过100多行!为什么这么简单的程序会让蚂蚁干这样复杂的事情?答案是:简单规则的涌现 。事实上 , 每只蚂蚁并不是像我们想象的需要知道整个世界的信息,他们其实只关心很小范围内的眼前信息,而且根据这些局部信息利用几条简单的规则进行决策 , 这样,在蚁群这个集体里,复杂性的行为就会凸现出来 。这就是人工生命、复杂性科学解释的规律!那么,这些简单规则是什么呢?下面详细说明:
1、范围:
蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一般是3),那么它能观察到的范围就是3*3个方格世界,并且能移动的距离也在这个范围之内 。
2、环境:
蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还有信息素 , 信息素有两种,一种是找到食物的蚂蚁洒下的食物信息素,一种是找到窝的蚂蚁洒下的窝的信息素 。每个蚂蚁都仅仅能感知它范围内的环境信息 。环境以一定的速率让信息素消失 。
3、觅食规则:
在每只蚂蚁能感知的范围内寻找是否有食物,如果有就直接过去 。否则看是否有信息素,并且比较在能感知的范围内哪一点的信息素最多,这样,它就朝信息素多的地方走 , 并且每只蚂蚁多会以小概率犯错误,从而并不是往信息素最多的点移动 。蚂蚁找窝的规则和上面一样,只不过它对窝的信息素做出反应,而对食物信息素没反应 。
4、移动规则:
每只蚂蚁都朝向信息素最多的方向移,并且 , 当周围没有信息素指引的时候,蚂蚁会按照自己原来运动的方向惯性的运动下去,并且,在运动的方向有一个随机的小的扰动 。为了防止蚂蚁原地转圈,它会记住最近刚走过了哪些点 , 如果发现要走的下一点已经在最近走过了,它就会尽量避开 。

推荐阅读