用mathematica进行整数规划

       首先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 为最大值
参考论文: 点击打开链接

猜你喜欢

转载自blog.csdn.net/qq_42020563/article/details/80921830