一些解决TSP问题的算法及源代码_第1页
一些解决TSP问题的算法及源代码_第2页
一些解决TSP问题的算法及源代码_第3页
一些解决TSP问题的算法及源代码_第4页
一些解决TSP问题的算法及源代码_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模拟退火算法ﻫ模拟退火算法来源于固体退火原理,将固体加温至充分高,再让其缓缓冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而缓缓冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。依据Metropolis准则,粒子在温度T时趋于平衡的概率为e-ΔE/(kT),其中E为温度T时的内能,ΔE为其转变量,k为Boltzmann常数.用固体退火模拟组合优化问题,将内能E模拟为目标函数值f,温度T演化成掌握参数t,即得到解组合优化问题的模拟退火算法:由初始解i和掌握参数初值t开头,对当前解重复“产生新解→计算目标函数差→接受或舍弃”的迭代,并逐步衰减t值,算法终止时的当前解即为所得近似最优解,这是基于蒙特卡罗迭代求解法的一种启发式随机搜寻过程。退火过程由冷却进度表(CoolingSchedule)掌握,包括掌握参数的初值t及其衰减因子Δt、每个t值时的迭代次数L和停止条件S。ﻫ3.5。1模拟退火算法的模型ﻫ模拟退火算法可以分解为解空间、目标函数和初始解三部分.

模拟退火的基本思想:

(1)初始化:初始温度T(充分大),初始解状态S(是算法迭代的起点),每个T值的迭代次数L

(2)对k=1,……,L做第(3)至第6步:ﻫ(3)产生新解S′ﻫ(4)计算增量Δt′=C(S′)—C(S),其中C(S)为评价函数ﻫ(5)若Δt′<0则接受S′作为新的当前解,否则以概率exp(-Δt′/T)接受S′作为新的当前解.ﻫ(6)如果满意终止条件则输出当前解作为最优解,结束程序。ﻫ终止条件通常取为连续若干个新解都没有被接受时终止算法。ﻫ(7)T逐渐削减,且T—>0,然后转第2步.ﻫ算法对应动态演示图:ﻫ模拟退火算法新解的产生和接受可分为如下四个步骤:ﻫ第一步是由一个产生函数从当前解产生一个位于解空间的新解;为便于后续的计算和接受,削减算法耗时,通常选择由当前新解经过简洁地变换即可产生新解的方法,如对构成新解的全部或部分元素进行置换、互换等,注意到产生新解的变换方法决定了当前新解的邻域结构,因而对冷却进度表的选取有肯定的影响。ﻫ其次步是计算与新解所对应的目标函数差。由于目标函数差仅由变换部分产生,所以目标函数差的计算最好按增量计算.事实表明,对大多数应用而言,这是计算目标函数差的最快方法。ﻫ第三步是推断新解是否被接受,推断的依据是一个接受准则,最常用的接受准则是Metropo1is准则:若Δt′〈0则接受S′作为新的当前解S,否则以概率exp(-Δt′/T)接受S′作为新的当前解S。

第四步是当新解被确定接受时,用新解代替当前解,这只需将当前解中对应于产生新解时的变换部分予以实现,同时修正目标函数值即可.此时,当前解实现了一次迭代。可在此基础上开头下一轮试验。而当新解被判定为舍弃时,则在原当前解的基础上连续下一轮试验。ﻫ模拟退火算法与初始值无关,算法求得的解与初始解状态S(是算法迭代的起点)无关;模拟退火算法具有渐近收敛性,已在理论上被证明是一种以概率l收敛于全局最优解的全局优化算法;模拟退火算法具有并行性。3。5.2模拟退火算法的简洁应用ﻫ作为模拟退火算法应用,商量货郎担问题(TravellingSalesmanProblem,简记为TSP):设有n个城市,用数码1,…,n代表。城市i和城市j之间的距离为d(i,j)i,j=1,…,n.TSP问题是要找遍访每个域市恰好一次的一条回路,且其路径总长度为最短。。ﻫ求解TSP的模拟退火算法模型可描述如下:ﻫ解空间解空间S是遍访每个城市恰好一次的全部回路,是{1,……,n}的全部循环排列的集合,S中的成员记为(w1,w2,……,wn),并记wn+1=w1。初始解可选为(1,……,n)ﻫ目标函数此时的目标函数即为访问全部城市的路径总长度或称为代价函数:我们要求此代价函数的最小值。ﻫ新解的产生随机产生1和n之间的两相异数k和m,若k〈m,则将

(w1,w2,…,wk,wk+1,…,wm,…,wn)ﻫ变为:

(w1,w2,…,wm,wm—1,…,wk+1,wk,…,wn).ﻫ如果是k〉m,则将ﻫ(w1,w2,…,wk,wk+1,…,wm,…,wn)

变为:ﻫ(wm,wm—1,…,w1,wm+1,…,wk-1,wn,wn-1,…,wk)。ﻫ上述变换方法可简洁说成是“逆转中间或者逆转两端”。ﻫ也可以采纳其他的变换方法,有些变换有独特的优越性,有时也将它们交替使用,得到一种更好方法.ﻫ代价函数差设将(w1,w2,……,wn)变换为(u1,u2,……,un),则代价函数差为:依据上述分析,可写出用模拟退火算法求解TSP问题的伪程序:ﻫProcedureTSPSA:ﻫbeginﻫinit—of-T;{T为初始温度}ﻫS={1,……,n};{S为初始值}ﻫtermination=false;ﻫwhiletermination=falseﻫbeginﻫfori=1toLdoﻫbeginﻫgenerate(S′formS);{从当前回路S产生新回路S′}ﻫΔt:=f(S′))—f(S);{f(S)为路径总长}

IF(Δt〈0)OR(EXP(—Δt/T)>Random—of-[0,1])ﻫS=S′;ﻫIFthe-halt-condition—is—TRUETHENﻫtermination=true;ﻫEnd;

T_lower;ﻫEnd;ﻫEndﻫ模拟退火算法的应用很广泛,可以较高的效率求解最大截问题(MaxCutProblem)、0-1背包问题(ZeroOneKnapsackProblem)、图着色问题(GraphColouringProblem)、调度问题(SchedulingProblem)等等.3.5。3模拟退火算法的参数掌握问题

模拟退火算法的应用很广泛,可以求解NP完全问题,但其参数难以掌握,其主要问题有以下三点:

(1)温度T的初始值设置问题。ﻫ温度T的初始值设置是影响模拟退火算法全局搜寻性能的重要因素之一、初始温度高,则搜寻到全局最优解的可能性大,但因此要花费大量的计算时间;反之,则可节省计算时间,但全局搜寻性能可能受到影响。实际应用过程中,初始温度一般需要依据实验结果进行若干次调整。ﻫ(2)退火速度问题。ﻫ模拟退火算法的全局搜寻性能也与退火速度亲密相关.一般来说,同一温度下的“充分”搜寻(退火)是相当必要的,但这需要计算时间。实际应用中,要针对简略问题的性质和特征设置合理的退火平衡条件.ﻫ(3)温度管理问题。ﻫ温度管理问题也是模拟退火算法难以处理的问题之一.实际应用中,由于必须考虑计算简洁度的切实可行性等问题,常采用如下所示的降温方式:T(t+1)=k×T(t)ﻫ式中k为正的略小于1。00的常数,t为降温的次数使用SA解决TSP问题的Matlab程序:functionout=tsp(loc)ﻫ%TSPTravelingsalesmanproblem(TSP)usingSA(simulatedannealing)。ﻫ%TSPbyitselfwillgenerate20citieswithinaunitcubeandﻫ%thenuseSAtoslovethisproblem.ﻫ%

%TSP(LOC)solvethetravelingsalesmanproblemwithcities’ﻫ%coordinatesgivenbyLOC,whichisanMby2matrixandMisﻫ%thenumberofcities。ﻫ%

%Forexample:ﻫ%ﻫ%loc=rand(50,2);ﻫ%tsp(loc);

ifnargin==0,ﻫ%ThefollowingdataisfromthepostbyJenniferMyers(HYPERLINK"http://www。madio.net/bbs/mailtjmyers@nwu"\t”_blank”jmyers@nwu。ﻫedu)

edu)ﻫ%tocomp.ai.neural—nets。It’sobtainedfromthefigurein

%Hopfield&Tank’s1985paperinBiologicalCyberneticsﻫ%(Vol52,pp.141-152).ﻫloc=[0.3663,0.9076;0.7459,0。8713;0.4521,0.8465;ﻫ0.7624,0。7459;0.7096,0.7228;0。0710,0.7426;ﻫ0.4224,0。7129;0.5908,0.6931;0.3201,0。6403;ﻫ0.5974,0。6436;0.3630,0.5908;0。6700,0。5908;ﻫ0.6172,0。5495;0。6667,0。5446;0.1980,0。4686;ﻫ0.3498,0.4488;0.2673,0.4274;0。9439,0。4208;ﻫ0。8218,0.3795;0.3729,0。2690;0.6073,0。2640;ﻫ0.4158,0.2475;0.5990,0。2261;0.3927,0.1947;ﻫ0.5347,0.1898;0.3960,0.1320;0.6287,0。0842;ﻫ0.5000,0。0396;0.9802,0。0182;0。6832,0.8515];ﻫend

NumCity=length(loc);%Numberofcitiesﻫdistance=zeros(NumCity);%Initializeadistancematrix

%Fillthedistancematrixﻫfori=1:NumCity,ﻫforj=1:NumCity,ﻫdistance(i,j)=norm(loc(i,-loc(j,);ﻫdistance(i,j)=norm(loc(i,-loc(j,);ﻫend

endﻫ%Togenerateenergy(objectivefunction)frompathﻫ%path=randperm(NumCity);ﻫ%energy=sum(distance((path-1)*NumCity+[path(2:NumCity)path(1)]));ﻫ%FindtypicalvaluesofdEﻫcount=20;ﻫall_dE=zeros(count,1);

fori=1:countﻫpath=randperm(NumCity);ﻫenergy=sum(distance((path-1)*NumCity+[path(2:NumCity)ﻫpath(1)]));ﻫnew_path=path;

index=round(rand(2,1)*NumCity+.5);ﻫinversion_index=(min(index):max(index));ﻫnew_path(inversion_index)=fliplr(path(inversion_index));

all_dE(i)=abs(energy-...ﻫsum(sum(diff(loc([new_pathnew_path(1)],)’.^2)));

endﻫdE=max(all_dE);ﻫdE=max(all_dE);ﻫtemp=10*dE;%Choosethetemperaturetobelargeenoughﻫfprintf('Initialenergy=%f\n\n’,energy);ﻫ%Initialplots

out=[pathpath(1)];ﻫplot(loc(out(,1),loc(out(,2),'r。’,'Markersize’,20);ﻫaxissquare;holdonﻫh=plot(loc(out(,1),loc(out(,2));holdoff

MaxTrialN=NumCity*100;%Max.#oftrialsataﻫtemperature

MaxAcceptN=NumCity*10;%Max.#ofacceptancesata

temperature

StopTolerance=0.005;%StoppingtoleranceﻫTempRatio=0.5;%TemperaturedecreaseratioﻫminE=inf;%Initialvalueformin。energyﻫmaxE=—1;%Initialvalueformax.energyﻫ%Majorannealingloopﻫwhile(maxE-minE)/maxE〉StopTolerance,ﻫminE=inf;ﻫminE=inf;ﻫmaxE=0;

TrialN=0;%NumberoftrialmovesﻫAcceptN=0;%NumberofactualmovesﻫwhileTrialN<MaxTrialN&AcceptN〈MaxAcceptN,ﻫnew_path=path;ﻫindex=round(rand(2,1)*NumCity+.5);

inversion_index=(min(index):max(index));ﻫnew_path(inversion_index)=ﻫfliplr(path(inversion_index));

new_energy=sum(distance(.。.ﻫ(new_path-1)*NumCity+[new_path(2:NumCity)ﻫnew_path(1)]));ﻫifrand<exp((energy-new_energy)/temp),%

acceptﻫit!ﻫenergy=new_energy;ﻫpath=new_path;ﻫminE=min(minE,energy);ﻫmaxE=max(maxE,energy);ﻫAcceptN=AcceptN+1;ﻫend

TrialN=TrialN+1;

endﻫendﻫ%Updateplotﻫout=[pathpath(1)];ﻫset(h,’xdata',loc(out(,1),’ydata’,loc(out(,2));ﻫdrawnow;

%Prinrmationincommandwindowﻫfprintf('temp.=%f\n',temp);ﻫtmp=sprintf('%d',path);ﻫfprintf('path=%s\n',tmp);ﻫfprintf(’energy=%f\n’,energy);ﻫfprintf('[minEmaxE]=[%f%f]\n’,minE,maxE);ﻫfprintf('[AcceptNTrialN]=[%d%d]\n\n’,AcceptN,TrialN);ﻫ%Lowerthetemperatureﻫtemp=temp*TempRatio;ﻫendﻫ%Printsequentialnumbersinthegraphicwindow

fori=1:NumCity,

text(loc(path(i),1)+0.01,loc(path(i),2)+0.01,int2str(i),。..ﻫ’fontsize’,8);ﻫend又一个相关的Matlab程序function[X,P]=zkp(w,c,M,t0,tf)ﻫ[m,n]=size(w);ﻫL=100*n;

t=t0;

clearm;ﻫx=zeros(1,n)ﻫxmax=x;ﻫfmax=0;ﻫwhilet>tfﻫfork=1:L

xr=change(x)ﻫgx=g_0_1(w,x);ﻫgxr=g_0_1(w,xr);ﻫifgxr<=Mﻫfr=f_0_1(xr,c);ﻫf=f_0_1(x,c);ﻫdf=fr-f;

ifdf>0ﻫx=xr;

iffr>fmax

fmax=fr;ﻫxmax=xr;ﻫendﻫelseﻫp=rand;

ifp〈exp(df/t)

x=xr;ﻫendﻫendﻫend

endﻫt=0.87*tﻫendﻫP=fmax;

X=xmax;

%下面的函数产生新解

function[d_f,pi_r]=exchange_2(pi0,d)ﻫ[m,n]=size(d);ﻫclearm;ﻫu=rand;ﻫu=u*(n-2);ﻫu=round(u);ﻫifu〈2ﻫu=2;ﻫendﻫifu>n—2

u=n—2;ﻫendﻫv=rand;

v=v*(n—u+1);ﻫv=round(v);ﻫifv<1ﻫv=1;ﻫendﻫv=v+u;

ifv>nﻫv=n;ﻫendﻫpi_1(u)=pi0(v);ﻫpi_1(u)=pi0(u);ﻫifu〉1ﻫfork=1:(u-1)ﻫpi_1(k)=pi0(k);ﻫendﻫendﻫifv〉(u+1)

fork=1:(v-u-1)ﻫpi_1(u+k)=pi0(v-k);

endﻫendﻫifv<nﻫfork=(v+1):nﻫpi_1(k)=pi0(k);ﻫend

endﻫd_f=0;ﻫifv<nﻫd_f=d(pi0(u-1),pi0(v))+d(pi0(u),pi0(v+1));ﻫfork=(u+1):nﻫd_f=d_f+d(pi0(k),pi0(k-1))—d(pi0(v),pi0(v+1));

endﻫd_f=d_f-d(pi0(u—1),pi0(u));ﻫfork=(u+1):n

d_f=d_f—d(pi0(k-1),pi0(k));ﻫendﻫelseﻫd_f=d(pi0(u-1),pi0(v))+d(pi0(u),pi0(1))—d(pi0(u-1),pi0(u))—d(pi0(v),pi0(1));ﻫfork=(u+1):nﻫd_f=d_f—d(pi0(k),pi0(k-1));

endﻫfork=(u+1):nﻫd_f=d_f-d(pi0(k-1),pi0(k));ﻫendﻫend

pi_r=pi_1;遗传算法GA遗传算法:旅行商问题(travelingsalemanproblem,简称tsp):

已知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市只能访问一次,最后又必须返回动身城市。如何支配他对这些城市的访问次序,可使其旅行路线的总长度最短?

用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij)是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过全部顶点且每个顶点只通过一次的具有最短距离的回路。ﻫ这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商问题(dij≠dji,,任意i,j=1,2,3,…,n)。ﻫ若对于城市v={v1,v2,v3,…,vn}的一个访问挨次为t=(t1,t2,t3,…,ti,…,tn),其中ti∈v(i=1,2,3,…,n),且记tn+1=t1,则旅行商问题的数学模型为:ﻫminl=σd(t(i),t(i+1))(i=1,…,n)ﻫ旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采纳遗传算法求其近似解。ﻫ遗传算法:

初始化过程:用v1,v2,v3,…,vn代表所选n个城市。定义整数pop—size作为染色体的个数,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列.ﻫ适应度f的计算:对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)).ﻫ评价函数eval(vi):用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被选择产生后台的机会要大,设alpha∈(0,1),本文定义基于序的评价函数为eval(vi)=alpha*(1-alpha)。^(i-1)。[随机规划与模糊规划]ﻫ选择过程:选择过程是以旋转赌轮pop—size次为基础,每次旋转都为新的种群选择一个染色体。赌轮是按每个染色体的适应度进行选择染色体的.

step1、对每个染色体vi,计算累计概率qi,q0=0;qi=σeval(vj)j=1,…,i;i=1,…pop-size.ﻫstep2、从区间(0,pop—size)中产生一个随机数r;ﻫstep3、若qi—1<r<qi,则选择第i个染色体;ﻫstep4、重复step2和step3共pop-size次,这样可以得到pop—size个复制的染色体。ﻫgrefenstette编码:由于常规的交叉运算和变异运算会使种群中产生一些无实际意义的染色体,本文采纳grefenstette编码《遗传算法原理及应用》可以避开这种情况的消灭。所谓的grefenstette编码就是用所选队员在未选(不含淘汰)队员中的位置,如:

815216107431114612951813171ﻫ对应:

81421386325734324221。ﻫ交叉过程:本文采纳常规单点交叉。为确定交叉操作的父代,从到pop—size重复以下过程:从[0,1]中产生一个随机数r,如果r〈pc,则选择vi作为一个父代。ﻫ将所选的父代两两组队,随机产生一个位置进行交叉,如:ﻫ81421386325734324221ﻫ6123568563185633211ﻫ交叉后为:ﻫ81421386325185633211

6123568563734324221

变异过程:本文采纳均匀多点变异。类似交叉操作中选择父代的过程,在r<pm的标准下选择多个染色体vi作为父代。对每一个选择的父代,随机选择多个位置,使其在每位置按均匀变异(该变异点xk的取值范围为[ukmin,ukmax],产生一个[0,1]中随机数r,该点变异为x'k=ukmin+r(ukmax—ukmin))操作.如:

81421386325734324221

变异后:ﻫ814213106322734524121ﻫ反grefenstette编码:交叉和变异都是在grefenstette编码之后进行的,为了循环操作和返回最终结果,必须逆grefenstette编码过程,将编码恢复到自然编码。ﻫ循环操作:推断是否满意设定的带数xzome,否,则跳入适应度f的计算;是,结束遗传操作,跳出。Matlab程序:function[bestpop,trace]=ga(d,termops,num,pc,cxops,pm,alpha)ﻫ%ﻫ%—-—————————-—-—-——————-—ﻫ%[bestpop,trace]=ga(d,termops,num,pc,cxops,pm,alpha)ﻫ%d:距离矩阵

%termops:种群代数

%num:每代染色体的个数ﻫ%pc:交叉概率ﻫ%cxops:由于本程序采纳单点交叉,交叉点的设置在本程序中没有很好的解决,所以本文了采纳定点,即第cxops,可以随机产生。

%pm:变异概率

%alpha:评价函数eval(vi)=alpha*(1—alpha)。^(i-1).ﻫ%bestpop:返回的最优种群ﻫ%trace:进化轨迹ﻫ%-—--——-——----—--—-—-—--———--—--—-——-—-——-———--——ﻫ%####@@@##版权全部!欢迎宽阔网友改正,改进!##@@@####ﻫ%e-mail:tobysidney33@sohu。comﻫ%####################################################ﻫ%ﻫcitynum=size(d,2);

n=nargin;ﻫifn<2

disp(’缺少变量!!')ﻫdisp('^_^开个玩笑^_^’)ﻫendﻫifn<2ﻫtermops=500;ﻫnum=50;

pc=0.25;ﻫcxops=3;ﻫpm=0。30;ﻫalpha=0。10;ﻫendﻫifn<3ﻫnum=50;ﻫpc=0.25;ﻫcxops=3;ﻫpm=0.30;ﻫalpha=0。10;ﻫend

ifn<4ﻫpc=0.25;ﻫcxops=3;

pm=0.30;ﻫalpha=0。10;

end

ifn<5

cxops=3;ﻫpm=0。30;

alpha=0.10;

endﻫifn〈6ﻫpm=0.30;ﻫalpha=0.10;

endﻫifn〈7ﻫalpha=0.10;ﻫendﻫifisempty(cxops)ﻫcxops=3;ﻫend[t]=initializega(num,citynum);ﻫfori=1:termopsﻫ[l]=f(d,t);ﻫ[x,y]=find(l==max(l));ﻫtrace(i)=-l(y(1));

bestpop=t(y(1),:);

[t]=select(t,l,alpha);

[g]=grefenstette(t);ﻫ[g1]=crossover(g,pc,cxops);ﻫ[g]=mutation(g1,pm);%均匀变异

[t]=congrefenstette(g);ﻫend----——-—--—-—-------—---—-——-——-——-——--——---—-—-———----—-

function[t]=initializega(num,citynum)ﻫfori=1:numﻫt(i,:)=randperm(citynum);ﻫendﻫ————----—-—-——--------—--——--———--———--——-—--—-——-—---—---—ﻫfunction[l]=f(d,t)ﻫ[m,n]=size(t);ﻫfork=1:mﻫfori=1:n-1ﻫl(k,i)=d(t(k,i),t(k,i+1));ﻫendﻫl(k,n)=d(t(k,n),t(k,1));

l(k)=—sum(l(k,:));ﻫendﻫ---—---—-—-—-——-------——--————--—----———------——-—-——------ﻫfunction[t]=select(t,l,alpha)ﻫ[m,n]=size(l);ﻫt1=t;

[beforesort,aftersort1]=sort(l,2);%fsortfromltouﻫfori=1:nﻫaftersort(i)=aftersort1(n+1—i);%change

endﻫfork=1:n;ﻫt(k,:)=t1(aftersort(k),:);ﻫl1(k)=l(aftersort(k));ﻫendﻫt1=t;ﻫl=l1;ﻫfori=1:size(aftersort,2)

evalv(i)=alpha*(1-alpha)。^(i-1);ﻫend

m=size(t,1);ﻫq=cumsum(evalv);

qmax=max(q);

fork=1:mﻫr=qmax*rand(1);ﻫforj=1:m

ifj==1&r〈=q(1)ﻫt(k,:)=t1(1,:);

elseifj~=1&r>q(j-1)&r<=q(j)

t(k,:)=t1(j,:);ﻫendﻫendﻫendﻫ----—----———————-—----—-—-———--——--——---——-——--——-

function[g]=grefenstette(t)

[m,n]=size(t);ﻫfork=1:m

t0=1:n;

fori=1:nﻫforj=1:length(t0)ﻫift(k,i)==t0(j)

g(k,i)=j;

t0(j)=[];ﻫbreak

endﻫend

end

end

--—--—----—-----——-—-—-—--—----—----------—ﻫfunction[g]=crossover(g,pc,cxops)ﻫ[m,n]=size(g);ﻫran=rand(1,m);ﻫr=cxops;ﻫ[x,ru]=find(ran<pc);

ifru>=2ﻫfork=1:2:length(ru)-1ﻫg1(ru(k),:)=[g(ru(k),[1:r]),g(ru(k+1),[(r+1):n])];

g(ru(k+1),:)=[g(ru(k+1),[1:r]),g(ru(k),[(r+1):n])];ﻫg(ru(k),:)=g1(ru(k),:);ﻫendﻫendﻫ—-----——————---—--—--—-—---—-----—---—--—--—ﻫfunction[g]=mutation(g,pm)%均匀变异

[m,n]=size(g);ﻫran=rand(1,m);

r=rand(1,3);%daigaijinﻫrr=floor(n*rand(1,3)+1);ﻫ[x,mu]=find(ran<pm);ﻫfork=1:length(mu)ﻫfori=1:length(r)

umax(i)=n+1—rr(i);ﻫumin(i)=1;ﻫg(mu(k),rr(i))=umin(i)+floor((umax(i)—umin(i))*r(i));ﻫendﻫendﻫ----————--—--—-——-—--—--———--—-——------------—-----ﻫfunction[t]=congrefenstette(g)ﻫ[m,n]=size(g);ﻫfork=1:mﻫt0=1:n;ﻫfori=1:nﻫt(k,i)=t0(g(k,i));ﻫt0(g(k,i))=[];

endﻫendﻫ—--———----—-—----—-—--—-------—-----—-—-—----—---又一个Matlab程序,其中交叉算法采纳的是由Goldberg和Lingle于1985年提出的PMX(部分匹配交叉),淘汰保护指数alpha是我自己设计的,起到了加速优胜劣汰的作用。%TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序ﻫ%D是距离矩阵,n为种群个数,建议取为城市个数的1~2倍,ﻫ%C为停止代数,遗传到第C代时程序停止,C的简略取值视问题的规模和耗费的时间而定

%m为适应值归一化淘汰加速指数,最好取为1,2,3,4,不宜太大ﻫ%alpha为淘汰保护指数,可取为0~1之间任意小数,取1时关闭保护功能,最好取为0。8~1.0

%R为最短路径,Rlength为路径长度ﻫfunction[R,Rlength]=geneticTSP(D,n,C,m,alpha)[N,NN]=size(D);

farm=zeros(n,N);%用于存储种群ﻫfori=1:n

farm(i,:)=randperm(N);%随机生成初始种群ﻫendﻫR=farm(1,:);%存储最优种群

len=zeros(n,1);%存储路径长度ﻫfitness=zeros(n,1);%存储归一化适应值ﻫcounter=0;whilecounter<Cfori=1:nﻫlen(i,1)=myLength(D,farm(i,:));%计算路径长度ﻫendﻫmaxlen=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;ﻫfori=1:nﻫiffitness(i,1)>=alpha*randﻫnn=nn+1;ﻫFARM(nn,:)=farm(i,:);ﻫendﻫend

FARM=FARM(1:nn,:);[aa,bb]=size(FARM);%交叉和变异

whileaa<n

ifnn<=2ﻫnnper=randperm(2);ﻫelseﻫnnper=randperm(nn);

endﻫA=FARM(nnper(1),:);ﻫB=FARM(nnper(2),:);

[A,B]=intercross(A,B);ﻫFARM=[FARM;A;B];ﻫ[aa,bb]=size(FARM);ﻫendﻫifaa>nﻫFARM=FARM(1:n,:);%保持种群规模为nﻫendfarm=FARM;ﻫclearFARM

counter=counter+1endRlength=myLength(D,R);function[a,b]=intercross(a,b)

L=length(a);ﻫifL<=10%确定交叉宽度

W=1;ﻫelseif((L/10)—floor(L/10))>=rand&&L〉10ﻫW=ceil(L/10);ﻫelse

W=floor(L/10);ﻫendﻫp=unidrnd(L—W+1);%随机选择交叉范围,从p到p+Wﻫfori=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));ﻫendﻫfunction[x,y]=exchange(x,y)

temp=x;ﻫx=y;ﻫy=temp;%计算路径的子程序ﻫfunctionlen=myLength(D,p)ﻫ[N,NN]=size(D);ﻫlen=D(p(1,N),p(1,1));ﻫfori=1:(N-1)ﻫlen=len+D(p(1,i),p(1,i+1));ﻫend%计算归一化适应值子程序ﻫfunctionfitness=fit(len,m,maxlen,minlen)ﻫfitness=len;ﻫfori=1:length(len)ﻫfitness(i,1)=(1-((len(i,1)-minlen)/(maxlen—minlen+0.000001))).^m;ﻫend一个C++的程序://c++的程序ﻫ#include<iostream.h>

#include〈stdlib.h〉ﻫtemplate<classT>ﻫclassGraphﻫ{ﻫ

public:ﻫ

Graph(intvertices=10)

{ﻫ

n=vertices;

e=0;

}ﻫ

~Graph(){}ﻫ

virtualboolAdd(intu,intv,constT&w)=0;ﻫ

virtualboolDelete(intu,intv)=0;

virtualboolExist(intu,intv)const=0;ﻫ

intVertices()const{returnn;}

intEdges()const{returne;}ﻫ

protected:ﻫ

intn;

inte;

};ﻫtemplate<classT>

classMGraph:publicGraph〈T>ﻫ{ﻫ

public:ﻫ

MGraph(intVertices=10,TnoEdge=0);ﻫ

~MGraph();ﻫ

boolAdd(intu,intv,constT&w);ﻫ

boolDelete(intu,intv);ﻫ

boolExist(intu,intv)const;ﻫ

voidFloyd(T**&d,int**&path);

voidprint(intVertices);ﻫ

private:ﻫ

TNoEdge;ﻫ

T**a;

};ﻫtemplate〈classT〉ﻫMGraph<T>::MGraph(intVertices,TnoEdge)ﻫ{ﻫ

n=Vertices;ﻫ

NoEdge=noEdge;ﻫ

a=newT*[n];

for(inti=0;i〈n;i++){

a[i]=newT[n];

a[i][i]=0;ﻫ

for(intj=0;j<n;j++)if(i!=j)a[i][j]=NoEdge;ﻫ

}ﻫtemplate〈classT>

MGraph<T>::~MGraph()

{ﻫ

for(inti=0;i<n;i++)delete[]a[i];ﻫ

delete[]a;

}ﻫtemplate<classT〉ﻫboolMGraph<T>::Exist(intu,intv)constﻫ{ﻫ

if(u<0||v<0||u〉n-1||v>n-1||u==v||a[u][v]==NoEdge)returnfalse;

returntrue;

}ﻫtemplate<classT>ﻫboolMGraph〈T>::Add(intu,intv,constT&w)

{ﻫ

if(u<0||v<0||u>n—1||v>n—1||u==v||a[u][v]!=NoEdge){ﻫ

cerr<<"BadInput!"〈<endl;ﻫ

returnfalse;

a[u][v]=w;ﻫ

e++;ﻫ

returntrue;ﻫ}ﻫtemplate<classT>ﻫboolMGraph<T〉:delete(intu,intv)ﻫ{

if(u<0||v<0||u〉n-1||v〉n-1||u==v||a[u][v]==NoEdge){ﻫ

cerr<<"BadInput!"〈〈endl;ﻫ

returnfalse;ﻫ

}ﻫ

a[u][v]=NoEdge;ﻫ

e--;ﻫ

returntrue;ﻫ}ﻫtemplate<classT〉

voidMGraph〈T>::Floyd(T**&d,int**&path)ﻫ{ﻫ

d=newT*[n];ﻫ

path=newint*[n];ﻫ

for(inti=0;i<n;i++){

d[i]=newT[n];ﻫ

path[i]=newint[n];ﻫ

for(intj=0;j<n;j++){ﻫ

d[i][j]=a[i][j];ﻫ

if(i!=j&&a[i][j]<NoEdge)path[i][j]=i;ﻫ

elsepath[i][j]=—1;ﻫ

}ﻫ

}ﻫ

for(intk=0;k<n;k++){ﻫ

for(i=0;i〈n;i++)

for(intj=0;j〈n;j++)ﻫ

if(d[i][k]+d[k][j]〈d[i][j]){ﻫ

d[i][j]=d[i][k]+d[k][j];ﻫ

path[i][j]=path[k][j];ﻫ

}ﻫ

}ﻫ}ﻫtemplate<classT〉

voidMGraph<T〉::print(intVertices)ﻫ{ﻫ

for(inti=0;i<Vertices;i++)ﻫ

for(intj=0;j<Vertices;j++)ﻫ

{ﻫ

cout<<a[i][j]〈<’';if(j==Vertices-1)cout<〈endl;ﻫ

}ﻫ}ﻫ#definenoEdge10000ﻫ#include<iostream.h>ﻫvoidmain()

{ﻫ

cout<<"请输入该图的节点数:"〈〈endl;ﻫ

intvertices;ﻫ

cin>>vertices;ﻫ

MGraph<float>b(vertices,noEdge);

cout〈<"请输入u,v,w:"<<endl;

intu,v;

floatw;ﻫ

cin>>u>>v〉〉w;ﻫ

while(w!=noEdge){ﻫ

//u=u—1;

b.Add(u-1,v—1,w);ﻫ

b.Add(v—1,u—1,w);ﻫ

cout〈<"请输入u,v,w:"<<endl;ﻫ

cin>>u>>v〉>w;ﻫ

}ﻫ

b.print(vertices);ﻫ

int**Path;ﻫ

int**&path=Path;ﻫ

float**D;ﻫ

float**&d=D;ﻫ

b.Floyd(d,path);ﻫ

for(inti=0;i〈vertices;i++){

for(intj=0;j〈vertices;j++){ﻫ

cout<<Path[i][j]<<'’;ﻫ

if(j==vertices-1)cout〈〈endl;ﻫ

}ﻫ

}ﻫ

int*V;ﻫ

V=newint[vertices+1];

cout<<”请输入任意一个初始H-圈:"〈<endl;ﻫ

for(intn=0;n〈=vertices;n++){

cin>>V[n];ﻫ

}ﻫ

for(n=0;n〈55;n++){

for(i=0;i〈n-1;i++){ﻫ

for(intj=0;j〈n—1;j++)ﻫ

{ﻫ

if(i+1〉0&&j〉i+1&&j〈n—1){

if(D[V[i]][V[j]]+D[V[i+1]][V[j+1]]<D[V[i]][V[i+1]]+D[V[j]][V[j+1]]){ﻫ

intl;ﻫ

l=V[i+1];V[i+1]=V[j];V[j]=l;ﻫ

}ﻫ

}

}ﻫ

floattotal=0;ﻫ

cout<〈”最小回路:"<<endl;ﻫ

for(i=0;i<=vertices;i++){ﻫ

cout<<V[i]+1<<'';ﻫ

}ﻫ

cout〈<endl;ﻫ

for(i=0;i〈vertices;i++)ﻫ

total+=D[V[i]][V[i+1]];

cout<<"最短路径长度:"<〈endl;ﻫ

cout〈<total;ﻫ}C语言程序#include〈stdio.h>ﻫ#include〈stdlib。h>ﻫ#include<math。h>ﻫ#include〈alloc.h>

#include<conio。h>ﻫ#include<float.h>ﻫ#include〈time.h>

#include〈graphics。h〉ﻫ#include<bios。h〉#define

maxpop

100ﻫ#define

maxstring

100ﻫstruct

pp{unsignedcharchrom[maxstring];ﻫ

floatx,fitness;ﻫ

unsignedintparent1,parent2,xsite;

};

structpp*oldpop,*newpop,*p1;

unsignedintpopsize,lchrom,gem,maxgen,co_min,jrand;ﻫunsignedintnmutation,ncross,jcross,maxpp,minpp,maxxy;ﻫfloatpcross,pmutation,sumfitness,avg,max,min,seed,maxold,oldrand[maxstring];

unsignedcharx[maxstring],y[maxstring];ﻫfloat*dd,ff,maxdd,refpd,fm[201];ﻫFILE*fp,*fp1;

floatobjfunc(float);ﻫvoidstatistics();ﻫintselect();ﻫintflip(float);ﻫintcrossover();ﻫvoidgeneration();ﻫvoidinitialize();

voidreport();ﻫfloatdecode();ﻫvoidcrtinit();ﻫvoidinversion();ﻫfloatrandom1();ﻫvoidrandomize1();main()ﻫ{unsignedintgen,k,j,tt;ﻫcharfname[10];ﻫfloatttt;ﻫclrscr();

co_min=0;ﻫif((oldpop=(structpp*)farmalloc(maxpop*sizeof(structpp)))==NULL)ﻫ

{printf("memoryrequstfail!\n");exit(0);}ﻫif((dd=(float*)farmalloc(maxstring*maxstring*sizeof(float)))==NULL)ﻫ

{printf(”memoryrequstfail!\n");exit(0);}ﻫif((newpop=(structpp*)farmalloc(maxpop*sizeof(structpp)))==NULL)ﻫ

{printf("memoryrequstfail!\n");exit(0);}ﻫif((p1=(structpp*)farmalloc(sizeof(structpp)))==NULL)ﻫ

{printf("memoryrequstfail!\n”);exit(0);}ﻫfor(k=0;k〈maxpop;k++)oldpop[k].chrom[0]='\0';ﻫfor(k=0;k〈maxpop;k++)newpop[k].chrom[0]='\0';ﻫprintf(”EnterResultDataFilename:”);ﻫgets(fname);ﻫif((fp=fopen(fname,"w+”))==NULL)ﻫ

{printf("cannotopenfile\n”);exit(0);}ﻫgen=0;ﻫrandomize();ﻫinitialize();fputs(”thisisresultoftheTSPproblem:",fp);ﻫfprintf(fp,”city:%2dpsize:%3dRef.TSP_path:%f\n",lchrom,popsize,refpd);

fprintf(fp,"Pc:%fPm:%fSeed:%f\n",pcross,pmutation,seed);ﻫfprintf(fp,"Xsite:\n”);ﻫfor(k=0;k<lchrom;k++)

{if((k%16)==0)fprintf(fp,”\n");

fprintf(fp,"%5d”,x[k]);ﻫ

}ﻫfprintf(fp,"\nYsite:\n");ﻫfor(k=0;k<lchrom;k++)

{if((k%16)==0)fprintf(fp,"\n");ﻫ

fprintf(fp,”%5d",y[k]);

}

fprintf(fp,”\n”);ﻫcrtinit();ﻫstatistics(oldpop);

report(gen,oldpop);ﻫgetch();ﻫmaxold=min;ﻫfm[0]=100.0*oldpop[maxpp].x/ff;ﻫdo{

gen=gen+1;ﻫ

generation();ﻫ

statistics(oldpop);ﻫ

if(max〉maxold)

{maxold=max;

co_min=0;ﻫ

}ﻫ

fm[gen%200]=100.0*oldpop[maxpp].x/ff;ﻫ

report(gen,oldpop);

gotoxy(30,25);

ttt=clock()/18.2;ﻫ

tt=ttt/60;ﻫ

printf(”RunClock:%2d:%2d:%4.2f”,tt/60,tt%60,ttt—tt*60。0);

printf("Min=%6.4fNm:%d\n”,min,co_min);ﻫ

}while((gen<100)&&!bioskey(1));ﻫprintf("\ngen=%d”,gen);

do{ﻫ

gen=gen+1;ﻫ

generation();

statistics(oldpop);ﻫ

if(max〉maxold)ﻫ

{maxold=max;ﻫco_min=0;ﻫ

}ﻫ

fm[gen%200]=100.0*oldpop[maxpp].x/ff;ﻫ

report(gen,oldpop);ﻫ

if((gen%100)==0)report(gen,oldpop);

gotoxy(30,25);ﻫ

ttt=clock()/18.2;ﻫ

tt=ttt/60;ﻫ

printf("RunClock:%2d:%2d:%4.2f",tt/60,tt%60,ttt-tt*60.0);ﻫ

printf(”Min=%6。4fNm:%d\n",min,co_min);

}while((gen〈maxgen)&&!bioskey(1));getch();ﻫfor(k=0;k<lchrom;k++)ﻫ

{if((k%16)==0)fprintf(fp,"\n”);

fprintf(fp,"%5d”,oldpop[maxpp].chrom[k]);ﻫ

}ﻫfprintf(fp,”\n”);fclose(fp);

farfree(dd);ﻫfarfree(p1);

farfree(oldpop);ﻫfarfree(newpop);ﻫrestorecrtmode();ﻫexit(0);ﻫ}/*%%%%%%%%%%%%%%%%*/float

objfunc(floatx1)ﻫ{floaty;ﻫ

y=100.0*ff/x1;ﻫ

returny;ﻫ

}/*&&&&&&&&&&&&&&&&&&&*/voidstatistics(pop)

structpp*pop;

{intj;ﻫsumfitness=pop[0].fitness;

min=pop[0].fitness;

max=pop[0].fitness;ﻫmaxpp=0;ﻫminpp=0;ﻫfor(j=1;j<popsize;j++)ﻫ

{sumfitness=sumfitness+pop[j]。fitness;

if(pop[j].fitness>max)ﻫ{max=pop[j]。fitness;ﻫ

maxpp=j;ﻫ}ﻫ

if(pop[j].fitness<min)ﻫ{min=pop[j]。fitness;ﻫ

minpp=j;ﻫ}

}avg=sumfitness/(float)popsize;

}/*%%%%%%%%%%%%%%%%%%%%*/voidgeneration()

{unsignedintk,j,j1,j2,i1,i2,mate1,mate2;ﻫfloatf1,f2;

j=0;ﻫdo{ﻫ

mate1=select();ﻫ

pp:mate2=select();ﻫ

if(mate1==mate2)gotopp;ﻫ

crossover(oldpop[mate1]。chrom,oldpop[mate2].chrom,j);ﻫ

newpop[j].x=(float)decode(newpop[j].chrom);ﻫ

newpop[j].fitness=objfunc(newpop[j].x);ﻫ

newpop[j]。parent1=mate1;ﻫ

newpop[j]。parent2=mate2;ﻫ

newpop[j].xsite=jcross;ﻫ

newpop[j+1].x=(float)decode(newpop[j+1]。chrom);ﻫ

newpop[j+1].fitness=objfunc(newpop[j+1].x);ﻫ

newpop[j+1]。parent1=mate1;

newpop[j+1].parent2=mate2;ﻫ

newpop[j+1].xsite=jcross;ﻫ

if(newpop[j].fitness〉min)ﻫ{for(k=0;k<lchrom;k++)ﻫ

oldpop[minpp].chrom[k]=newpop[j]。chrom[k];ﻫ

oldpop[minpp].x=newpop[j].x;

oldpop[minpp].fitness=newpop[j]。fitness;ﻫ

co_min++;ﻫ

return;ﻫ}

if(newpop[j+1].fitness>min)ﻫ{for(k=0;k〈lchrom;k++)ﻫ

oldpop[minpp].chrom[k]=newpop[j+1].chrom[k];ﻫ

oldpop[minpp].x=newpop[j+1]。x;ﻫ

oldpop[minpp]。fitness=newpop[j+1]。fitness;ﻫ

co_min++;ﻫ

return;ﻫ}

j=j+2;ﻫ

}while(j<popsize);ﻫ}/*%%%%%%%%%%%%%%%%%*/voidinitdata()ﻫ{unsignedintch,j;

clrscr();ﻫprintf("-——---—-———-——----—----\n”);

printf(”ASGA\n");ﻫprintf(”—--—-—--—---—---—-----—-\n");

/*pause();*/clrscr();ﻫprintf(”*******SGADATAENTRYANDINITILIZATION*******\n");ﻫprintf("\n");ﻫprintf("inputpopsize”);scanf("%d",&popsize);ﻫprintf("inputchromlength");scanf("%d",&lchrom);

printf("inputmaxgenerations");scanf("%d",&maxgen);

printf("inputcrossoverprobability");scanf(”%f",&pcross);ﻫprintf("inputmutationprob”);scanf("%f",&pmutation);ﻫrandomize1();ﻫclrscr();ﻫnmutation=0;ﻫncross=0;

}/*%%%%%%%%%%%%%%%%%%%%*/voidinitreport()

{intj,k;ﻫprintf("popsize=%d\n”,popsize);ﻫprintf(”chromosomelength=%d\n",lchrom);ﻫprintf("maxgen=%d\n",maxgen);ﻫprintf("pmutation=%f\n",pmutation);

printf("pcross=%f\n",pcross);ﻫprintf(”initialgenerationstatistics\n");ﻫprintf(”inipopmaxfitness=%f\n",max);

printf(”inipopavrfitness=%f\n",avg);ﻫprintf(”inipopminfitness=%f\n",min);ﻫprintf(”inipopsumfit=%f\n",sumfitness);ﻫ}

voidinitpop()

{unsignedcharj1;ﻫunsignedintk5,i1,i2,j,i,k,j2,j3,j4,p5[maxstring];ﻫfloatf1,f2;ﻫj=0;ﻫfor(k=0;k<lchrom;k++)ﻫ

oldpop[j]。chrom[k]=k;ﻫfor(k=0;k<lchrom;k++)ﻫ

p5[k]=oldpop[j].chrom[k];ﻫrandomize();

for(;j〈popsize;j++)ﻫ

{j2=random(lchrom);

for(k=0;k<j2+20;k++)ﻫ

{j3=random(lchrom);

j4=random(lchrom);

j1=p5[j3];ﻫ

p5[j3]=p5[j4];ﻫ

p5[j4]=j1;ﻫ

}ﻫ

for(k=0;k<lchrom;k++)ﻫ

oldpop[j].chrom[k]=p5[k];ﻫ

for(k=0;k<lchrom;k++)ﻫ

for(j=0;j〈lchrom;j++)ﻫ

dd[k*lchrom+j]=hypot(x[k]-x[j],y[k]-y[j]);ﻫ

for(j=0;j<popsize;j++)ﻫ

{oldpop[j].x=(float)decode(oldpop[j].chrom);ﻫ

oldpop[j].fitness=objfunc(oldpop[j].x);ﻫ

oldpop[j].parent1=0;ﻫ

oldpop[j].parent2=0;

oldpop[j].xsite=0;ﻫ

}ﻫ}/*&&&&&&&&&&&&&&&&&*/ﻫvoidinitialize()ﻫ{intk,j,minx,miny,maxx,maxy;ﻫinitdata();ﻫminx=0;ﻫminy=0;

maxx=0;maxy=0;ﻫfor(k=0;k<lchrom;k++)

{x[k]=rand();ﻫ

if(x[k]>maxx)maxx=x[k];ﻫ

if(x[k]〈minx)minx=x[k];ﻫ

y[k]=rand();ﻫ

if(y[k]〉maxy)maxy=y[k];ﻫ

if(y[k]<miny)miny=y[k];ﻫ

}ﻫif((maxx—minx)>(maxy-miny))ﻫ

{maxxy=maxx—minx;}ﻫ

else{maxxy=maxy-miny;}ﻫmaxdd=0.0;

for(k=0;k〈lchrom;k++)ﻫ

for(j=0;j<lchrom;j++)ﻫ

{dd[k*lchrom+j]=hypot(x[k]—x[j],y[k]-y[j]);ﻫ

if(maxdd<dd[k*lchrom+j])maxdd=dd[k*lchrom+j];ﻫ

}ﻫrefpd=dd[lchrom-1];

for(k=0;k<lchrom;k++)ﻫ

refpd=refpd+dd[k*lchrom+k+2];ﻫfor(j=0;j〈lchrom;j++)ﻫ

dd[j*lchrom+j]=4.0*maxdd;ﻫff=(0.765*maxxy*pow(lchrom,0.5));

minpp=0;

min=dd[lchrom—1];ﻫfor(j=0;j<lchrom-1;j++)ﻫ

{if(dd[lchrom*j+lchrom—1]<min)ﻫ{min=dd[lchrom*j+lchrom-1];

minpp=j;

}ﻫ

initpop();ﻫstatistics(oldpop);ﻫinitreport();ﻫ}/*&&&&&&&&&&&&&&&&&&*/voidreport(intl,structpp*pop)

{intk,ix,iy,jx,jy;ﻫunsignedinttt;ﻫfloatttt;ﻫcleardevice();

gotoxy(1,1);ﻫprintf("city:%4d

para_size:%4d

maxgen:%4d

ref_tour:%f\n”ﻫ

,lchrom,popsize,maxgen,refpd);ﻫprintf(”ncross:%4d

Nmutation:%4dRungen:%4dAVG=%8.4fMIN=%8.4f\n\n"

,ncross,nmutation,l,avg,min);ﻫprintf("Ref.cominpath:%6.4fMinpathlength:%10.4fRef_co_tour:%f\n"

,pop[maxpp].x/maxxy,pop[maxpp].x,ff);ﻫprintf(”Co_minpath:%6。4fMaxfit:%10.8f"ﻫ

,100.0*pop[maxpp]。x/ff,pop[maxpp]。fitness);ﻫttt=clock()/18。2;

tt=ttt/60;

printf("Runclock:%2d:%2d:%4d.2f\n",tt/60,tt%60,ttt-tt*60.0);ﻫsetcolor(1%15+1);

for(k=0;k<lchrom-1;k++)ﻫ

{ix=x[pop[maxpp]。chrom[k]];ﻫ

iy=y[pop[maxpp].chrom[k]]+110;ﻫ

jx=x[pop[maxpp].chrom[k+1]];ﻫ

jy=y[pop[maxpp]。chrom[k+1]]+110;

line(ix,iy,jx,jy);ﻫ

putpixel(ix,iy,RED);ﻫ

ix=x[pop[maxpp].chrom[0]];ﻫiy=y[pop[maxpp]。chrom[0]]+110;ﻫjx=x[pop[maxpp].chrom[lchrom-1]];

jy=y[pop[maxpp].chrom[lchrom-1]]+110;ﻫline(ix,iy,jx,jy);ﻫputpixel(jx,jy,RED);

setcolor(11);ﻫouttextxy(ix,iy,"*”);ﻫsetcolor(12);ﻫfor(k=0;k〈1%200;k++)

{ix=k+280;

iy=366-fm[k]/3;ﻫ

jx=ix+1;ﻫ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论