目前我使用PuLP
来解决最大化问题。它工作正常,但我希望能够获得N-best解决方案,而不仅仅是一个。有没有办法在PuLP
或任何其他免费/ Python解决方案中做到这一点?我试图从最佳解决方案中随机挑选一些变量并抛出并重新运行,但这似乎是一个彻头彻尾的破解。做ILP时的多种解决方案
5
A
回答
1
所以我想出了如何(通过RTFM)获得多个soutions。在我的代码基本上有:
number_unique = 1 # The number of variables that should be unique between runs
model += objective
model += constraint1
model += constraint2
model += constraint3
for i in range(1,5):
model.solve()
selected_vars = []
for p in vars:
if p_vars[p].value() != 0:
selected_vars.append(p)
print_results()
# Add a new constraint that the sum of all of the variables should
# not total up to what I'm looking for (effectively making unique solutions)
model += sum([p_vars[p] for p in selected_vars]) <= 10 - number_unique
这个伟大的工程,但我意识到,我真的需要去随机路线。我有10个不同的变量,通过只抛出几个变量,我的解决方案在所有的排列中倾向于具有相同的重加权变量(这是可以预料的)。
1
如果您的问题很快解决,您可以尝试从上面逐步限制目标。对于examle,如果最优解的目标值是X
,尝试用一个额外的约束重新运行问题:
problem += objective <= X - eps, ""
在还原步骤eps
取决于你的问题的知识。
当然,如果你只是盲目地选择一些eps
并得到一个解决方案,你不知道解决方案是第二好的,第10好还是1000最好......但是你可以做一些系统的搜索(二进制,网格)eps
参数(如果问题确实很快解决)。
相关问题
- 1. 的NuGet和多种解决方案
- 2. 获得ILP的最佳n个解决方案
- 3. Python cvxopt glpk ilp返回第一个可行的解决方案
- 4. SVN - 多种解决方案项目
- 5. 调试多种解决方案VS 2012
- 6. 多语种短信解决方案
- 7. TFS并使用多种解决方案
- 8. 多种付款方式,多种货币解决方案
- 9. 从一种解决方案调试到另一种解决方案
- 10. 包含多个解决方案的Visual Studio解决方案
- 11. Visual Studio:单一解决方案还是很多解决方案?
- 12. 多ORM解决方案
- 13. 多线程解决方案
- 14. 多背景解决方案?
- 15. 数独求解器多种解决方案
- 16. 为eigs做matlab缓存解决方案
- 17. 无法在另一种解决方案
- 18. 一种解决方案会导致无关问题的解决?
- 19. 获取多种解决方案在SWI-Prolog的
- 20. C#对SONARQube的多种解决方案文件支持
- 21. Visual Studio解决方案中的多种语言
- 22. 单一页面上多种形式的优雅解决方案
- 23. 使用MSBuild构建具有多种环境的解决方案
- 24. 构建具有多种角色的Azure解决方案
- 25. 在nuget中有多种解决方案的开发过程
- 26. TFS:具有多种配置的构建解决方案
- 27. 最佳WordPress的多语种解决方案与
- 28. 构建由于多种解决方案失败的文件
- 29. 寻找“8皇后区”的多种解决方案
- 30. 哪种解决方案把手发布/订阅方案更好?
你可以接受你自己的答案 – dassouki