【问题标题】:Real time Integer/Binary programming (microSecond compute time)实时整数/二进制编程(微秒计算时间)
【发布时间】: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


【解决方案1】:

这是标准的背包问题,可以使用动态规划有效地解决。这已经在knapsack wiki 中得到了很好的讨论(以及多个堆栈溢出帖子,例如这里DP algo for knapsack 和这里recursive knapsack

c++ 实现在我的核心 i7 @3Ghz 上测量 ~20us

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2014-07-15
    • 2014-11-20
    • 2022-04-05
    相关资源
    最近更新 更多