我试图弄清楚包装物品的所有可能组合。基本上这是一个整数编程问题,你有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
答案 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.solutioncount
和select.solution
等内容。我不认为它确实有效。