在R中使用lpSolveAPI的所有可行解决方案

时间:2018-03-13 07:52:15

标签: r linear-programming lpsolve

我试图弄清楚包装物品的所有可能组合。基本上这是一个整数编程问题,你有i个项目,j个框和二进制变量x [i,j]。

有许多约束,但我首先建立了一个简单的问题,一个是体积约束,也就是分配给框j的项目的体积总和不能超过框j的体积。

我需要所有可行的解决方案来解决这个问题。我使用AMPL和cplex,但没有cplex选项可以找到所有可行的点。

我想知道是否有可能使用r使用lpSolveAPI包获得所有可行的解决方案。我附上我的AMPL代码以便更好地理解。谢谢。

set items;
set containers;

param items_vol {i in items};
param containers_vol {j in containers};

var x{i in items, j in containers} binary;
var y{j in containers} binary;

minimize containers_volume: sum{i in items, j in containers} 
containers_vol[j] * x[i,j];

subject to volumes {j in containers}:
sum {i in items} x[i,j] * items_vol[i] <= containers_vol[j];

subject to usage {i in items}:
sum {j in containers} x[i,j] = 1;

subject to usage2 {j in containers}:
y[j] - sum{i in items} x[i,j]  <= 1

1 个答案:

答案 0 :(得分:2)

有两种不同的方法可以枚举所有可行的整数解。

首先是对禁止先前找到的解决方案的约束添加剪切。即。

 1. solve problem
 2. if infeasible: done
 3. record optimal solution x[i] into a[i]
 4. add cut of the form
      sum(i, (2*a[i]-1)*x[i]) <= sum(i,a[i])-1
 5. go to step 1. 

我假设二进制变量是x[i]

第二种方法是使用Cplex 解决方案池。如果有许多解决方案,这会快得多。

PS:LpSolveApi记录get.solutioncountselect.solution等内容。我不认为它确实有效。