changes.m
来自「用matlab 编写一个基本的遗传算法程序,非常实用,请大家学习」· M 代码 · 共 50 行
M
50 行
function [pops]=changes(cpop,bounds,len,p)
%基因突变函数
%function [pops]=changes(pop,bounds,len,p)
%pop 种群数目
%bounds 边界约束
%len 每个变量的编码长度
% 如len为[4 3 3];表示有三个变量,第一个变量的二进制编码长度为4,依次类推
%p 突变概率
%pops 返回突变后的基因
%p1 基因突变数目
% 作者:机自01-2班曾新海
% zxh21st@163.com
if isempty(p)
p=0.01;
end
[n,m]=size(cpop);
pop=cpop;
p1=round(sum(len)*n*p);
k=0;q=[];v=[];
while(k<p1)
k=k+1;
q(k)=round(rand*(sum(len)*n-1))+1;
for i=1:k-1
if q(k)==q(i)
q(k)=[];
k=k-1;
end
end
end
for i=1:n
[B(i,:),len]=B2F(pop(i,:),bounds);
end
v=reshape(B,1,n*sum(len));
for i=1:p1
if v(q(i))==0
v(q(i))=1;
else
v(q(i))=0;
end
end
v=reshape(v,n,sum(len));
for i=1:n
pop(i,:)=F2B(v(i,:),bounds,len);
end
pops=pop
cpop
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?