我想编写一个模块来查找多变量公式的整数组合。例如
8x + 9y <= 124
模块将返回x和y.Eg的所有可能的正整数。 x = 2,y = 12。 它不是必需的正好是124,可以是任何小于或等于124的数字。如果找不到确切的解,那么必须尽可能接近124。
我不想用暴力解决因为变量的数量可能是任何...(5,10,100,... n)
任何算法都可以解决这个问题吗?
答案 0 :(得分:1)
您可以通过将问题重新设置为整数编程问题来解决此问题。
将等式重写为约束。
8x + 9y < = 124
8x + 9y + z = 124
请注意,我们引入了一个松弛变量z
。我们希望z
尽可能小,因此objective function
为Minimize z
任何求解器都会在递增z之前尝试x和y的所有可能整数值。
您的完整IP将是:
Min z 8x + 9y + z = 124 x,y,z >=0 and Integer
使用任何商业或开源LP / IP解算器解决。 (R的优化包是一种可能性,Excel Solver也会这样做。)
如果出于任何原因,您希望x
或y
更大或更小,您也可以使用objective function co-efficients.
更一般地说,Min Cx x + Cy y + Cz z
并控制成本参数Cx Cy和Cz的权重以满足您的需求。
希望有所帮助。