首先mathematica可以很方便地进行线性规划问题(LP),但是对于离散最优化问题,例如整数规划(IP)就没有相应的函数,因此需要进行分支定界法,以下我按照论文做的一个实验:
In[9]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0}, {x1,
x2}]
Out[9]= {17.6774, {x1 -> 1.54839, x2 -> 4.03226}}
最优解不是整数,将问题按条件x1划分为子问题LP1 (x1 <= 1) 和LP2 (x1 >= 2),再次求解:
线性规划子问题LP1:
In[10]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 <= 1}, {x1, x2}]
Out[10]= {15.6667, {x1 -> 1., x2 -> 3.66667}}
线性规划子问题LP2:
In[11]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 >= 2}, {x1, x2}]
Out[11]= {17., {x1 -> 2., x2 -> 3.75}}
两个答案都不是可行解,比较两个答案,LP2的上界17比LP1的上界大,选LP2进行分支,按照x2划分为子问题LP3 (x2 <=
3) 和LP4 (x2 >= 3)
线性规划子问题LP3:
In[12]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 >= 2 && x2 <= 3}, {x1, x2}]
Out[12]= {15.2, {x1 -> 3.2, x2 -> 3.}}
线性规划子问题LP4:
In[13]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 >= 2 && x2 >= 3}, {x1, x2}]
Out[13]= {17., {x1 -> 2., x2 -> 3.75}}
In[14]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 >= 2 && x2 >= 4}, {x1, x2}]
\:6B63\:5728\:8BA1\:7B97In[14]:= NMaximize::nsol: There are no points that satisfy the constraints {5 x1+8 x2<=40,-2 x1+3 x2<=9,x1>=0,x2>=0,x1>=2,x2>=4}.
Out[14]= {-\[Infinity], {x1 -> Indeterminate, x2 -> Indeterminate}}
说明LP4没有可行解,剪掉分支LP4,对LP3进行分支LP5 (X1 <= 3) 和LP6 (x1 >= 4)
线性规划子问题LP5:
In[15]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 <= 3 && x2 <= 3}, {x1, x2}]
Out[15]= {15., {x1 -> 3., x2 -> 3.}}
线性规划子问题LP5:
In[16]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 >= 4 && x2 <= 3}, {x1, x2}]
Out[16]= {14., {x1 -> 4., x2 -> 2.5}}
由于待解的LP1总是大于15,对LP1进行分支为LP7 (x2 <= 3) 和LP8 (x2 >= 4)
线性规划子问题LP7:
In[17]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 <= 1 && x2 <= 3}, {x1, x2}]
Out[17]= {13., {x1 -> 1., x2 -> 3.}}
线性规划子问题LP8:
In[18]:= NMaximize[{x1 + 4 x2,
5 x1 + 8 x2 <= 40 && -2 x1 + 3 x2 <= 9 && x1 >= 0 && x2 >= 0 &&
x1 <= 1 && x2 >= 4}, {x1, x2}]
\:6B63\:5728\:8BA1\:7B97In[18]:= NMaximize::nsol: There are no points that satisfy the constraints {5 x1+8 x2<=40,-2 x1+3 x2<=9,x1>=0,x2>=0,x1<=1,x2>=4}.
Out[18]= {-\[Infinity], {x1 -> Indeterminate, x2 -> Indeterminate}}
无解,综上所述:在LP5中得到的x1 = 3, x2 = 3, z = 15 为最大值
参考论文:
点击打开链接