跪求对这段matlab程序的说明

来源:百度知道 编辑:UC知道 时间:2024/06/23 09:15:54
function[x,val,status]=IP(f,A,b,Aeq,beq,lb,ub,M,e)
options=optimset('display','off');
bound=inf;
[x0,val0]=linprog(f,A,b,Aeq,beq,lb,ub,[],options);%先求线性规划的解;
[x,val,status,b]=rec(f,A,b,Aeq,beq,lb,ub,x0,val0,M,e,bound);
function[xx,val,status,bb]=rec(f,A,b,Aeq,beq,lb,ub,x,v,M,e,bound)
options=optimset('display','off');

[x0,val0,status0]=linprog(f,A,b,Aeq,beq,lb,ub,[],options);
if status0<=0 | val0>bound
xx=x;val=v;status=status0;bb=bound;
return;
end
ind=find(abs(x0(M)-round(x0(M)))>e);%小数点数大的先分支;
if isempty(ind)
status=1;
if val0<bound
x0(M)=round(x0(M));
xx=x0;
val=val0;
bb=val0;
else
xx=x;
val=v;
bb=bound;
end
return
end
[row col]=size(ind);
br_var=M(ind(1));
br_value=x(br_var);
for i=2:col
te

分支定界法:把全部可行解空间反复的分割为越来越小的子集;并且对子集内的解集计算一个目标下界(最小值问题),称为定界。
算法过程:
假设:A问题是要求解的整数规划问题,与之对应的线性规划问题为B(即去除整数约束),z*是A的最优解,~z是任一可行解,z~是B的最优解。
(1) 分支,在B的最优解中任选一个不符合整数条件的变量xj,其值为bj,以[bj]表示不大于bj的整数。构造两个约束条件xj<=[bj]和xj>=[bj]+1,将这两个条件加入B问题,分支成为新的规划B1和B2问题
定界,以B1和B2问题求解,与其他问题的解的结果中,找到最优目标函数的最大值作为新的上界~z。从已符合整数条件的各个分支中,找到目标函数值为最大者为新的下界~z,若无作用~z=0
(2) 比较与剪支,各分支的最优目标函数中若有小于z~者,则剪去这一支,即以后不再考虑了。若大于~z,且不符合整数条件,则重复(1)步骤。直到最后得到z*=~z为止。
知道原理理解就好了。其实可以不去理解程序本身的,知道原理自己也可以编程的