完整word版蚁群算法报告Word下载.docx

上传人:b****6 文档编号:19176427 上传时间:2023-01-04 格式:DOCX 页数:20 大小:372.90KB
下载 相关 举报
完整word版蚁群算法报告Word下载.docx_第1页
第1页 / 共20页
完整word版蚁群算法报告Word下载.docx_第2页
第2页 / 共20页
完整word版蚁群算法报告Word下载.docx_第3页
第3页 / 共20页
完整word版蚁群算法报告Word下载.docx_第4页
第4页 / 共20页
完整word版蚁群算法报告Word下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

完整word版蚁群算法报告Word下载.docx

《完整word版蚁群算法报告Word下载.docx》由会员分享,可在线阅读,更多相关《完整word版蚁群算法报告Word下载.docx(20页珍藏版)》请在冰豆网上搜索。

完整word版蚁群算法报告Word下载.docx

代表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:

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矩阵赋初值

forj=l:

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矩阵

fori=2:

s(l,i)=3/DistanceMatrix(l,i);

%这是什么意思,

s(i,l)=1/DistanceMatrix(i,l);

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

ifNc>

=10&

Nc<

40

Q=2,rou=0.4,alpha=3,belta=4,gama=2

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矩阵记录容量符合的点

A%输出A矩阵

ifsum(A)==0%如果没有容量满足约束的点

sumload=0%装载量归零

cur_pos=1%起始点归一

tabu=[tabu,l]%路线重新从一点开始

PartNum=PartNum+1%所用车辆数加一

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小点的概率的分子

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]%给路径最后一个点赋值一,也就是封口

elseifr>

=max(p)%当随机数大于最大概率时选择概率次大的点

curios=C(b1

(2))

sumload=sumload+R(C(bl

(2)))

tabu=[tabu,cur_pos]

m=m(find(m~=C(b1

(2))))

tabu=[tabu,l]

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))

%计算禁忌表中路线总长度

cost%输出矩阵

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),:

)%提取出最差解的矩阵

%开始更新城市信息素,采用全局更新策略

forj=l:

tao(i,j)=(1-rou)*tao(i,j);

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))%使得信息素矩阵仍为对称矩阵

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))

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))

A_tao%再次输出tao矩阵

tour4=goodAnt4(find(goodAnt4>

%得出除去零点的第四只蚂蚁的路径矩阵

(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))

A_ao%再次输出tao矩阵

tours=goodAntS(find(goodAntS>

%得出除去零点的第五只蚂蚁的路径矩阵

(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))

A_tao%再次输出tao矩阵

%更新糟糕蚂蚁的信息素

tour6=badAnt(find(badAnt>

0))%得出糟糕蚂蚁的除去零点的路径矩阵

(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))

A_tao%最终更新后的信息素矩阵

tao=tao+A_tao%更新所有路径的信息素

%将信息素限制在mintao和maxtao之间

maxtao=SO1rou*(Q/bestcost(l,Nc))

mintao=maxtao/10000

ifi==j

tao(i,j)=0

elseifi~=j&

tao(i,j)>

=maxtao

tao(i,j)=maxtao

tao(i,j)<

=mintao

tao(i,j)=mintao

本文建立的集装箱码头船舶调度优化模型能够比较实际的反映出集装箱码头的调度情况,即当优先权较大的船舶和优先权较小的船在相差较短的一段时间内相继到港,集装箱码头可以根据集装箱码头条件采取大船优先调度的策略;

而当船舶先后到达相差时间较大的情况到港,以所有船舶在港时间最短为目标,必然遵循先来先服务的原则,优先调度先行到港的船舶。

此外,实验结果表明在本文的模型中所设计采用的蚁群算法能够有效得出船舶在港时间的近似最优值即所有船舶在港时间最小。

第三章:

Matlab优化设计工具箱简介

在生活和工作中,人们对于同一个问题往往会提出多个解决方案,并通过各方面的论证从中提取最佳方案。

最优化方法就是专门研究如何从多个方案中科学合理地提取出最佳方案的科学。

由于优化问题无所不在,目前最优化方法的应用和研究已经深入到了生产和科研的各个领域,如土木工程、机械工程、化学工程、运输调度、生产控制、经济规划、经济管理等,并取得了显著的经济效益和社会效益。

用最优化方法解决最优化问题的技术称为最优化技术,它包含两个方面的内容:

1)建立数学模型

即用数学语言来描述最优化问题。

模型中的数学关系式反映了最优化问题所要达到的目标和各种约束条件。

2)数学求解 

数学模型建好以后,选择合理的最优化方法进行求解。

最优化方法的发展很快,现在已经包含有多个分支,如线性规划、整数规划、非线性规划、动态规划、多目标规划等。

3.1Matlab优化工具箱

工具箱是MATLAB函数的综合程序库,不同的工具箱包含有大量相关的库函数,在进行复杂的运算时,只需调用相关的函数就可完成给定的任务。

最优化工具箱(OptimizationToolbox)是30多个工具箱之一,主要用于求解各种工程最优化设计问题。

3.1.1优化工具箱功能:

(1)求解无约束条件非线性极小值;

(2)求解约束条件下非线性极小值,包括目标逼近问题、极大-极小值问题和半无限极小值问题;

(3)求解二次规划和线性规划问题;

(4)非线性最小二乘逼近和曲线拟合;

(5)非线性系统的方程求解;

(6)约束条件下的线性最小二乘优化;

(7)求解复杂结构的大规模优化问题。

3.2Matlab优化设计工具

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1