实时 Integer/Binary 编程(微秒计算时间)
Real time Integer/Binary programming (microSecond compute time)
我的二进制编程问题是:
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
这是一个流程任务分配问题。就我而言,解决 binary/integer 编程问题的开销需要非常小(< 1 毫秒)。当我 运行 使用 CBC 求解器/lpsolve 时,它报告的时间为 2 毫秒 - 7 毫秒。我没有 SCIP/Gurobi。有没有办法在不到一毫秒的时间内解决这个问题?期望在不到一毫秒内解决这个问题似乎合理吗?
(我确实在 CBC 中禁用了 printf。但我不确定是否有任何其他系统操作被卡住......它正在写入的任何日志文件)
这是标准的背包问题,可以使用动态规划高效地求解。 knapsack wiki (and also in mutiple stack overflow posts e.g. here DP algo for knapsack and here recursive knapsack)
中对此进行了很好的讨论
C++ 实现在我的核心 i7 @3Ghz 上测量了 ~20us
我的二进制编程问题是:
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
这是一个流程任务分配问题。就我而言,解决 binary/integer 编程问题的开销需要非常小(< 1 毫秒)。当我 运行 使用 CBC 求解器/lpsolve 时,它报告的时间为 2 毫秒 - 7 毫秒。我没有 SCIP/Gurobi。有没有办法在不到一毫秒的时间内解决这个问题?期望在不到一毫秒内解决这个问题似乎合理吗?
(我确实在 CBC 中禁用了 printf。但我不确定是否有任何其他系统操作被卡住......它正在写入的任何日志文件)
这是标准的背包问题,可以使用动态规划高效地求解。 knapsack wiki (and also in mutiple stack overflow posts e.g. here DP algo for knapsack and here recursive knapsack)
中对此进行了很好的讨论C++ 实现在我的核心 i7 @3Ghz 上测量了 ~20us