【发布时间】:2015-04-30 23:26:11
【问题描述】:
我的二进制编程问题是:
max: (a1 * x1) + (a2 * x2) + ..... + (an * xn)
受制于:
(c1 * x1) + (c2 * x2) + ..... + (cn * xn) < C
n = 10
a1, ... an, c1, ... cn, C are known
x1, ... xn are binary
这是一个流程任务分配问题。就我而言,解决二进制/整数编程问题的开销需要非常小(
(我确实禁用了 CBC 中的 printf。但我不确定它是否有任何其他系统操作被卡住......它正在写入的任何日志文件)
【问题讨论】:
-
只是一个评论,但大型商业求解器(Gurobi、CPLEX、Xpress)将他们的研发精力投入到解决更大、更难的问题上——它们可能并不比开放/免费的求解器好多少实例。如果您知道您有一个特定的问题结构,您可能能够获得一个更简单的实现以更快地运行,因为它不需要提供通用求解器提供的所有可能的功能。考虑限制预求解,删除大部分或所有削减和启发式方法,除非它们真的对您的问题有帮助,禁用任何回调等。某种 RISC MIP 求解器。
-
你是说最大吗?上面的解应该永远是零向量。
-
感谢 TimChippingtonDerrick 的回复。在深入挖掘之后,我意识到这是标准的背包问题,可以使用动态规划有效地解决。 c++ 实现测量约 20us。我会用这个回复。
-
嗨,克里斯托弗,哎呀,是的,这应该是“最大”。现在编辑问题。
标签: real-time knapsack-problem integer-programming