用遗传算法求:
% max: f(x1,x2) = 21.5+x1*sin(4*pi*x1)+x2*sin(20*pi*x2)
% s.t: -3.0 <= x1 <= 12.1
% 4.1 <= x2 <= 5.8
%---------------------------------------------------------------
clear
clc
close all
popsize = 100; %种群大小
x1_length = 18; %x1长度为18
x2_length = 15; %x2长度为15
chromlength = 33; %二进制编码长度
pc = 0.25; %交叉概率
pm = 0.01; %变异概率
pop = initpop(popsize,chromlength); %初始种群
for i = 1:1000 % 迭代1000次
[objvalue] = cal_objvalue(pop);%计算计算函数值
fitvalue = objvalue; %令适应度等于函数值
[newpop] = selection(pop,fitvalue); %选择操作
[newpop] = crossover(newpop,pc); %交叉操作
[newpop] = mutation(newpop,pm); %变异操作
pop = newpop; %更新种群
% 将种群的每个个体表示出来
[A B] = binary2decimal(newpop);%使用binary2decimal函数把newpop里的二进制数换算成十进制并赋值给A B。
[y] = cal_objvalue(newpop); %计算适应度
figure(1);
set(1, 'unit', 'normalized', 'position', [0.1,0.1,0.7,0.7]);
if i<=100&mod(i,10)==0 %每迭代10次做一次图,画100次以内的图
j = floor(i/10);
%画3d图
X = -3.0:0.1:12.1;
Y = 4.1:0.1:5.8;
subplot(2,5,j);%画多个图放在画面中,按2行,每行5个,总计j个图画。
[X, Y] = meshgrid(X,Y);%对确定x与y轴向量后,运算得到z轴,在画三维图像。
Z = 21.5 + X.*sin(4*pi*X) + Y.*sin(20*pi*Y);
mesh(X,Y,Z);
hold on;
title(['迭代次数为 n=' num2str(i)]);
plot3(A,B,y,'*');
end
————————————————
版权声明:本文为CSDN博主「李锐博恩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Reborn_Lee/article/details/82913414
画图操作。
12-11
302
12-27
676