数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 3193|回复: 2

[求助]各位大侠,有没有较好的整数规划Matlab程序??

[复制链接]
发表于 2004-12-14 02:20:58 | 显示全部楼层 |阅读模式
<>谢先!最好使用比较方便一点的,变量数目不要限制!</P>
发表于 2004-12-14 02:43:56 | 显示全部楼层
<>function [x,f]=ILp(c,A,b,vlb,vub,x0,neqcstr,pre)
%[x,f]=ILp(c,A,b,vlb,vub,x0,neqcstr,pre) 求解下列整数线性规划问题
% min f=c'*, s.t. A*x&lt;=b,vlb&lt;=x&lt;=vub
% x的分量全是整数
% 其中x0时初始值,可以用[]代替x0;neqcstr表示约束条件
% A&lt;=b中的铅neqcstr个是等式,neqcstr=0时可以省略。
% 此时也可以省略x0,即调用格式x=ILp(c,A,b,vlv,vub)
% 求解整数线性规划 pre是精度
% 返回结果x是最优解,f是最优解初的函数值。</P><>if nargin&gt;8 pre=0;
        if nargin&lt;7,neqcstr=0;
                if nargin&lt;6 ,x0=[];
                    if nargin&lt;5, vub=[];
                        if nargin&lt;4,vlb=[];
                        end,end,end,end,end
        
%Set to column cectors
x0=x0(;c=c(;b=b(;vlb=vlb(:);vub=vub(:);
mm=1;j=1;nvars=length(c');
fvub=inf;xall=[];fall=[];x_f_b=[];
[xtemp,ztemp,how]=lp(c,A,b,vlb,vub,x0,neqcstr,-1);
ftemp=c'*xtemp;
if strcmp(how,'ok'),
    temp0=round(xtemp);temp1=floor(xtemp);
    temp2=find(abs(xtemp-temp0)&gt;pre);
    mtemp=length(temp2);
    if ~isempty(temp2)
        x_f_b=[xtemp;ftemp;vlb;vub];
        while j&lt;=mm
            i=1;
            while i&lt;=mtemp
                if x_f_b(nvars+1,j)&lt;=fvub
                    vlb1=x_f_b(nvars+2:2*nvars+1,j);
                    vub1=x_f_b(2*nvars+2:3*nvars+1,j);
                    vub1(temp2(i))=temp1(temp2(i));
                    [xtemp z,hoe]=lp(c,[A;c'],[b;fvub],...
                        vlb1,vub1,x0,neqcstr,-1);
                    ftemp=c'*xtemp;
                    if strcmp(how,'ok'),
                        temp10=round(xtemp);temp11=floor(xtemp);
                        temp12=find(abs(xtemp-temp10)&gt;pre);
                     if isempty(temp12),
                         xall=[xall,xtemp];fall=[fall,ftemp];
                         fvub=min([fvub,fall]);
                     elseif ftemp&lt;=fvub
                         x_f_b=[x_f_b,[xtemp;ftemp;vlb1;vub1]];
                     end,end,end
             if x_f_b(nvars+1,j)&lt;=fvub
                 vlbr=x_f_b(nvars+2:2*nvars+1,j);
                 vlbr(temp2(i))=temp1(temp2(i))+1;
                 vubr=x_f_b(2*nvars+2:3*nvars+1,j);
                 [xtemp z,how]=lp(c,[A;c'],[b;fvub],vlbr,...
                     vubr,x0,neqcstr,-1);
                 ftemp=c'*xtemp;
                 if strcmp(how,'ok'),
                     tempr0=round(xtemp);tenor1=floor(xtemp);
                     tempr2=find(abs(xtemp-tempr0)&gt;pre);
                     if isempty(tempr2),
                         xall=[xall,xtemp];fall=[fall,gtemp];
                         fvub=min([fvub,fall]);
                     elseif ftemp&lt;=fvub
                         x_f_b=[x_f_b,[xtemp;ftemp;vlbr;vubr]];
                     end,end,end
             i=i+1;end
         xint=x_f_b(1:nvars,:);[m,mm]=size(xint);j=j+1;
         if j&gt;mm,break ,end
         temp0=round(xint(:,j));temp1=floor(xint(:,j));
         temp2=find(abs(xint(:,j)-temp0)&gt;pre);
         mtemp=length(temp2);end
else,x=xtemp;f=ftemp;end,
if ~isempty(fall)
     fmin=min(fall),nmin=find(fall==fmin);
     x=xall(:,nmin);f=fmin;end,
else , x=nan*ones(1,nvars);end
                         </P>
 楼主| 发表于 2004-12-15 19:38:20 | 显示全部楼层
谢谢你了,老兄!!!
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2025-5-8 17:49 , Processed in 0.052204 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表