教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

遗传算法matlab程序代码

来源:网络收集 时间:2026-08-11
导读: 遗传算法程序的源代码,自己做数模时候的资料,给大家分享了 function [R,Rlength]= GA_TSP(xyCity,dCity,Population,nPopulation,pCrossover,percent,pMutation,generation,nR,rr,rangeCity,rR,moffspring,record,pi,Shock,maxShock) clear all A=load('d.txt

遗传算法程序的源代码,自己做数模时候的资料,给大家分享了

function [R,Rlength]= GA_TSP(xyCity,dCity,Population,nPopulation,pCrossover,percent,pMutation,generation,nR,rr,rangeCity,rR,moffspring,record,pi,Shock,maxShock)

clear all

A=load('d.txt');

A

xyCity=[A(1,:);A(2,:)]; %x,y为各地点坐标

xyCity

figure(1)

grid on

hold on

scatter(xyCity(1,:),xyCity(2,:),'b+')

grid on

nCity=50;

nCity

for i=1:nCity %计算城市间距离

for j=1:nCity

dCity(i,j)=abs(xyCity(1,i)-xyCity(1,j))+abs(xyCity(2,i)-xyCity(2,j));

end

end %计算城市间距离

xyCity; %显示城市坐标

dCity %显示城市距离矩阵

%初始种群

k=input('取点操作结束'); %取点时对操作保护

disp('-------------------')

nPopulation=input('种群个体数量:'); %输入种群个体数量

if size(nPopulation,1)==0

nPopulation=50; %默认值

end

for i=1:nPopulation

Population(i,:)=randperm(nCity-1); %产生随机个体

end

Population %显示初始种群

pCrossover=input('交叉概率:'); %输入交叉概率

percent=input('交叉部分占整体的百分比:'); %输入交叉比率

pMutation=input('突变概率:'); %输入突变概率

nRemain=input('最优个体保留最大数量:');

pi(1)=input('选择操作最优个体被保护概率:');

%输入最优个体被保护概率

pi(2)=input('交叉操作最优个体被保护概率:');

pi(3)=input('突变操作最优个体被保护概率:');

maxShock=input('最大突变概率:');

if size(pCrossover,1)==0

遗传算法程序的源代码,自己做数模时候的资料,给大家分享了

pCrossover=0.85;

end

if size(percent,1)==0

percent=0.5;

end

if size(pMutation,1)==0

pMutation=0.05;

end

Shock=0;

rr=0;

Rlength=0;

counter1=0;

counter2=0;

R=zeros(1,nCity-1);

[newPopulation,R,Rlength,counter2,rr]=select(Population,nPopulation,nCity,dCity,Rlength,R,counter2,pi,nRemain);

R0=R;

record(1,:)=R;

rR(1)=Rlength;

Rlength0=Rlength;

generation=input('算法终止条件A.最多迭代次数:');

%输入算法终止条件

if size(generation,1)==0

generation=200;

end

nR=input('算法终止条件B.最短路径连续保持不变代数:');

if size(nR,1)==0

nR=10;

end

while counter1<generation&counter2<nR

if counter2<nR*1/5

Shock=0;

elseif counter2<nR*2/5

Shock=maxShock*1/4-pMutation;

elseif counter2<nR*3/5

Shock=maxShock*2/4-pMutation;

elseif counter2<nR*4/5

Shock=maxShock*3/4-pMutation;

else

Shock=maxShock-pMutation;

end

counter1

newPopulation

遗传算法程序的源代码,自己做数模时候的资料,给大家分享了

offspring=crossover(newPopulation,nCity,pCrossover,percent,nPopulation,rr,pi,nRemain); offspring

moffspring=Mutation(offspring,nCity,pMutation,nPopulation,rr,pi,nRemain,Shock);

[newPopulation,R,Rlength,counter2,rr]=select(moffspring,nPopulation,nCity,dCity,Rlength,R,counter2,pi,nRemain);

counter1=counter1+1;

rR(counter1+1)=Rlength;

record(counter1+1,:)=R;

end

R0;

Rlength0;

R;

Rlength;

minR=min(rR);

disp('最短路经出现代数:')

rr=find(rR==minR)

disp('最短路经:')

record(rr,:);

mR=record(rr(1,1),:)

disp('终止条件一:')

counter1

disp('终止条件二:')

counter2

disp('最短路经长度:')

minR

disp('最初路经长度:')

rR(1)

figure(2)

plotaiwa(xyCity,mR,nCity)

figure(3)

i=1:counter1+1;

plot(i,rR(i))

grid on

function

[newPopulation,R,Rlength,counter2,rr]=select(Population,nPopulation,nCity,dCity,Rlength,R,counter2,pi,nRemain)

Distance=zeros(nPopulation,1); %零化路径长度

Fitness=zeros(nPopulation,1); %零化适应概率

Sum=0; %路径长度

遗传算法程序的源代码,自己做数模时候的资料,给大家分享了

for i=1:nPopulation %计算个体路径长度

for j=1:nCity-2

Distance(i)=Distance(i)+dCity(Population(i,j),Population(i,j+1));

end %对路径长度调整,增加起始点到路径首尾点的距离

Distance(i)=Distance(i)+dCity(Population(i,1),nCity)+dCity(Population(i,nCity-1),nCity);

Sum=Sum+Distance(i); %累计总路径长度

end %计算个体路径长度

if Rlength==min(Distance)

counter2=counter2+1;

else

counter2=0;

end

Rlength=min(Distance); %更新最短路径长度

Rlength;

rr=find(Distance==Rlength);

R=Population(rr(1,1),:); %更新最短路径

for i=1:nPopulation

Fitness(i)=(max(Distance)-Distance(i)+0.001)/(nPopulation*(max(Distance)+0.001)-Sum);

适应概率=个体/总和。。。已作调整,大小作了调换

end

Fitness %显示适应概率

sFitness=zeros(nPopulation,1); %累积概率

sFitness(1)=Fitness(1);

for i=2:nPopulation

sFitness(i)=sFitness(i-1)+Fitness(i);

end

sFitness %显示累积概率

newPopulation=zeros(nPopulation,nCity-1); %零化新种群

for i=1:nPopulation %甩随机数

a=rand;

a %显示甩出的随机数

for j=1:nPopulation

if a<sFitness(j)

newPopulation(i,:)=Population(j,:);

break

end

end

end

for i=1:size(rr,1)

if rand<pi(1)&&i<=nRemain

newPopulation(rr(i,1),:)=Population(rr(i,1),:); %

遗传 …… 此处隐藏:3374字,全部文档内容请下载后查看。喜欢就下载吧 ……

遗传算法matlab程序代码.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115833.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)