求助大神 利用遗传算法解决非线性规划问题,最好有MATLAB代码
max=s1;s1=(x1+x2+x3+x4+x5+x6+x7+x8)/20;%目标@gin(s1);!约束1;-1.5*x1-x2-0.5*x3+0*x4+0.5*x5...
max=s1;
s1=(x1+x2+x3+x4+x5+x6+x7+x8)/20;% 目标
@gin(s1);
!约束1;
-1.5*x1-x2-0.5*x3+0*x4+0.5*x5+x6+1.5*x7+2*x8<=0;
1*x1+0.5*x2+0*x3-0.5*x4-x5-1.5*x6-2*x7-2.5*x8<=0;
!约束2;
x1<=35;x2<=60;x3<=40;x4<=40;x5<=30;x6<=30;x7<=35;
x8<=20;
@gin(x1);@gin(x2);@gin(x3);@gin(x4);@gin(x5);@gin(x6);@gin(x7);
@gin(x8);%整数 展开
s1=(x1+x2+x3+x4+x5+x6+x7+x8)/20;% 目标
@gin(s1);
!约束1;
-1.5*x1-x2-0.5*x3+0*x4+0.5*x5+x6+1.5*x7+2*x8<=0;
1*x1+0.5*x2+0*x3-0.5*x4-x5-1.5*x6-2*x7-2.5*x8<=0;
!约束2;
x1<=35;x2<=60;x3<=40;x4<=40;x5<=30;x6<=30;x7<=35;
x8<=20;
@gin(x1);@gin(x2);@gin(x3);@gin(x4);@gin(x5);@gin(x6);@gin(x7);
@gin(x8);%整数 展开
2个回答
展开全部
%%%%%%%%%%%
无聊到专门帮你写了个程序。不想全部写完,自己补完。PS:这题怎么看都是线性规划
&&&&&&&&&&&&&&
%%%%%%%%%%%%%%利用遗传算法计算最优化问题%%%%%%%
%遗传算法参数设置
popsize=200; %种群个数
generation=500;%种群迭代次数,繁殖后代数
pc=0.4; %两个体之间交叉概率
pm=0.05; %个体变异的概率
yueshu=0; %约束成立的标志为1
%初始化群体
for i=1:popsize
while(yuesu==0) %当约束成立时,不再变异。约束不成立时变异。
x(i,1)=randint(1,1,[0,35]); %随机生成(0-35)的整数
x(i,2)=randint(1,1,[0,60]);
x(i,3)=randint(1,1,[0,40]);
x(i,4)=randint(1,1,[0,40]);
x(i,5)=randint(1,1,[0,30]);
x(i,6)=randint(1,1,[0,30]);
x(i,7)=randint(1,1,[0,35]);
x(i,8)=randint(1,1,[0,20]);
%这里自己写几行程序就好
if
%这里判断约束条件,若符合,yueshu=1;
end
end
end
for n=1:generation
%计算适应度
[row col]=size(x);
for i=1:row
fitness(i)=(x(i,1)+x(i,2)+x(i,3)+x(i,5)+x(i,6)+x(i,7)+x(i,8))/20;
end
%轮盘赌选择
zong=sum(fitness);
xt=x;
for i=1:row
temp=rand(1);
for j=1:row
if temp< fitness(j)/zong
break;
end
end
x(i,:)=xt(j,:);
end
%两个个体交叉变异
x2=x;
[row col]=size(x);
for i=1:2:row
temp=rand(1);
if temp<pc
%%%%%%%%%%%%%这里还要自己写个程序判断是否符合约束,不符合一直交叉,直到交叉到符合约束
point=randint(1,1,[1,8]);
x(i,point:8)=x2(i+1,point:8);
x(i+1,1:point)=x2(i,1:point);
end
end
%单个点变异
x3=x;
[row col]=size(x);
for i=1:row
for j=1:8
temp=rand(1);
if(temp<pm)
yueshu=0;
while(yueshu==0) %当约束成立时,不再变异。约束不成立时变异。
if j==1 x(i,1)=randint(1,1,[0,35]);end
if j==2 x(i,2)=randint(1,1,[0,60]);end
if j==3 x(i,3)=randint(1,1,[0,40]);end
if j==4 x(i,4)=randint(1,1,[0,40]);end
if j==5 x(i,5)=randint(1,1,[0,30]);end
if j==6 x(i,6)=randint(1,1,[0,30]);end
if j==7 x(i,7)=randint(1,1,[0,35]);end
if j==8 x(i,8)=randint(1,1,[0,20]);end
%这里自己写程序啊
if
%这里判断约束条件,若符合,yueshu=1;
end
end
end
end
end
end
[row col]=size(x);
for i=1:row
fitness(i)=(x(i,1)+x(i,2)+x(i,3)+x(i,5)+x(i,6)+x(i,7)+x(i,8))/20;
end
maxx=find(fitness==max(fitness));
x(maxx,:)
无聊到专门帮你写了个程序。不想全部写完,自己补完。PS:这题怎么看都是线性规划
&&&&&&&&&&&&&&
%%%%%%%%%%%%%%利用遗传算法计算最优化问题%%%%%%%
%遗传算法参数设置
popsize=200; %种群个数
generation=500;%种群迭代次数,繁殖后代数
pc=0.4; %两个体之间交叉概率
pm=0.05; %个体变异的概率
yueshu=0; %约束成立的标志为1
%初始化群体
for i=1:popsize
while(yuesu==0) %当约束成立时,不再变异。约束不成立时变异。
x(i,1)=randint(1,1,[0,35]); %随机生成(0-35)的整数
x(i,2)=randint(1,1,[0,60]);
x(i,3)=randint(1,1,[0,40]);
x(i,4)=randint(1,1,[0,40]);
x(i,5)=randint(1,1,[0,30]);
x(i,6)=randint(1,1,[0,30]);
x(i,7)=randint(1,1,[0,35]);
x(i,8)=randint(1,1,[0,20]);
%这里自己写几行程序就好
if
%这里判断约束条件,若符合,yueshu=1;
end
end
end
for n=1:generation
%计算适应度
[row col]=size(x);
for i=1:row
fitness(i)=(x(i,1)+x(i,2)+x(i,3)+x(i,5)+x(i,6)+x(i,7)+x(i,8))/20;
end
%轮盘赌选择
zong=sum(fitness);
xt=x;
for i=1:row
temp=rand(1);
for j=1:row
if temp< fitness(j)/zong
break;
end
end
x(i,:)=xt(j,:);
end
%两个个体交叉变异
x2=x;
[row col]=size(x);
for i=1:2:row
temp=rand(1);
if temp<pc
%%%%%%%%%%%%%这里还要自己写个程序判断是否符合约束,不符合一直交叉,直到交叉到符合约束
point=randint(1,1,[1,8]);
x(i,point:8)=x2(i+1,point:8);
x(i+1,1:point)=x2(i,1:point);
end
end
%单个点变异
x3=x;
[row col]=size(x);
for i=1:row
for j=1:8
temp=rand(1);
if(temp<pm)
yueshu=0;
while(yueshu==0) %当约束成立时,不再变异。约束不成立时变异。
if j==1 x(i,1)=randint(1,1,[0,35]);end
if j==2 x(i,2)=randint(1,1,[0,60]);end
if j==3 x(i,3)=randint(1,1,[0,40]);end
if j==4 x(i,4)=randint(1,1,[0,40]);end
if j==5 x(i,5)=randint(1,1,[0,30]);end
if j==6 x(i,6)=randint(1,1,[0,30]);end
if j==7 x(i,7)=randint(1,1,[0,35]);end
if j==8 x(i,8)=randint(1,1,[0,20]);end
%这里自己写程序啊
if
%这里判断约束条件,若符合,yueshu=1;
end
end
end
end
end
end
[row col]=size(x);
for i=1:row
fitness(i)=(x(i,1)+x(i,2)+x(i,3)+x(i,5)+x(i,6)+x(i,7)+x(i,8))/20;
end
maxx=find(fitness==max(fitness));
x(maxx,:)
追问
大神厉害 用Lingo做的 我想比较一下Lingo和遗传算法的速度 但是一直编不好 受到启发了 谢谢你
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
迈杰
2024-11-30 广告
2024-11-30 广告
全基因组关联研究分析是一种强大的遗传学方法,旨在识别与人类疾病或性状相关的遗传变异。在迈杰转化医学研究(苏州)有限公司,我们运用先进的技术和算法,对大规模群体的基因组数据进行深入分析,寻找与特定疾病或性状相关联的单核苷酸多态性(SNP)位点...
点击进入详情页
本回答由迈杰提供
展开全部
要求是整数?
追问
是的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询