📄 遗传算法.m
字号:
%%%%%%此程序完成上机练习7.2节的题2(采用基本遗传算法)%%%%%
clear all;clc
%%%%%%%%%%%初始化参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
w = [0 5 -3 4 4 1;5 0 -1 2 -3 1;-3 -1 0 2 -3 1;
4 2 2 0 3 -3;4 -3 2 3 0 5;1 1 0 -3 5 0];
N = 10;
Pc = 0.9; % 初始化交叉概率
Pm = 0.05; % 初始化变异概率
n = 1; % 初始化迭代次数
%%%%%%%%%%%%%%%%%% 随机初始化种群,个数为N(=10)个 %%%%%%%%%%%%%%%%%
for k = 1:6
for j = 1:N
if rand(1,1) > 0.5
s(j,k) = 1;
else
s(j,k) = -1;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%% 计算适应度值 %%%%%%%%%%%%%%%%%%%%%
while n < 200
E = zeros(2,N);
for i = 1:N
for j = 1:6
for k = 1:6
E(1,i) = E(1,i) + (-1/2)*w(j,k)*s(i,j)*s(i,k);
end
end
E(2,i) = i;
end
%%%%%%%%%%%%%%%%%%%%% 染色体从大到小排序 %%%%%%%%%%%%%%%%%%%%%%%
for i = 1 : N-1
for j = i+1 : N
if E(1,i) <= E(1,j)
t = E(:,i);
E(:,i) = E(:,j);
E(:,j) = t;
end
end
end
s1 = s(E(2,N-1),:); %%%%%选择得分最高的两个染色体
s2 = s(E(2,N),:);
if 0.9999*rand(1,1) < Pc
p1 = round(5*rand(1,1) + 1); %%%%%%%交叉位
t = s1(p1:end);
s1(p1:end) = s2(p1:end);
s2(p1:end) = t;
else
for i = 1:6
if 0.9999*rand(1,1) < Pm
s1(i) = ~s1(i);
s2(i) = ~s2(i);
end
end
end
s(E(2,1),:) = s1;
s(E(2,2),:) = s2;
if E(1,N) < -50
break;
else
n = n + 1;
end
end
s(E(2,N),:)
%-----------END-----------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -