精校版蚁群算法报告.docx
- 文档编号:27398179
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:24
- 大小:368.43KB
精校版蚁群算法报告.docx
《精校版蚁群算法报告.docx》由会员分享,可在线阅读,更多相关《精校版蚁群算法报告.docx(24页珍藏版)》请在冰豆网上搜索。
精校版蚁群算法报告
(完整word版)蚁群算法报告
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整word版)蚁群算法报告)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整word版)蚁群算法报告的全部内容。
蚁群算法报告
学院:
专业:
学号:
姓名:
第一部分:
蚁群算法原理介绍
1.1蚁群算法的提出
蚂蚁是地球上最常见、数量最多的昆虫种类之一,常常成群结队地出现于人类的日常生活环境中。
受到自然界中真实蚁群集体行为的启发,意大利学者M.Dorig.于20世纪90年代初,在他的博士论文中首次系统地提出了一种基于蚂蚁种群的新型优化算法-蚁群算法}28}(AntColonyAlgorithm,ACA),并成功地用于求解旅行商问题,自1996年之后的五年时间里,蚁群算法逐渐引起了世界许多国家研究者的关注,其应用领域得到了迅速拓宽。
1.2蚁群算法的原理的生物学解释
据观察和研究发现,蚂蚁倾向于朝着信息激素强度高的方向移动。
因此蚂蚁的群体行为便表现出了一种信息激素的正反馈现象.当某条路径上经过的蚂蚁越多,该路径上存留的信息激素也就越多,以后就会有更多的蚂蚁选择它。
这也就是说,在蚂蚁搜寻食物的过程中,对于较短的路径,在单位时间内经过的蚂蚁数量越多,那么该路径上信息激素强度越高。
由于信息激素强度较高,则可以吸引更多的蚂蚁沿相同的路径进行搜索,这又使该路径上的信息激素强度增大。
而对于距离较长的路径,由于单位时间内经过的蚂蚁数量较少,该路径上信息激素强度较低,并且随着信息激素的挥发,该路径信息激素强度逐渐减弱,不再吸引蚂蚁沿这条路径运动。
蚂蚁个体之间就是通过信息激素的间接通信来相互协作形成正反馈,进行路径的最优选择,从而达到搜索食物的目的。
1.3蚁群算法的数学模型
将TSP问题(travelingsalesmanproblem)作为实例,简单的TSP描述过程为:
假设有n座城,某个旅者自一城开始,依次经过各城市后回到出发远点,问题就是找到一条距离最小的走法。
假设bi(t)代表t时位置是i的蚂蚁数量,Ʈij(t)代表t时路线((i,j)的所
包含的信息量,n代表TSP问题的大小,m则代表蚁群中所有蚂蚁数,那么
;
则为t时C集合里元素(城市)相互连接lij上的遗存的信息数量的合集。
在开始时各路线上的信息数量相等,假设Ʈij(0)=const,最基本的蚁群算法求解最优是经有向的图断(C,L,
)来达到的。
蚂蚁k(k=1,2,..。
m),运动的过程中,其转移方向是依据每条路线上的信息数量.我们利用禁忌表tabuk(k=1,2,。
.。
m)来代表蚂蚁k已经经过的城市,随着tabuk进化过程变化,集合也做出动态的改变.在蚂蚁搜索前进的过程,依据各路线上包含的信息以及路线下的启发式信息,用来算出状态转移下的概率.
代表t时下蚂蚁k经城市i运动到城市j时的状态转移下的概率.
(1)
式
(1)中,allowedk=C—tabuk代表k蚂蚁要到下一个城市时允许选择的元素;α代表信息的启发式的因素,代表运动路线的重要程度,代表了蚂蚁不断地运动积累信息,在后续的蚂蚁移动过程中的作用,它数值较大,说明这个蚂蚁容易于选择别的蚂蚁所走过的路线,这些蚂蚁的协作运动越强;β代表的是期望的启发因素,代表清晰度下的比较的重要程度,反映了蚂蚁在移动中累计的启发式的信息,代表这个蚂蚁在选择路线过程中的重要性,它的数值大,那么这种状态的转移概率,比较与贪心规则相近似;ηik(t)代表是启发式函数:
(2)
式
(2)中,dij代表的是邻近两个元素之间距离,对于蚂蚁来说,dij值越小,那么nik(t)值就越大,
值也越大。
显然,这个启发式的函数代表的是蚂蚁自城市i到城市j的期望度。
如果残留的信息素太多,要使残留的信息素不掩盖启发式的信息,当这个蚂蚁完成一个元素或走完n个所有的城市,也就是说蚂蚁一个旅程完成,需要更新残留的信息.这是仿效人类的大脑记忆下的特点提出的信息更新的模式,也就是说我们的大脑存储的新信息后,原先存储的旧的信息会伴随时间的推进,不断被我们逐渐的淡化,到最后甚至是忘记.因此,t+n时在路线((i,j)的信息调整规则如下:
(3)
(4)
式(4.3)中,ρ系数代表的是信息挥发,那么1-ρ因子代表的是信息的残留,为避免信息的过多累积,ρ系数的取值的范围:
代表这次循环过程中路线(i,j)上信息的增加数量,原先的时间
,
代表的是k蚂蚁,它旅行过程中在路线(i,j)上的留存下来的信息。
不同的信息更新的模式下,有不同的三种模型,对整体的信息而言,也就是蚂蚁走完一个循环后所有路线上的信息的更新,选择求TSP时较为准确的模型,于是,选择ant-cycle模型:
式(4.5)中Q代表信息素的强度,此强度在一定范围内影响的是算法收敛快慢,Lk代表蚂蚁在这次旅程中所走路线的总长度.
1。
4蚁群算法实现步骤
以TSP为例,蚁群算法的具体实现步骤如下:
1)初始化各参数:
令Ʈij(0)=C(C为常数),ΔƮij=0,迭代次数IT=0,最大迭代次数为IT_M,计时器t=0,设置α,β,ρ,Q的值,将m只蚂蚁随机放在n个城市上,把蚂蚁k(k=1,2,...,m).目前所处城市设为禁忌表Tk的第一个元素;
2)开始循环,蚂蚁k(k=1,2,。
.。
m)根据式((3—2)状态转移概率选择下一城市,并将选择过的城市j加入到禁忌表Tk,直到禁忌表中包含所有城市n;
3)计算蚂蚁k(k=1,2,。
.。
,m)遍历所有城市的总路径长度Lk,比较所有蚂蚁找到的路径,选择一条最短路径,根据特定的公式更新路径上的信息素浓度;
4)重新迭代,IT=IT+1;
5)判断是否满足条件:
判断迭代次数IT>_ITM且所有蚂蚁选择同一条路径.满足的话输出最短路径,否则清空禁忌表Tk,跳转到步骤2);
6)得到结果,程序结束.
流程图如下:
第二部分:
蚁群算法实例——集装箱码头船舶调度模型
2.1集装箱码头船舶调度流程图
图2.1集装箱码头船舶调度流程图
2。
2算例与matlab编程的实现
2.2。
1算法实例
设定种群大小N=5,船舶数量vesselNumber=8,泊位数量berthNumber=3,每个泊位上有3台岸桥,岸桥的平均卸货速度为35箱/小时,蚁群算法中α=1,β=2.5,ρ=0.85,COUNTmax=20
通过MATLAB编程实现以下:
Step1蚁群初始化,设时间的计数器t=0,初始迭代的次数ITCOUNT=0,Q[i][jl=0将每个参数进行合理设置。
于此同时,还要设好题中的一些数据、条件以及泊位的条件和船舶载货量,以及模型中最大的岸桥数量等等,还有要按照船舶的载货数量,来算出两个城市间的距离;
Step2可行结点的集合进行初始化,创建一个模型禁忌表,并在禁忌表中方知k只蚂蚁起始的位置,并且将链表的索引设置为s=l;
Step3第k只蚂蚁来说,出发的起始点是Bk,船舶J的选择按照的是状态转移的规律,可以选择的可能性有:
①如果船舶的要求在泊位Bk能被满足,那么就将位置(K,J)存在禁忌表中,蚁群算法进行下去;②如果船舶的要求在泊位Bk不能被满足,那么自动选择下一个可供选择的泊位,也就是Bk+1,重新回到step3;将这个过程重复进行,一直到链表满了为止,也就是说全部城市都被旅行过了。
Step4用得到的信息素来对规则进行更新。
利用各个路线算出船舶等待的时间,并同当前找到的最优解来进行对比,选出本次更优的路线,来更新当前的全局的最优解。
将全部路线上的信息量进行更新,t=t+I,ITCOUNT=ITCOUNT+l,ΔQ[i][j]=0,清空禁忌表;
Step4假如是k次迭代结束,仍然是没有满足算法条件,那么需要重新开始算法迭代;
Step5假如连续进行迭代IT_COUNTn次以后,如果得出的最优值还是没有明显的改进时,则自适应修改P的值,直达到ρ=ρmin条件后停止修改.
Step5如果IT_COUNT≤COUNTmax,那么重复Step2,如果达到了最
大的迭代次数IT_COUNTmax,则算法结束。
应用蚁群算法优化得到船舶调度情况
泊位1:
1号船、6号船
泊位2:
2号船、7号船、5号船
泊位3:
3号船、4号船、8号船
得到所有船舶在港时间为81。
2小时,蚁群算法得到的船舶调度方案有效地缩短了所有船舶的在港时间.
图2。
2基于优先权的先到先服务原则的船舶泊位分布图
总体上来看,由于船舶的优先权差距不明显,所以对于吨位差别不是很大的集装箱船舶,集装箱码头调度基本上是根据先来先服务的原则.因此,通过上述实例验证的调度结果表明:
在以先到先服务的原则为前提下,兼顾大船优先调度,可以实现所有船舶在港时间最小的目标。
2.2.2Matlab编程
MaxNc=20
AntNum=5
%计算船舶到港时间差(城市间距离)
LabelMatrix=[000-2-33—4—41113-321-3—1;
0-13—2-3-10-1—2—13400-42—1]
%各船舶坐标矩阵
X_LabelMatrix=[000-2—33—4-41113-321—3-1]
%各船舶x轴坐标矩阵
Y_LabelMatrix=[0—13—2-3—10-1-2—13401—42—1]
%各船舶Y轴坐标矩阵
mm=max(size(LabelMatrix))%泊位数量
DistanceMatrix=zeros(mm);%初始距离矩阵为空矩阵
fori=1:
mm
forj=l:
mm
DistanceMatrix(i,j)=sqrt((X_LabelMatrix(1,i)-X_LabelMatrix(1,j))^2+(Y_LabelMatrix(l,i)-Y_LabelMatrix(l,j))^2);
%各城市点间距离矩阵
end
end
DistanceMatrix%显示距离矩阵
%定义其他初始变量
R=[01.51.820。
81.512.531.70.60。
22.41.920.70。
52.23。
10.1]%各船舶的装卸时间,单位h
Q=1%初始蚂蚁循环一周释放信息量
tao0=Q/100%初始路径上的信息素浓度
QV=9%船的装卸时间是9h
%给tao矩阵miu矩阵节约值s矩阵赋初值
fori=1:
mm
forj=l:
mm
ifi~=j
s(i,j)=DistanceMatrix(l,i)+DistanceMatrix(l,j)-DistanceMatrix(i,j);%节约值
tao(i,j)=tao0;%给路径上信息赋初值
miu(i,j)=1/DistanceMatrix(i,j);%miu矩阵
end
end
end
fori=2:
mm
s(l,i)=3/DistanceMatrix(l,i);%这是什么意思,
s(i,l)=1/DistanceMatrix(i,l);
end
s
tao
mru
bestcost=zeros(l,MaxNc)
%最优路线长度,每次迭代都会产生一个最优解
cost=zeros(MaxNc,AntNum)
%路线长度矩阵,每次迭代每只蚂蚁都产生一个路径长度
Best_cost=zeros(MaxNc,25)%初始化,最优路径矩阵
%开始迭代
forNc=1:
MaxNc
A_tao=zeros(mm)%各船舶之间的增量矩阵
tour=zeros(AntNum,25)%初始路径矩阵为零,每次迭代的每只蚂蚁都产生禁忌表来替换
tao%tao矩阵是随着迭代变化的
ifNc〈10
Q=l,rou=0.3,alpha=2,belta=3,gama=1
end
ifNc>=10&Nc〈40
Q=2,rou=0.4,alpha=3,belta=4,gama=2
end
ifNc>40
Q=3,rou=O.S,alpha=4,belta=3,gama=3
End
%迭代参数的变化,动态调整参数
forAnt=1:
AntNum%蚂蚁数目
sumload=0%初始装载量为0
PartNum=1%产生部分路径的数目
cur_pos=1%初始位置为等泊
aa=randperm(mm)%随机置换船舶
tabu=[1]%禁忌表初始为只有船舶的集
hh=length(rn)%泊位个数
whilehh~=0&sumload<=QV
%当船舶没有被访问完时继续,当泊位还有空间时继续
A=[]
p=[]
fork=l:
hh
ifsumload+R(rn(k))<=QV%看有没有满足容量约束的点
A(l,k)=1
else
A(l,k)=0%A矩阵记录容量符合的点
end
end
A%输出A矩阵
ifsum(A)==0%如果没有容量满足约束的点
sumload=0%装载量归零
cur_pos=1%起始点归一
tabu=[tabu,l]%路线重新从一点开始
PartNum=PartNum+1%所用车辆数加一
hh
else
B=m.*A%记录符合容量约束的实际点
C=B(find(B〉0))%去除不符合容量约束的点
D=max(size(C))%符合容量约束的点规模
%在满足容量约束的点中选择概率大的点
forj=1:
D
p(j)=((tao(curios,C(j)))^alpha)*((miu(cur_pos,C(j)))^belta)*(s(cur_pos,C(j))^gama)
%计算从cur_pos到C小点的概率的分子
end
sump=sum(p)%概率公式的分母
p=p/sump%到达满足要求的各点的概率
r=rand()%产生一个随机数
[a,b]=sort(p)%将p矩阵从小打到排列
al=rot90(rot90(a))
b1=rot90(rot90(b))%将矩阵从大到小排列
%轮盘赌策略选择城市
ifr〈max(p)%当随机数小于最大概率时选择概率最大的点
curios=C(bI
(1))%更新当前点
sumload=sumload+R(C(b1(I)))%更新装载量
tabu=[tabu,cur}os]%更新禁忌表
rn=rn(find(m~=C(b1
(1))))%更新备选船舶,去掉了已经选的
船舶,相当于禁忌表的功能
hh=hh-1
ifhh==0
tabu=[tabu,l]%给路径最后一个点赋值一,也就是封口
end
elseifr〉=max(p)%当随机数大于最大概率时选择概率次大的点
curios=C(b1
(2))
sumload=sumload+R(C(bl
(2)))
tabu=[tabu,cur_pos]
m=m(find(m~=C(b1
(2))))
hh=hh—1
ifhh==0
tabu=[tabu,l]
end
end
end
end
tabu%输出各个蚂蚁的禁忌表,以用来求蚂蚁的cost,(正常情况下会每迭代一次每只蚂蚁输出一个禁忌表)
tabu_size=max(size(tabu))%禁忌表的规模
fori=1:
tabu_size
tour(Ant,i)=tabu(l,i)
end%用tabu里的数据替换tour矩阵里的数据,以记录路径
fori=1:
(tabu_size-1)
cost(Nc,Ant)=cost(Nc,Ant)+DistanceMatrix(tabu(i),tabu(i+1))
%计算禁忌表中路线总长度
end
cost%输出矩阵
end
best_cost(l,Nc)=min(cost(Nc,:
))%替换最好距离矩阵的数据
[mn]=sort(cost(Nc,:
))
besttour(Nc,:
)=tour(n
(1),:
)%-记录每一次迭代的最好解的路径
%开始更新信息素为下一次迭代准备
[qv]=sort(cost(Nc,:
))%从小到大排列第Nc次迭代的距离
goodAnt1=tour(v
(1),:
)%将各个精英蚂蚁的禁忌表矩阵提取出来
goodAnt2=tour(v
(2),:
)
goodAnt3=tour(v(3),:
)
goodAnt4=tour(v(4),:
)
goodAntS=tour(v(5),:
)
badAnt=tour(v(AntNum),:
)%提取出最差解的矩阵
%开始更新城市信息素,采用全局更新策略
fori=1:
mm
forj=l:
mm
ifi~=j
tao(i,j)=(1—rou)*tao(i,j);
end
end
end
tao%首先更新所有路径的信息素,考虑挥发的因素,更新五只精英蚂蚁的信息素
tourl=goodAnt1(find(goodAnt1>0))%得出除去零点的第一只蚂蚁的路径矩阵
fori=1:
(length(tourl)—1)
A_tao(tourl(i),tourl(i+1))=A_tao(tourl(i),tourl(i+1))+Q/cost(Nc,v
(1))%更新了第一只蚂蚁的路径信息素增量
A_tao(tourl(i+1),tourl(i))=A_tao(tourl(i),tourl(i+1))%使得信息素矩阵仍为对称矩阵
end
A_tao%输出A_tao矩阵
tour2=goodAnt2(find(goodAnt2〉0))
%得出除去零点的第二只蚂蚁的路径矩阵
fori:
(length(tour2)*1)
A_tao(tour2(i),tour2(i+1))=A_tao(tour2(i),tour2(i+l))+Q/cost(Nc,v
(2))%更
新了第二只蚂蚁的路径信息素增量
Aestao(tour2(i+1),tour2(i))=Aestao(tour2(i),tour2(i+1))
end
Atao%再次输出Atao矩阵
tour3=goodAnt3(find(goodAnt3>0))%得出除去零点的第三只蚂蚁的路径矩阵
fori=1 :
(length(tour3)-1)
A_tao(tour3(i),tour3(i+1))=Atao(tour3(i),tour3(i+1))+Q/cost(Nc,v(3))%更新了第三只蚂蚁的路径信息素增量
A_tao(tour3(i+1),tour3(i))=A_tao(tour3(i),tour3(i+1))
end
A_tao%再次输出tao矩阵
tour4=goodAnt4(find(goodAnt4>0))
%得出除去零点的第四只蚂蚁的路径矩阵
fori=1:
(length(tour4)-1)
A_tao(tour4{i),tour4(i+l))=A_tao(tour4(i),tour4(i+1))+Q/cost(Nc,v(4))
%更新了第四只蚂蚁的路径信息素增量
A_tao(tour4(i+1),tour4(i))=A_tao(tour4(i),tour4(i+l))
end
A_ao%再次输出tao矩阵
tours=goodAntS(find(goodAntS>0))
%得出除去零点的第五只蚂蚁的路径矩阵
fori=1:
(length(tour5)—1)
A_tao(tour5(i),tour5(i+l))=A_tao(tours(i),tour5(i+l))+Q/cost(Nc,v(5))
%更新了第五只蚂蚁的路径信息素增量
A_tao(tour5(i+l),tour5(i))=A_tao(tour5(i),tour5(i+1))
end
A_tao%再次输出tao矩阵
%更新糟糕蚂蚁的信息素
tour6=badAnt(find(badAnt〉0))%得出糟糕蚂蚁的除去零点的路径矩阵
fori=1:
(length(tour6)一1)
A_tao(tour6(i),tour6(i+1))=A_tao(tour6(i),tour6(i+1))—Qlcost(Nc,v(AntNum))%更新糟糕蚂蚁的路径信息素增量
A_tao(tour6(i+1),tour6(i))=AJao(tour6(i),tour6(i+1))
end
A_tao%最终更新后的信息素矩阵
tao=tao+A_tao%更新所有路径的信息素
%将信息素限制在mintao和maxtao之间
maxtao=SO1rou*(Q/bestcost(l,Nc))
mintao=maxtao/10000
fori=1:
mm
forj=l:
mm
ifi==j
tao(i,j)=0
elseifi~=j&tao(i,j)>=maxtao
tao(i,j)=maxtao
elseifi~=j&tao(i,j)<=mintao
tao(i,j)=mintao
end
end
end
本文建立的集装箱码头船舶调度优化模型能够比较实际的反映出集装箱码头的调度情况,即当优先权较大的船舶和优先权较小的船在相差较短的一段时间内相继到港,集装箱码头可以根据集装箱码头条件采取大船优先调度的策略;而当船舶先后到达相差时间较大的情况到港,以所有船舶在港时间最短为目标,必然遵循先来先服务的原则,优先调度先行到港的船舶。
此外,实验结果表明在本文的模型中所设计采用的蚁群算法能够有效得出船舶在港时间的近似最优值即所有船舶在港时间最小。
第三章:
Matlab优化设计工具箱简介
在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案.最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。
由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。
用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:
1)建立数学模型
即用数学语言来描述最优化问题。
模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。
2)数学求解
数学模型建好以后,选择合理的最优化方法进行求解。
最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。
3。
1Matlab优化工具箱
工具箱是MATLAB函数的综合程序库,不同的工具箱包含有大量相关的库函数,在进行复杂的运算时,只需调用相关的函数就可完成给定的任务。
最优化工
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精校版蚁群 算法 报告