整数组合

时间:2012-08-24 14:00:54

标签: mathematical-optimization

我想编写一个模块来查找多变量公式的整数组合。例如

  8x + 9y <= 124

模块将返回x和y.Eg的所有可能的正整数。 x = 2,y = 12。 它不是必需的正好是124,可以是任何小于或等于124的数字。如果找不到确切的解,那么必须尽可能接近124。

我不想用暴力解决因为变量的数量可能是任何...(5,10,100,... n)

任何算法都可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以通过将问题重新设置为整数编程问题来解决此问题。

将等式重写为约束。

8x + 9y < = 124

8x + 9y + z = 124

请注意,我们引入了一个松弛变量z。我们希望z尽可能小,因此objective functionMinimize z任何求解器都会在递增z之前尝试x和y的所有可能整数值。

您的完整IP将是:

Min z
8x + 9y + z = 124
x,y,z >=0 and Integer

使用任何商业或开源LP / IP解算器解决。 (R的优化包是一种可能性,Excel Solver也会这样做。)

如果出于任何原因,您希望xy更大或更小,您也可以使用objective function co-efficients.

来控制这些内容

更一般地说,Min Cx x + Cy y + Cz z并控制成本参数Cx Cy和Cz的权重以满足您的需求。

希望有所帮助。