智能计算.docx
- 文档编号:30153879
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:13
- 大小:69.92KB
智能计算.docx
《智能计算.docx》由会员分享,可在线阅读,更多相关《智能计算.docx(13页珍藏版)》请在冰豆网上搜索。
智能计算
智能计算
学号:
2012211766
班级:
0451202
专业:
智能科学与技术
姓名:
孔龙
问题描述:
旅行商问题是物流领域中的典型问题,它的求解具有十分重要的理论和现实意义。
采用一定的物流配送方式,可以大大节省人力物力,完善整个物流系统。
已被广泛采用的遗传算法是旅行商问题的传统求解方法,但遗传算法收敛速度慢,具有一定的缺陷。
本文采用蚁群算法,充分利用蚁群算法的智能性,求解旅行商问题,并进行实例仿真。
进行仿真计算的目标是,该算法能够获得旅行商问题的优化结果,平均距离和最短距离。
遗传算法求关键路径:
1算法描述:
遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
遗传算法是从代表问题可能潜在的解集的一个种群开始的,而一个种群则由经过基因编码的一定数目的个体组成。
每个个体实际上是染色体带有特征的实体。
染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。
因此,在一开始需要实现从表现型到基因型的映射即编码工作。
由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。
这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。
关键路径通常(但并非总是)是决定项目工期的进度活动序列。
它是项目中最长的路径,即使很小浮动也可能直接影响整个项目的最早完成时间。
关键路径的工期决定了整个项目的工期,任何关键路径上的终端元素的延迟在浮动时间为零或负数时将直接影响项目的预期完成时间(例如在关键路径上没有浮动时间)。
但特殊情况下,如果总浮动时间大于零,则有可能不会影响项目整体进度。
一个项目可以有多个、并行的关键路径。
另一个总工期比关键路径的总工期略少的一条并行路径被称为次关键路径。
最初,关键路径方法只考虑终端元素之间的逻辑依赖关系。
关键链方法中增加了资源约束。
关键路径方法是由杜邦公司发明的。
2算法:
packagegraph;
importjava.util.*;
publicclassGrph_CriticalPath
{
Graph_AdjListadjList;
Stack
intve[];
intvl[];
finalintmax=10000;
publicGrph_CriticalPath(Graph_AdjListadjList)//图的存储结构是用的邻接表
{
this.adjList=adjList;
intlength=adjList.vetexValue.length;
ve=newint[length];
vl=newint[length];
for(inti=0;i { ve[i]=0; vl[i]=max; } } publicvoidgetCriticalPath() { topologicalOrder(); intt=T.pop(); T.push(t); vl[t]=ve[t]; while(! T.isEmpty()) { intj=T.pop(); for(Graph_AdjList.ArcNodep=adjList.vetex[j].firstArc;p! =null;p=p.next) { intk=p.adjvex; if(vl[k]-p.weight { vl[j]=vl[k]-p.weight; } } } for(inti=0;i { for(Graph_AdjList.ArcNodep=adjList.vetex[i].firstArc;p! =null;p=p.next) { intk=p.adjvex; intee=ve[i]; intel=vl[k]-p.weight; if(ee==el) { System.out.print(i+","+k+""); } } } } publicvoidtopologicalOrder() { Stack S.push(0); intcount=0; while(! S.isEmpty()) { intj=S.pop(); T.push(j); count++; Graph_AdjList.ArcNodep=null; for(p=adjList.vetex[j].firstArc;p! =null;p=p.next) { intk=p.adjvex; if(--adjList.degree[k]==0) { S.push(k); } if(ve[j]+p.weight>ve[k]) { ve[k]=ve[j]+p.weight; } } } if(count { System.out.println("图中存在环路! "); return; } } publicvoidprint() { while(! T.isEmpty()) { System.out.print(T.pop()+""); } } publicvoidprintVel() { System.out.println(); for(inti=0;i { System.out.print(ve[i]+""); } System.out.println(); for(inti=0;i {System.out.print(vl[i]+"");}}} 3结果: 蚁群算法: 蚁群算法,又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。 它由MarcoDorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。 蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质。 针对PID控制器参数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比较,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值。 蚂蚁观察到的范围是一个方格世界,蚂蚁有一个参数为速度半径(一般是3),那么它能观察到的范围就是3*3个方格世界,并且能移动的距离也在这个范围之内。 蚂蚁所在的环境是一个虚拟的世界,其中有障碍物,有别的蚂蚁,还有信息素,信息素有两种,一种是找到食物的蚂蚁洒下的食物信息素,一种是找到窝的蚂蚁洒下的窝的信息素。 每个蚂蚁都仅仅能感知它范围内的环境信息。 环境以一定的速率让信息素消失。 在每只蚂蚁能感知的范围内寻找是否有食物,如果有就直接过去。 否则看是否有信息素,并且比较在能感知的范围内哪一点的信息素最多,这样,它就朝信息素多的地方走,并且每只蚂蚁都会以小概率犯错误,从而并不是往信息素最多的点移动。 蚂蚁找窝的规则和上面一样,只不过它对窝的信息素做出反应,而对食物信息素没反应。 每只蚂蚁都朝向信息素最多的方向移,并且,当周围没有信息素指引的时候,蚂蚁会按照自己原来运动的方向惯性的运动下去,并且,在运动的方向有一个随机的小的扰动。 为了防止蚂蚁原地转圈,它会记住刚才走过了哪些点,如果发现要走的下一点已经在之前走过了,它就会尽量避开。 如果蚂蚁要移动的方向有障碍物挡住,它会随机的选择另一个方向,并且有信息素指引的话,它会按照觅食的规则行为。 每只蚂蚁在刚找到食物或者窝的时候撒发的信息素最多,并随着它走远的距离,播撒的信息素越来越少。 根据这几条规则,蚂蚁之间并没有直接的关系,但是每只蚂蚁都和环境发生交互,而通过信息素这个纽带,实际上把各个蚂蚁之间关联起来了。 比如,当一只蚂蚁找到了食物,它并没有直接告诉其它蚂蚁这儿有食物,而是向环境播撒信息素,当其它的蚂蚁经过它附近的时候,就会感觉到信息素的存在,进而根据信息素的指引找到了食物。 2代码 functionyy=ACATSP x=[413754257268715483641822839125245871748718138262584541444]'; y=[94846762649958446269605460463838426971787640407323521263550]'; C=[xy]; NC_max=50; m=30; Alpha=1.5; Beta=2; Rho=0.1; Q=10^6; %%------------------------------------------------------------------------- %%主要符号说明 %%Cn个城市的坐标,n×2的矩阵 %%NC_max最大迭代次数 %%m蚂蚁个数 %%Alpha表征信息素重要程度的参数 %%Beta表征启发式因子重要程度的参数 %%Rho信息素蒸发系数 %%Q信息素增加强度系数 %%R_best各代最佳路线 %%L_best各代最佳路线的长度 %%========================================================================= %%第一步: 变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 fori=1: n forj=1: n ifi~=j D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; else D(i,j)=eps;%i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end D(j,i)=D(i,j);%对称矩阵 end end Eta=1./D;%Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n);%Tau为信息素矩阵 Tabu=zeros(m,n);%存储并记录路径的生成 NC=1;%迭代计数器,记录迭代次数 R_best=zeros(NC_max,n);%各代最佳路线 L_best=inf.*ones(NC_max,1);%各代最佳路线的长度 L_ave=zeros(NC_max,1);%各代路线的平均长度 whileNC<=NC_max%停止条件之一: 达到最大迭代次数,停止 %%第二步: 将m只蚂蚁放到n个城市上 Randpos=[];%随即存取 fori=1: (ceil(m/n)) Randpos=[Randpos,randperm(n)]; end Tabu(: 1)=(Randpos(1,1: m))'; %%第三步: m只蚂蚁按概率函数选择下一座城市,完成各自的周游 forj=2: n%所在城市不计算 fori=1: m visited=Tabu(i,1: (j-1));%记录已访问的城市,避免重复访问 J=zeros(1,(n-j+1));%待访问的城市 P=J;%待访问城市的选择概率分布 Jc=1; fork=1: n iflength(find(visited==k))==0%开始时置0 J(Jc)=k; Jc=Jc+1;%访问的城市个数自加1 end end %下面计算待选城市的概率分布 fork=1: length(J) P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta); end P=P/(sum(P)); %按概率原则选取下一个城市 Pcum=cumsum(P);%cumsum,元素累加即求和 Select=find(Pcum>=rand);%若计算的概率大于原来的就选择这条路线 to_visit=J(Select (1)); Tabu(i,j)=to_visit; end end ifNC>=2 Tabu(1,: )=R_best(NC-1,: ); end %%第四步: 记录本次迭代最佳路线 L=zeros(m,1);%开始距离为0,m*1的列向量 fori=1: m R=Tabu(i,: ); forj=1: (n-1) L(i)=L(i)+D(R(j),R(j+1));%原距离加上第j个城市到第j+1个城市的距离 end L(i)=L(i)+D(R (1),R(n));%一轮下来后走过的距离 end L_best(NC)=min(L);%最佳距离取最小 pos=find(L==L_best(NC)); R_best(NC,: )=Tabu(pos (1),: );%此轮迭代后的最佳路线 L_ave(NC)=mean(L);%此轮迭代后的平均距离 NC=NC+1;%迭代继续 %%第五步: 更新信息素 Delta_Tau=zeros(n,n);%开始时信息素为n*n的0矩阵 fori=1: m forj=1: (n-1) Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i); %此次循环在路径(i,j)上的信息素增量 end Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i); %此次循环在整个路径上的信息素增量 end Tau=(1-Rho).*Tau+Delta_Tau;%考虑信息素挥发,更新后的信息素 %%第六步: 禁忌表清零 Tabu=zeros(m,n);%%直到最大迭代次数 end %%第七步: 输出结果 Pos=find(L_best==min(L_best));%找到最佳路径(非0为真) Shortest_Route=R_best(Pos (1),: )%最大迭代次数后最佳路径 Shortest_Length=L_best(Pos (1))%最大迭代次数后最短距离 subplot(1,2,1);%绘制第一个子图形 DrawRoute(C,Shortest_Route);%画路线图的子函数 subplot(1,2,2);%绘制第二个子图形 plot(L_best); holdon%保持图形 plot(L_ave,'r'); title('平均距离和最短距离')%标题 functionDrawRoute(C,R) N=length(R); scatter(C(: 1),C(: 2)); holdon plot([C(R (1),1),C(R(N),1)],[C(R (1),2),C(R(N),2)],'g'); holdon forii=2: N plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g'); holdon end title('旅行商问题优化结果') 3结果:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 计算