作为在iOS / Android上运行的程序的一些实时渲染过程的一部分,用C / C ++编写,我需要解决许多微小的线性编程问题,包括5个变量和2个约束,即
minimize: a_0*x + b_0*y + c_0*z + d_0*u + e_0*v
subject to:
p_1 = a_1*x + b_1*y + c_1*z + d_1*u + e_1*v
p_2 = a_2*x + b_2*y + c_2*z + d_2*u + e_2*v
0 <= x <= x_max
0 <= y <= y_max
0 <= z <= z_max
0 <= u <= u_max
0 <= v <= v_max
我想使用许可许可证快速解决这个问题。
搜索我找到了Google的线性优化库glop(Apache2),但
我觉得应该可以直接解决这个问题,只需枚举顶点并测试目标函数,但我无法绕过它。
是否有一个小型LP库,我可以使用的开销很小?或者,我如何分解数学?
答案 0 :(得分:1)
解决方案可以合理地硬编码如下:
取前两个线性约束并选择三个变量(有10种方法可以这样做),你可以为其分配0或max(有8种方法可以做到这一点)。这导致了10个基本的2x2系统,有8个不同的右侧。
检查这些解决方案是否可以接受(两个计算的未知数在0到最大范围内)。
保留允许的最小化目标的解决方案。
我不会感到惊讶的是,仔细的微优化和展开代码可以击败通用求解器(单纯形算法)。
答案 1 :(得分:1)
我建议你使用Sensitivity Analysis for Linear Programming(Excel的例子是here)。我们的想法是为给定的输入min{ cx: Ax>= b }
求解LP:(c,A,b)
,并找到解决方案保持最佳的参数范围(使用上面链接中的公式)。如果您知道参数的大致可能界限,则需要解决许多LP并存储范围和解决方案。