问题:找出y=x4-4x3+3x+5 (xÎ[0,6])在[0,6]之间的最小值。
思路:用33位0,1变量来编码x,3位编码整数,30位编码小数。理论上30位编码小数可以将最小值对应的x精确到小数点后九位.
下面是我解决这个问题所有的函数,复制就可以运行了。
交换值的函数:
function [x,y]=exchange(x,y)
temp=x;
x=y;
y=temp;
end
执行交叉:
%交叉操作
function [A,B]=cross(A,B)
L=length(A);
if L<10
W=L;
elseif((L/10)-floor(L/10))>=rand&&L>10
W=ceil(L/10)+8;
else
W=floor(L/10)+8;
end
p=unidrnd(L-W+1);
for i=1:W
[A(1,p+i-1),B(1,p+i-1)]=exchange(A(1,p+i-1),B(1,p+i-1));
end
end
变异过程,通过调节函数的第二个参数来改变每个个体的变异率,这样从一定程度上能对不同问题达到更好的效果
function a=Mutation(A,fitness)
nnper=randperm(size(A,2));
if (A(1,nnper(1)))==1
A(1,nnper(1))=0;
elseif(A(