优化算法之进化策略

clear all;clc;close all;
%进化策略解决旅行商问题
%{
日期:
20190912_ZD
遗传算法强调染色体的操作,进化策略强调个体级的行为变化,而进化规划则强
强调种群级别上的行为变化,现在学术界上将GA,ES,EP统称为进化算法EC
%}
t0 = clock;
N = 10;%初始种群规模
C = [1,2;70,90;80,60;10,100;800,200;800,100;90,80;200,600;230,4;500,90];%城市座标
M = size(C,1);%城市个数
for i = 1:N
    X(i,:) = randperm(M);%初始种群
end
Inter = 5000;%迭代次数
BestFitness = -inf;%记录最大适应度
BestIndividual = zeros(1,M);%最优个体
BestFitnessInter = zeros(1,Inter);
MeanFitness = zeros(1,Inter);
D = zeros(M,M);
%计算各个城市之间的距离
for i = 1:M
    for j = 1:M
        D(i,j) = sqrt( sum((C(i,:) - C(j,:) ).^2));
    end
end
%进行迭代
for i = 1:Inter
    %随机生成新的种群
    NewX = zeros(100,N);%生成新的种群
    for Num = 1:100
        %通过初始种群繁殖生成新的种群(注重个体行为)
        pos1 =1 + fix( rand*N );
        pos2 = randperm(M);
        NewX(Num,:) = X(pos1,pos2);
    end
    %计算适应度
    Distance = zeros(Num,1);
    for k = 1:Num
        for kk = 1:N-1
            Distance(k) = Distance(k) + D(NewX(k,kk),NewX(k,kk+1));
        end
        Distance(k) = Distance(k) + D(NewX(k,1),NewX(k,end));
    end
    Fitness = 1 ./ Distance;
    %按照适应进行排名
    [SortFitness,Label] = sort(Fitness,'descend');
    LabelSelect = Label(1:N);
    %选择出N个新的初始种群
    X = NewX(LabelSelect,:);
    %比较最大适应度与原最大适应,并更新最大适应度
    if SortFitness(1) > BestFitness
        BestFitness = SortFitness(1);
        BestIndividual = NewX(Label(1),:);
    end
    BestFitnessInter(i) = BestFitness;
    MeanFitness(i) = mean(Fitness);
end
%绘制结果
time = etime(clock,t0);
disp('优化时间为')
disp(time)
plot(BestFitnessInter,'LineWidth',3);
hold on
plot(MeanFitness,'LineWidth',3);
legend('BestFitness','MeanFitness')
title('旅行商问题')
disp('最短路径为:')
disp(BestIndividual)
disp('最短距离为:')
disp(1/BestFitness)
figure
BestIndividual = [BestIndividual,BestIndividual(1)];
h = plot(C(BestIndividual,1),C(BestIndividual,2),'ro-');
set(h,'Linewidth',3,'MarkerSize',10)
title(['旅行商问题,最短路径为',num2str(1/BestFitness)]);
xlabel('x座标');ylabel('y座标')
legend('City')

运行结果:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章