群中最小的单位,是所有简单规则应用的最小个体。
publicclassAnt
{
publicSquareSQUARE;//蚂蚁所在方格
publicFoodCARRYING=null;//所搬的食物数
publicintID;//蚂蚁的编号
publicbooleanHELPING=false;//是否帮忙搬运食物
publicvoidmove(intturn)
{
//蚂蚁移动到下一个方格
}
}
2.范围
蚂蚁所在的方格应该包含附近的方格编号、所含食物数量、蚂蚁数量、外激素的浓度、以及坐标等信息。
publicclassSquare
{publicSquareNE;//附近的8个方向的方格
publicSquareN;
publicSquareNW;
publicSquareW;
publicSquareSW;
publicSquareS;
publicSquareSE;
publicSquareE;
publicLinkedListANTS;//本方格中包含的蚂蚁
publicFoodFOOD;//本方格中包含的食物数
publicNestNEST;//方格为蚁穴
publicPheromone_1PHEROMONE_1;//本方格中的外激素含量
publicintX;//本方格的坐标
publicintY;
privateWorldWORLD;//所属的环境
publicbooleanWALL;//是否有障碍物
publicSquare(intx,inty,Worldworld)
{
FOOD=null;
NEST=null;
PHEROMONE_1=null;
X=x;
Y=y;
WORLD=world;
WALL=false;
ANTS=newLinkedList();
}
3.环境
环境是由多个方格组成的,是一个平面,因此用一个方格的二维数组来表示是最合适不过的。
publicclassWorld
{
privateSquare[][]WORLD;//定义环境二维数组
privateintWIDTH;//环境的长宽
privateintHEIGHT;
privatePheromone_1ListP1LIST;//保存所有外激素的
列表 publicWorld(Pheromone_1Listp1list)
{
this.WIDTH=Settings.WIDTH;
this.HEIGHT=Settings.HEIGHT;
this.P1LIST=p1list;
WORLD=newSquare[WIDTH][HEIGHT];
}
4.觅食规则
移动规则和避障规则:这三种规则全都跟蚂蚁的移动方向有关,并在移动前都要先计算周围方格的外激素浓度,选择外激素浓度最高的方格方向移动。
privateSquarechooseBestSquare()
{
Square[]square_list={SQUARE.E,SQUARE.NE,SQUARE.N,SQUARE.NW,SQUARE.W,SQUARE.SW,SQUARE.S,SQUARE.SE};
doublecurrent_best_value=0;
doublevalue=0;
Squaresquare=SQUARE;
//选择最好的方格
for(inti=0;i
{
value=calculateSquareValue(square_list[i]);//计算方格值
if(value>current_best_value)
{
current_best_value=value;
square=square_list[i];
}
}
if(square.ANTS.size()>=Settings.MAXIMUM_NUMBER_OF_ANTS)
{
returnSQUARE;
}
returnsquare;
}
privatedoublecalculateSquareValue(Squares)
{
double[]thresholds=Settings.THRESHOLDS;
if(s==null||s.WALL)//方格有障碍物
{
return-100000;
}
//计算方格中各项参数的值
returns.getFood()*thresholds[0]//食物
+s.getPheromone_1()*thresholds[1]//外激素
}
5.播撒外激素规则
每只蚂蚁找到食物后会根据食物的数量播撒相应量的外激素,以便其他蚂蚁能够更快得找到这堆食物。
privatevoidputPheromone_1(doubleamount)
{
if(SQUARE.getPheromone_1() SQUARE.addPheromone_1(amount);
}
从以上蚁群算法中各个要素的代码来看,实现蚁群算法并不难。每只蚂蚁并不是像我们想象的需要知道整个环境的信息。它们只关心很小范围内的眼前信息,而且根据这些局部信息利用几条简单的规则进行决策,这样,在蚁群这个集体里,复杂性的行为就会凸现出来。这就是人工生命、复杂性科学解释的规律。
三、结语
上面实现的蚂蚁算法只是大致模拟蚁群的觅食过程,真正的蚂蚁觅食过程远比这个复杂,比如增加蚂蚁搬运食物的距离和数量,蚂蚁在搬运食物发现更大的食物可能会丢弃原有食物,还可以增加蚂蚁搬运食物回蚁穴的最短路径的求解。同时需要注意的是,由于蚁群算法觅食地过程,蚁群算法可能会过早的收敛并陷入局部最优解。当然经过改进算法将会更优,希望能起着“抛砖引玉”的作用,给大家一点启发和思路。