资源描述:
《matlab源代码:整数线性规划问题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、%%本程序是用分枝定界法求解整数线性规划问题%%问题的标准形式:%%minc'*x%%s.t.A*x<=b%%Aeq*x=beq%%x要求是整数%%程序的编写者:快乐逍遥侠%%程序的最后修改时间是:2007-11-24function[y,fval]=BranchBound(c,A,b,Aeq,beq)c=[];A=[];b=[];Aeq=[];beq=[];NL=length(c);UB=inf;LB=-inf;FN=[0];AA(1)={A};BB(1)={b};k=0;flag=0;whilefla
2、g==0;[x,fval,exitFlag]=linprog(c,A,b,Aeq,beq);if(exitFlag==-2)
3、(fval>=UB)FN(1)=[];ifisempty(FN)==1flag=1;elsek=FN(1);A=AA{k};b=BB{k};endelsefori=1:NLifabs(x(i)-round(x(i)))>1e-7kk=FN(end);FN=[FN,kk+1,kk+2];temp_A=zeros(1,NL);temp_A(i)=1;temp_A1=[A;temp_A]
4、;AA(kk+1)={temp_A1};b1=[b;fix(x(i))];BB(kk+1)={b1};temp_A2=[A;-temp_A];AA(kk+2)={temp_A2};b2=[b;-(fix(x(i))+1)];BB(kk+2)={b2};FN(1)=[];k=FN(1);A=AA{k};b=BB{k};break;endendif(i==NL)&(abs(x(i)-round(x(i)))<=1e-7)UB=fval;y=x;FN(1)=[];ifisempty(FN)==1flag=1;e
5、lsek=FN(1);A=AA{k};b=BB{k};endendendendy=round(y);fval=c*y;%整数规划分支定界算法matlab通用源程序%各参数的意义同matlab优化工具箱的线性规划函数linprog%调用前,输入参数要化成matlab的标准形式[x,val]=kfz-f-3(n,f,a,b,aeq,beq,lb,ub)x=zeros(n,1);x1=zeros(n,1);m1=2;m2=1;[x1,val1]=linprog(f,a,b,aeq,beq,lb,ub);if(x
6、1==0)x=x1;val=val1;elseif(round(x1)==x1)x=x1;val=val1;elsee1={0,a,b,aeq,beq,lb,ub,x1,val1};e(1,1)={e1};zl=0;zu=-val1;while(zu~=zl)forc=1:1:m2if(m1~=2)if(cell2mat(e{m1-1,c}(1))==1)e1={1,[],[],[],[],[],[],[],0};e(m1,c*2-1)={e1};e(m1,c*2)={e1};continue;end;e
7、nd;x1=cell2mat(e{m1-1,c}(8));x2=zeros(n,1);s=0;s1=1;s2=1;lb1=cell2mat(e{m1-1,c}(6));ub1=cell2mat(e{m1-1,c}(7));lb2=cell2mat(e{m1-1,c}(6));ub2=cell2mat(e{m1-1,c}(7));ford=1:1:nif(abs((round(x1(d))-x1(d)))>0.0001)&(s==0)s=1;lb1(d)=fix(x1(d))+1;if(a*lb1<=b)s
8、1=0;end;ub2(d)=fix(x1(d));if(a*lb2<=b)s2=0;end;end;end;e1={s1,a,b,aeq,beq,lb1,ub1,[],0};e2={s2,a,b,aeq,beq,lb2,ub2,[],0};e(m1,c*2-1)={e1};e(m1,c*2)={e2};end;m1=m1+1;m2=m2*2;forc=1:1:m2if(cell2mat(e{m1-1,c}(1))==0)[x1,val1]=linprog(f,cell2mat(e{m1-1,c}(2))
9、,cell2mat(e{m1-1,c}(3)),cell2mat(e{m1-1,c}(4)),cell2mat(e{m1-1,c}(5)),cell2mat(e{m1-1,c}(6)),cell2mat(e{m1-1,c}(7)));e1={cell2mat(e{m1-1,c}(1)),cell2mat(e{m1-1,c}(2)),cell2mat(e{m1-1,c}(3)),cell2mat(e{m1-1,c}(4)),ce