蚁群算法--第四次作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目 请以100个城市的旅行商问题为例,写出使用20只人工蚂蚁进行旅行商问题求解的基本步骤。 次

第四次作业 姓名

周璐

学号

53070711

班级

7班

正文

Q: 请以100个城市的旅行商问题为例,写出使用20只人工蚂蚁进行旅行商问题求解的基本步骤。 A :核心公式:

τ是信息素浓度因子;η是可见度因子,通常取为城市间距离的倒数;α和β用来控制信

息素和可见度的相对重要性;N i

k 为蚂蚁k 的可访问城市集合 ;Q 为常量。 数据结构:

– 信息素矩阵τ(100×100阶,记录信息素浓度)

– 可见度矩阵η(100×100阶,通常取为距离(i, j)的倒数) – 禁忌表Tabu (20×100阶,记录蚂蚁k 走过的城市)

初始化:

– 20蚂蚁随机分布到100个城市

环游:

– 按照第一个核心公式

计算

转移概率

– 蚂蚁依次选择路径直到返回出发点

更新信息素浓度

– 按照第二个核心公式计算t+1时刻的信息素浓度

停止条件

– 全部蚂蚁选择了同一条路线 – 算法运行到最大迭代次数 –

旅行商问题代码思路大体如下:

/****************************************************************************/ /初始化蚁群

/****************************************************************************/ m=20; //蚁群中蚂蚁的数量,当m接近或等于城市个数n时,本算法可以在最少的迭代次数内找到最优解

n=20; //表示TSP问题的规模,亦即城市的数量,这里为100

D[100][100]={…}; //表示城市完全地图的赋权邻接矩阵,记录城市之间的距离

Nc_max=200; //最大循环次数,即算法迭代的次数,亦即蚂蚁出动的拨数(每拨蚂

蚁的数量都是20)

alpha=1; //蚂蚁在运动过程中所积累信息(即信息素)在蚂蚁选择路径时的相对重要程度,alpha过大时,算法迭代到一定代数后将出现停滞现象

beta=5; //启发式因子在蚂蚁选择路径时的相对重要程度

rho=0.5; //(0

数),1-rho表示信息素的持久性系数

Q=100; //蚂蚁释放的信息素量,对本算法的性能影响不大

/****************************************************************************/ /变量初始化

/****************************************************************************/ eta=1/D; //启发式因子,这里设为城市之间距离的倒数pheromone=ones(n,n); //信息素矩阵,这里假设任何两个城市之间路径上的初始信

息素都为1

tabu_list=zeros(m,n); //禁忌表,记录蚂蚁已经走过的城市,蚂蚁在本次循环中不

能再经过这些城市。当本次循环结束后,禁忌表被用来计

算蚂蚁当前所建立的解决方案,即经过的路径和路径的长

Nc=0; //循环次数计数器

routh_best=zeros(Nc_max,n); //各次循环的最短路径

length_best=ones(Nc_max,1); //各次循环最短路径的长度

length_average=ones(Nc_max,1);//各次循环所有路径的平均长度

while Nc

//将m只蚂蚁放在n个城市上

rand_position=[];

for (i=1;i

rand_position=[rand_position,randperm(n)];

end

tabu_list(i,0)=(rand_position(1:m));//这里i从0取到19,1:m表示随着i

的增大而讲tabu_list从随机位置1

初始化到位置m。将蚂蚁放在城市上

之后的禁忌表,第i行表示第i只蚂

蚁,第i行第一列元素表示第i只蚂

蚁所在的初始城市

/****************************************************************************/

/m只蚂蚁按概率函数选择下一座城市,在本次循环中完成各自的周游

/****************************************************************************/

for j=2 to n

for i=1 to m

city_visited=tabu_list(i,1:(j-1));//已访问的城市。1:(j-1)表示从1到

j-1

city_remained=zeros(1,(n-j+1)); //待访问的城市

probability=city_remained; //待访问城市的访问概率

cr=1;

for k=1 to n //for循环用于求待访问的城市。比如如果城市个

数是5,而已访问的城市city_visited=[2 4],则

经过此for循环后city_remanied=[1 3 5]

if length(find(city_visited==k))==0

city_remained(cr)=k;

cr=cr+1;

end

end

/****************************************************************************/

/for循环计算待访问城市的访问概率分布,此概率和两个参数有关,一是蚂蚁当前所在城

市(即city_visited(end))和待访问城市(即city_remained(k))路径上的信息素,一是

这两者之间的启发因子即距离的倒数

/****************************************************************************/

for k=1 to length(city_remained)

probability(k)=(pheromone(city_visited(end),city_remained(k)))^

alpa*(eta(city_visited(end),city_remained(k)))^beta;

//即作业第一页提到的核心公式一

end

probability=probability/sum(probability);

//按概率选取下一个要访问的城

pcum=cumsum(probability);

select=find(pcum>=rand);

to_visit=city_remained(select(1));

tabu_list(i,j)=to_visit;

end

end

if Nc>0

tabu_list(1,:)=routh_best(Nc,:);//将上一代的最优路径(最优解)保留下来,

保证上一代中的最适应个体的信息不会丢失

end

//记录本次循环的最佳路线

total_length=zeros(m,1); //m只蚂蚁在本次循环中分别所走过的路径长度

相关文档
最新文档