matlab遗传算法自习使用

(此文章为本人自学所用,内容参考其他书籍所写)

%%%%主函数%%%%
%%%%%%%%%%%%%
%清空
clear all;
clc

%%%%输入参数%%%%%
N=10;     %%城市的个数
M=20;     %%种群的个数
C=100;  %%迭代次数
C_old=C;
m=2;      %%适应值归一化淘汰加速指数
Pc=0.4;    %%交叉概率
Pmutation=0.2;   %%变异概率

%% 生成城市的坐标%%%%
pos=randn(N,2);

%%%生成城市之间的距离矩阵%%%%%
D=zeros(N,N);
for i=i:N
    for j=i+1:N
        dis=(pos(i,1)-pos(j,1)).^2+(pos(i,2)-pos(j,2)).^2;
        D(i,j)=dis.^(0.5);
        D(j,i)=D(i,j);
    end
end

%%%%%%生成初始化群体%%%%%
popm=zeros(M,N);
for i=1:M
    popm(i,:)=randperm(N); %随机打乱一个数字序列。语法格式:y = randperm(n).
                              %%y是把1到n这些数随机打乱得到的一个数字序列
end

%%%%随机选择一个种群%%%%%%
R=popm(1,:);
figure(1);
scatter(pos(:,1),pos(:,2),'k.');
xlabel('横轴');
tlabel('竖轴');
title('随机产生的种群图');
axis([-3 3 -3 3]);
figure(2);
plot_route(pos,R);
xlabel('横轴');
tlabel('竖轴');
title('随机生成种群中城市路径情况');
axis([-3 3 -3 3]);

%%%%初始化种群及其适应函数%%%%
fitness=zeros(M,1);
len=zeros(M,1);
for i=1:M
    len(i,1)=myLength(D,popm(i,:));
end
maxlen=max(len);
minlen=min(len);
fitness=fit(len,m,maxlen,minlen);
rr=find(len==minlen);
R=popm(rr(1,1),:);
for i=1:N
    fprintf('%d',R(i));
end
fprintf('\n');
fitness=fitness/sum(fitness);
distance_min=zeros(C+1,1);
while C>=0
    fprintf('迭代第%d次\n',C);

%%%%选择操作%%%%
nn=0;
for i=1:size(popm,1)
    len_1(i,1)=myLength(D,popm(i,:));
    jc=rand*0.3;
    for j=1:size(popm,1)
        if fitness(j,1)>=jc
        nn=nn+1;
        popm_sel(nn,:)=popm(j,:);
        break;
        end
    end
end

%%%%每次选择都保存最优的种群%%%%
popm_sel=popm_sel(1:nn,:);
[len_m len_index]=min(len_1);
popm_sel=[popm_sel;popm(len_index,:)];

%%%%%交叉操作%%%
nnper=randperm(nn);
A=popm_sel(nnper(1),:);
B=popm_sel(nnper(2),:);
for i=1:nn*Pc
[A,B]=cross(A,B);
popm_sel(nnper(1),:)=A;
popm_sel(nnper(2),:)=B;
end

%%%%%变异操作%%%%
for i=1:nn
    pick=rand;
    while pick==0
        pick=rand
    end
    if pick<=Pmutation
        popm_sel(i,:)=Mutation(popm_sel(i,:));
    end
end

%%%%求适应度函数%%%%
NN=size(popm_sel,1);
len=zeros(NN,1);
for i=1:NN
    len(i,1)=myLength(D,popm_sel(i,:));
end 
maxlen=max(len);
minlen=min(len);
distance_min(C+1,1)=minlen;
fitness=fit(len,m,maxlen,minlen);
rr=find9len==minlen);
fprintf('minlen=%d\n',minlen);
R=popm_sel(rr(1,1),:);
for i=1:N
fprintf('%d ',R(i));
end
fprintf('\n');
popm=[];
popm=popm_sel;
C=C-1;
%pause(1);
end
figure(3)
plot_route(pos,R);
xlabel('横轴');
tlabel('竖轴');
title('优化后的种群中城市路径情况');
axis([-3 3 -3 3]);

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值