加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

intprog.m 代码

(2013-04-13 23:30:17)
标签:

intprog

matlab

代码

it

   matlab工具箱并没有intprog.m,而在做整数规划时会用到此函数,这是代码,只需建立.m文件放在相应目录即可调用。代码如下:

function[x,fval,exitflag]=intprog(f,A,b,Aeq,beq,lb,ub,M,TolXInteger)
options=optimset('display','off');
bound=inf;
[x0,fval0]=linprog(f,A,b,Aeq,beq,lb,ub,[],options);
[x,fval,exitflag,b]=rec_BranchBound(f,A,b,Aeq,beq,lb,ub,x0,fval0,M,TolXInteger,bound);
function[xx,fval,exitflag,bb]=rec_BranchBound(f,A,b,Aeq,beq,lb,ub,x,v,M,TolXInteger,bound)
options=optimset('display','off');
[x0,fval0,exitflag0]=linprog(f,A,b,Aeq,beq,lb,ub,[],options);
if exitflag0<=0||fval0>bound
    xx=x;
    fval=v;
    exitflag=exitflag0;
    bb=bound;
    return;
end
ind=find(abs(x0(M)-round(x0(M)))>TolXInteger);
if isempty(ind)
    exitflag=1;
    if fval0        x0(M)=round(x0(M));
        xx=x0;
        fval=fval0;
        bb=fval0;
    else
        xx=x;
        fval=v;
        bb=bound;
    end
    return;
end
[row col]=size(ind);
br_var=M(ind(1));
br_value=x(br_var);
flag=abs(br_value-floor(br_value)-0.5);
for i=2:col
    tempbr_var=M(br_var);
    tempbr_value=x(br_var);
    temp_flag=abs(tempbe_value-floor(tempbr_value)-0.5);
    if temp_flag>flag
        br_var=tempbr_var;
        br_value=tempbr_value;
        flag=temp_flag;
    end
end
if isempty(A)
    [r c]=size(Aeq);
else
    [r c]=size(A);
end
A1=[A;zeros(1,c)];
A1(end,br_var)=1;
b1=[b;floor(br_value)];
A2=[A;zeros(1,c)];
A2(end,br_var)=-1;
b2=[b;-ceil(br_value)];
[x1,fval1,exitflag1,bound1]=rec_BranchBound(f,A1,b1,Aeq,beq,lb,ub,x0,fval0,M,TolXInteger,bound);
exitflag=exitflag1;
if exitflag1>0&&bound1    xx=x1;
    fval=fval1;
    bound=bound1;
    bb=bound1;
else
    xx=x0;
    fval=fval0;
    bb=bound;
end
[x2,fval2,exitflag2,bound2]=rec_BranchBound(f,A2,b2,Aeq,beq,lb,ub,x0,fval0,M,TolXInteger,bound);
if exitflag2>0&&bound2    exitflag=exitflag2;
    xx=x2;
    fval=fval2;
    bb=bound2;
end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有