Matlab遗传算法“选择”的程序一小段,求解
据老师当时讲用的是轮盘赌什么的,没搞明白,原题目就是个2元多极值的线性规划。选择步骤程序如下:(syd是适应度的函数)functionu1=select(u)%选择函数f...
据老师当时讲用的是轮盘赌什么的,没搞明白,原题目就是个2元多极值的线性规划。选择步骤程序如下:(syd是适应度的函数)
function u1=select(u)
%选择函数
for i=1:10
y(i)=syd(u(i,:));
end
F=sum(y);
P=y/F;
s=0;
for i=1:10
s=s+P(i);
Q(i)=s;
end
[m,I]=max(y);
u1(9,:)=u(I,:);
u1(10,:)=u(I,:);
r=rand(8,1);
for i=1:8
if r(i)<Q(1)
u1(i,:)=u(1,:);
elseif r(i)>=Q(1)& r(i)<Q(2)
u1(i,:)=u(2,:);
elseif r(i)>=Q(2)& r(i)<Q(3)
u1(i,:)=u(3,:);
elseif r(i)>=Q(3)& r(i)<Q(4)
u1(i,:)=u(4,:);
elseif r(i)>=Q(4)&r(i)<Q(5)
u1(i,:)=u(5,:);
elseif r(i)>=Q(5)&r(i)<Q(6)
u1(i,:)=u(6,:);
elseif r(i)>=Q(6)&r(i)<Q(7)
u1(i,:)=u(7,:);
elseif r(i)>=Q(7)&r(i)<Q(8)
u1(i,:)=u(8,:);
elseif r(i)>=Q(8)&r(i)<Q(9)
u1(i,:)=u(9,:);
else
u1(i,:)=u(10,:);
end
end
谢谢~! 展开
function u1=select(u)
%选择函数
for i=1:10
y(i)=syd(u(i,:));
end
F=sum(y);
P=y/F;
s=0;
for i=1:10
s=s+P(i);
Q(i)=s;
end
[m,I]=max(y);
u1(9,:)=u(I,:);
u1(10,:)=u(I,:);
r=rand(8,1);
for i=1:8
if r(i)<Q(1)
u1(i,:)=u(1,:);
elseif r(i)>=Q(1)& r(i)<Q(2)
u1(i,:)=u(2,:);
elseif r(i)>=Q(2)& r(i)<Q(3)
u1(i,:)=u(3,:);
elseif r(i)>=Q(3)& r(i)<Q(4)
u1(i,:)=u(4,:);
elseif r(i)>=Q(4)&r(i)<Q(5)
u1(i,:)=u(5,:);
elseif r(i)>=Q(5)&r(i)<Q(6)
u1(i,:)=u(6,:);
elseif r(i)>=Q(6)&r(i)<Q(7)
u1(i,:)=u(7,:);
elseif r(i)>=Q(7)&r(i)<Q(8)
u1(i,:)=u(8,:);
elseif r(i)>=Q(8)&r(i)<Q(9)
u1(i,:)=u(9,:);
else
u1(i,:)=u(10,:);
end
end
谢谢~! 展开
1个回答
展开全部
function u1=select(u)
%u是输入,u1是输出
%选择函数
%从i等于1到10计算适应度函数赋值给y
for i=1:10
y(i)=syd(u(i,:));
end
%求y的和
F=sum(y);
%并将适应度函数赋值除以他的和
P=y/F;
s=0;
%Q为累计概率
for i=1:10
s=s+P(i);
Q(i)=s;
end
%找到y中的最大值的值m和位置I
[m,I]=max(y);
取输入的u总I的解赋值给u1中第9个解的位置
u1(9,:)=u(I,:);
取输入的u总I的解赋值给u1中第10个解的位置
u1(10,:)=u(I,:);
%得到一个8行1列的随机数(0-1之间)
r=rand(8,1);
%对应i等于1到8
for i=1:8
%如果r的第i个随机数小于Q的第一个值
if r(i)<Q(1)
%u的第一个解赋值给u1的第i个解
u1(i,:)=u(1,:);
%否则如果r的第i个随机数大于Q的第一个值,并且r的第i个随机数大于Q的第二个值
elseif r(i)>=Q(1)& r(i)<Q(2)
%u的第二个解赋值给u1的第i个解
u1(i,:)=u(2,:);
elseif r(i)>=Q(2)& r(i)<Q(3)
u1(i,:)=u(3,:);
elseif r(i)>=Q(3)& r(i)<Q(4)
u1(i,:)=u(4,:);
elseif r(i)>=Q(4)&r(i)<Q(5)
u1(i,:)=u(5,:);
elseif r(i)>=Q(5)&r(i)<Q(6)
u1(i,:)=u(6,:);
elseif r(i)>=Q(6)&r(i)<Q(7)
u1(i,:)=u(7,:);
elseif r(i)>=Q(7)&r(i)<Q(8)
u1(i,:)=u(8,:);
elseif r(i)>=Q(8)&r(i)<Q(9)
u1(i,:)=u(9,:);
else
u1(i,:)=u(10,:);
end
end
%u是输入,u1是输出
%选择函数
%从i等于1到10计算适应度函数赋值给y
for i=1:10
y(i)=syd(u(i,:));
end
%求y的和
F=sum(y);
%并将适应度函数赋值除以他的和
P=y/F;
s=0;
%Q为累计概率
for i=1:10
s=s+P(i);
Q(i)=s;
end
%找到y中的最大值的值m和位置I
[m,I]=max(y);
取输入的u总I的解赋值给u1中第9个解的位置
u1(9,:)=u(I,:);
取输入的u总I的解赋值给u1中第10个解的位置
u1(10,:)=u(I,:);
%得到一个8行1列的随机数(0-1之间)
r=rand(8,1);
%对应i等于1到8
for i=1:8
%如果r的第i个随机数小于Q的第一个值
if r(i)<Q(1)
%u的第一个解赋值给u1的第i个解
u1(i,:)=u(1,:);
%否则如果r的第i个随机数大于Q的第一个值,并且r的第i个随机数大于Q的第二个值
elseif r(i)>=Q(1)& r(i)<Q(2)
%u的第二个解赋值给u1的第i个解
u1(i,:)=u(2,:);
elseif r(i)>=Q(2)& r(i)<Q(3)
u1(i,:)=u(3,:);
elseif r(i)>=Q(3)& r(i)<Q(4)
u1(i,:)=u(4,:);
elseif r(i)>=Q(4)&r(i)<Q(5)
u1(i,:)=u(5,:);
elseif r(i)>=Q(5)&r(i)<Q(6)
u1(i,:)=u(6,:);
elseif r(i)>=Q(6)&r(i)<Q(7)
u1(i,:)=u(7,:);
elseif r(i)>=Q(7)&r(i)<Q(8)
u1(i,:)=u(8,:);
elseif r(i)>=Q(8)&r(i)<Q(9)
u1(i,:)=u(9,:);
else
u1(i,:)=u(10,:);
end
end
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询