< >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<=b,vlb<=x<=vub
% x的分量全是整数
% 其中x0时初始值,可以用[]代替x0;neqcstr表示约束条件
% A<=b中的铅neqcstr个是等式,neqcstr=0时可以省略。
% 此时也可以省略x0,即调用格式x=ILp(c,A,b,vlv,vub)
% 求解整数线性规划 pre是精度
% 返回结果x是最优解,f是最优解初的函数值。</P>< >if nargin>8 pre=0;
if nargin<7,neqcstr=0;
if nargin<6 ,x0=[];
if nargin<5, vub=[];
if nargin<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)>pre);
mtemp=length(temp2);
if ~isempty(temp2)
x_f_b=[xtemp;ftemp;vlb;vub];
while j<=mm
i=1;
while i<=mtemp
if x_f_b(nvars+1,j)<=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)>pre);
if isempty(temp12),
xall=[xall,xtemp];fall=[fall,ftemp];
fvub=min([fvub,fall]);
elseif ftemp<=fvub
x_f_b=[x_f_b,[xtemp;ftemp;vlb1;vub1]];
end,end,end
if x_f_b(nvars+1,j)<=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)>pre);
if isempty(tempr2),
xall=[xall,xtemp];fall=[fall,gtemp];
fvub=min([fvub,fall]);
elseif ftemp<=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>mm,break ,end
temp0=round(xint(:,j));temp1=floor(xint(:,j));
temp2=find(abs(xint(:,j)-temp0)>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> |