分支定界法:
基本原理:
上述图片来源:图片来源链接
lpsolve是一个混合整数线性规划求解器,可以求解纯线性、(混合)整数/二值、半连续和特殊有序集模型。并且经过实际验证,有极高的求解效率。而且lpsolve还支持很多编程语言对它的调用,具有很好的可扩展性。
MATLAB对lpsolve的调用方法详见本人的另一篇帖子(原贴链接),语法不难,有一定MATLAB编程基础都能看懂,本帖就不再赘述,直接步入主题。
本文以一个具体例子来阐述如何用MATLAB调用lpsolve使用分支定界算法求解整数规划问题:
例一:
min z= -(x1+x2)
s.t.
-4x1+2x2<=-1
4x1+2x2<=11
0x1-2x2<=-1
针对上述整数规划问题,本文编写了如下程序进行求解:
主函数如下:
f=[-1,-1];
A=[-4,2;4,2;0,-2];
b=[-1,11,-1];
e=[-1,-1,-1];
vlb=[0,0];
example=lp_maker(f,A,b,e,vlb,[],[],[],1);%构建整数规划的松弛问题
mxlpsolve('solve', example);
obj=mxlpsolve('get_objective',example)
x=mxlpsolve('get_variables',example)
%dual=mxlpsolve('get_dual_solution',example)
global best bestA bestb bestx%将分支定界中得到的最好整数解声明为全局变量
best=10000;
[f,A,b,e,vlb,x,best,bestA,bestb,bestx]=branhchbound2(f,A,b,e,vlb,x,best,bestA,bestb,bestx