遗传算法(GA)在旅行商问题(TSP)中的应用
- 格式:pdf
- 大小:652.97 KB
- 文档页数:2


程序一:主程序%TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序%D是距离矩阵,n为种群个数%参数a是中国31个城市的坐标%C为停止代数,遗传到第C代时程序停止,C的具体取值视问题的规模和耗费的时间而定%m为适应值归一化淘汰加速指数,最好取为1,2,3,4,不宜太大%alpha为淘汰保护指数,可取为0~1之间任意小数,取1时关闭保护功能,建议取0.8~1.0之间的值%R为最短路径,Rlength为路径长度function [R,Rlength]=geneticTSP(D,a,n,C,m,alpha)[N,NN]=size(D);farm=zeros(n,N);%用于存储种群for i=1:nfarm(i,:)=randperm(N);%随机生成初始种群endR=farm(1,:);subplot(1,3,1)scatter(a(:,1),a(:,2),'x')pause(1)subplot(1,3,2)plotaiwa(a,R)pause(1)farm(1,:)=R;len=zeros(n,1);%存储路径长度fitness=zeros(n,1);%存储归一化适应值counter=0;while counterfor i=1:nlen(i,1)=myLength(D,farm(i,:));%计算路径长度endmaxlen=max(len);minlen=min(len);fitness=fit(len,m,maxlen,minlen);%计算归一化适应值rr=find(len==minlen);R=farm(rr(1,1),:);%更新最短路径FARM=farm;%优胜劣汰,nn记录了复制的个数nn=0;for i=1:nif fitness(i,1)>=alpha*randnn=nn+1;FARM(nn,:)=farm(i,:);endendFARM=FARM(1:nn,:);[aa,bb]=size(FARM);%交叉和变异while aaif nn<=2nnper=randperm(2);elsennper=randperm(nn);endA=FARM(nnper(1),:);B=FARM(nnper(2),:);[A,B]=intercross(A,B);FARM=[FARM;A;B];[aa,bb]=size(FARM);endif aa>nFARM=FARM(1:n,:);%保持种群规模为nendfarm=FARM;clear FARMcounter=counter+1endRlength=myLength(D,R);subplot(1,3,3)plotaiwa(a,R)程序二:计算邻接矩阵%输入参数a是中国31个城市的坐标%输出参数D是无向图的赋权邻接矩阵function D=ff01(a)[c,d]=size(a);D=zeros(c,c);for i=1:cfor j=i:cbb=(a(i,1)-a(j,1)).^2+(a(i,2)-a(j,2)).^2;D(i,j)=bb^(0.5);D(j,i)=D(i,j);endend程序三:计算归一化适应值%计算归一化适应值的子程序function fitness=fit(len,m,maxlen,minlen)fitness=len;for i=1:length(len)fitness(i,1)=(1-((len(i,1)-minlen)/(maxlen-minlen+0.0001))).^m;end程序四:交叉和变异的子程序%交叉算法采用的是由Goldberg和Lingle于1985年提出的PMX(部分匹配交叉) function [a,b]=intercross(a,b)L=length(a);if L<=10%确定交叉宽度W=9;elseif ((L/10)-floor(L/10))>=rand&&L>10W=ceil(L/10)+8;elseW=floor(L/10)+8;endp=unidrnd(L-W+1);%随机选择交叉范围,从p到p+Wfor i=1:W%交叉x=find(a==b(1,p+i-1));y=find(b==a(1,p+i-1));[a(1,p+i-1),b(1,p+i-1)]=exchange(a(1,p+i-1),b(1,p+i-1));[a(1,x),b(1,y)]=exchange(a(1,x),b(1,y));endfunction [x,y]=exchange(x,y)temp=x;x=y;y=temp;程序五: 计算路径的子程序%该路径长度是一个闭合的路径的长度function len=myLength(D,p)[N,NN]=size(D);len=D(p(1,N),p(1,1));for i=1:(N-1)len=len+D(p(1,i),p(1,i+1));end程序六:用于绘制路径示意图的程序function plotaiwa(a,R)scatter(a(:,1),a(:,2),'x')hold onplot([a(R(1),1),a(R(31),1)],[a(R(1),2),a(R(31),2)])hold onfor i=2:length(R)x0=a(R(i-1),1);y0=a(R(i-1),2);x1=a(R(i),1);y1=a(R(i),2);xx=[x0,x1];yy=[y0,y1];plot(xx,yy)hold onend。
人工智能实验报告实验六遗传算法实验II一、实验目的:熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。
二、实验原理:旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。
假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。
路径的选择目标是要求得的路径路程为所有路径之中的最小值。
TSP问题是一个组合优化问题。
该问题可以被证明具有NPC计算复杂性。
因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。
遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程。
它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。
这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代。
后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程。
群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解。
要求利用遗传算法求解TSP问题的最短路径。
三、实验内容:1、参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。
2、对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。
3、增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。
4、上交源代码。
四、实验报告要求:1、画出遗传算法求解TSP问题的流程图。
2、分析遗传算法求解不同规模的TSP问题的算法性能。
规模越大,算法的性能越差,所用时间越长。
3、对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。
遗传算法在优化问题中的应用遗传算法是一种基于进化原理的优化算法,它模拟了生物进化的过程,通过自然选择和基因交叉变异的操作,逐步寻找到最优解。
由于其优良的全局搜索性能和较好的适应性,在许多优化问题中都得到了广泛的应用。
本文将介绍遗传算法在三个典型的优化问题中的应用。
1. 旅行商问题(TSP)的优化旅行商问题是指一名商人需要穿越多个城市,且每个城市只能访问一次,要求找到一条最短的路径使得商人能够经过所有城市并返回出发点。
由于遍历所有可能的路径需要极大的计算量,使用遗传算法能够较好地解决这一问题。
在遗传算法中,将每个候选路径看做一个个体,通过编码方式将路径转化为遗传信息。
初始时,随机生成一定数量的路径表示种群。
然后使用选择、交叉、变异等操作对种群进行迭代优化。
优化终止的条件可以是达到最大迭代次数或者路径长度不再变化。
通过多轮迭代和选择操作,遗传算法可以逐渐生成新的路径,并筛选出较短的路径。
最终得到的路径就是旅行商问题的最优解。
2. 函数优化问题函数优化问题是指通过调整函数的自变量,使得函数的取值达到最大或最小。
常见的函数优化问题有参数的拟合、神经网络权值的优化等。
遗传算法可以应用于函数优化问题,通过自然选择和基因操作来逐步优化函数取值。
在遗传算法中,将函数的自变量看做个体的基因,将函数的取值看做个体的适应度。
通过选择、交叉、变异等操作,优化算法逐步在参数空间中搜索,寻找到函数的最优解。
3. 布尔函数优化问题布尔函数优化问题是指通过调整若干个布尔变量的取值,使得布尔函数的取值达到最大或最小。
布尔函数通常是指仅包含与、或和非等逻辑运算的函数。
遗传算法可以应用于布尔函数优化问题,通过基因编码和优化操作来求解函数的最优解。
在遗传算法中,将布尔函数的变量看做个体的基因,将布尔函数的取值看做个体的适应度。
通过选择、交叉、变异等操作,优化算法逐步在状态空间中搜索,寻找到布尔函数的最优解。
总结:遗传算法作为一种优化算法,在旅行商问题、函数优化问题和布尔函数优化问题等领域中发挥着重要作用。