整数规划遗传算法python_非线性整数规划的遗传算法Matlab程序(附图).doc

非线性整数规划的遗传算法Matlab程序(附图).doc

非线性整数规划的遗传算法Matlab程序(附图)通常,非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab优化工具箱和一些优化软件比如lingo等,常常无法应用,即使能应用也不能给出一个较为令人满意的解。这时就需要针对问题设计专门的优化算法。下面举一个遗传算法应用于非线性整数规划的编程实例,供大家参考!模型的形式和适应度函数定义如下:

这是一个具有200个01决策变量的多目标非线性整数规划,编写优化的目标函数如下,其中将多目标转化为单目标采用简单的加权处理。function Fitness=FITNESS(x,FARM,e,q,w)%% 适应度函数%? 输入参数列表%? x??????? 决策变量构成的4×50的0-1矩阵%? FARM???? 细胞结构存储的当前种群,它包含了个体x%? e??????? 4×50的系数矩阵%? q??????? 4×50的系数矩阵%? w??????? 1×50的系数矩阵%%gamma=0.98;N=length(FARM);%种群规模F1=zeros(1,N);F2=zeros(1,N);for i=1:N??? xx=FARM{i};??? ppp=(1-xx)+(1-q).*xx;??? F1(i)=sum(w.*prod(ppp));??? F2(i)=sum(sum(e.*xx));endppp=(1-x)+(1-q).*x;f1=sum(w.*prod(ppp));f2=sum(sum(e.*x));Fitness=gamma*sum(min([sign(f1-F1);zeros(1,N)]))+(1-gamma)*sum(min([sign(f2-F2);zeros(1,N)]));?针对问题设计的遗传算法如下,其中对模型约束的处理是重点考虑的地方function [Xp,LC1,LC2,LC3,LC4]=MYGA(M,N,Pm)%% 求解01整数规划的遗传算法%% 输入参数列表%? M???? 遗传进化迭代次数%? N???? 种群规模%? Pm??? 变异概率%% 输出参数列表%? Xp??? 最优个体%? LC1?? 子目标1的收敛曲线%? LC2?? 子目标2的收敛曲线%? LC3?? 平均适应度函数的收敛曲线%? LC4?? 最优适应度函数的收敛曲线%% 参考调用格式[Xp,LC1,LC2,LC3,LC4]=MYGA(50,40,0.3)%% 第一步:载入数据和变量初始化load eqw;%载入三个系数矩阵e,q,w%输出变量初始化Xp=zeros(4,50);LC1=zeros(1,M);LC2=zeros(1,M);LC3=zeros(1,M);LC4=zeros(1,M);Best=inf;%% 第二步:随机产生初始种群farm=cell(1,N);%用于存储种群的细胞结构k=0;while k??? %以下是一个合法个体的产生过程??? x=zeros(4,50);%x每一列的1的个数随机决定??? for i=1:50??????? R=rand;??????? Col=zeros(4,1);??????? if R<0.7??????????? RP=randperm(4);%1的位置也是随机的??????????? Col(RP(1))=1;??????? elseif R>0.9??????????? RP=randperm(4);??????????? Col(RP(1:2))=1;??????? else??????????? RP=randperm(4);??????????? Col(RP(1:3))=1;??????? end??????? x(:,i)=Col;??? end??? %下面是检查行和是否满足约束的过程,对于不满足约束的予以抛弃??? Temp1=sum(x,2);??? Temp2=find(Temp1>20);??? if length(Temp2)==0??????? k=k+1;??????? farm{k}=x;??? endend???%% 以下是进化迭代过程counter=0;%设置迭代计数器while counter???%% 第三步:交叉??? %交叉采用双亲双子单点交叉??? newfarm=cell(1,2*N);%用于存储子代的细胞结构??? Ser=randperm(N);%两两随机配对的配对表??? A=farm{Ser(1)};%取出父代A??? B=farm{Ser(2)};%取出父代B??? P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值