📄 ga_bin.m
字号:
clear all
clc
c=50; %初始种群
T=1;
p=randint(c,15,[0,1]);
gray=zeros(3,5);
bin=zeros(3,5);
dec=zeros(3,1);
S=zeros(c,1);
x=zeros(c,3);
temp=zeros(3,5);
while(T<400)
for i=1:c
temp(1,:)=p(i,11:15);
temp(2,:)=p(i,6:10);
temp(3,:)=p(i,1:5);
for j=1:3
bin(j,1)=temp(j,1); %将格雷码转化为二进制
for k=2:5
bin(j,k)=xor(bin(j,k-1),temp(j,k));
end
m=4;
for q=1:5
dec(j)=dec(j)+bin(j,q)*(2^m);
m=m-1;
end
end
x1=dec(1);x2=dec(2);x3=dec(3);
x(i,:)=[x1 x2 x3];
dec=zeros(3,1);
S(i)=(x1-5)^2+(x2-10)^2+(x3-1)^2; %计算适应度
end
minf(T)=min(S);
temp1=0;
min_index=find(S==min(S));
temp1=p(min_index(1),:);
S(find(min(S)))=[];
p(min_index(1),:)=[];
max=(31-5)^2+(31-10)^2+(31-1)^2;
sel_p=0; %计算选择概率
temp2=0;
for i=1:c-1
temp2(i)=max-S(i);
end
sel_p=temp2/sum(temp2); %各种群的选择概率
grab=zeros(c-1,2); %产生赌盘算子
grab(1,1)=0;
grab(1,2)=sel_p(1);
for i=2:c-1
grab(i,1)=grab(i-1,2);
grab(i,2)=sel_p(i)+grab(i,1);
end
select=rand(1,c-1);
temp4=zeros(c-1,15);
for i=1:c-1
[r,h]=find(select(i)>grab(:,1)&select(i)<=grab(:,2));
temp4(i,:)=p(r,:);
end
p=temp4;
pc=0.8; %交叉概率
couple1=randperm(c-1);
couple=couple1(1:round(pc*c));
temp3=0;
for i=1:round(pc*c/2)
cross_bit=randint(1,1,[1,15]);
temp3=p(couple(2*i-1),cross_bit);
p(couple(2*i-1),cross_bit)=p(couple(2*i),cross_bit);
p(couple(2*i),cross_bit)=temp3;
end
pm=0.1; %变异概率
temp5=randperm(c-1);
vary=temp5(1:round(pm*(c-1)));
for i=1:round(pm*c)
vary_bit=randint(1,1,[1,15]);
p(vary(i),vary_bit)= ~p(vary(i),vary_bit);
end
temp6=zeros(c,15);
temp6(1,:)=temp1;
temp6(2:c,:)=p;
p=temp6;
T=T+1;
end
xx=1:1:T-1;
plot(xx,minf)
title('最小值收敛曲线')
disp('最小值:')
min=minf(T-1)
disp('最佳解为:')
x1=x(min_index,1)
x2=x(min_index,2)
x3=x(min_index,3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -