基于宏观营养素的食物选择算法

时间:2014-04-24 05:41:41

标签: algorithm

我有很多食物成分,每种都含有蛋白质,碳水化合物和脂肪。 e.g:

Food Name   P    C    F
Food1       10   5    3
Food2        3   10   8
Food3       4    20   5

我需要编写一个看起来像这样的函数:

private List< Food > CombineFoodsBasedOnMacro(p, c, f)

这个功能应该选择和组合几种不同量的食物,这样当我们将所选食物的P,C和F结合起来时,它们非常接近通过的p,c,f参数。

e.g。

CombineFoodsBasedOnMacro(45, 40, 20)

可接受的'回答'可能是:

4 * Food1 + 1 * Food3

这相当于总数:

P = 44, C = 40, F = 17

我的问题是:我可以使用什么算法进行此类计算/近似?

1 个答案:

答案 0 :(得分:2)

这个问题是NP-Hard ,几乎是多重集合而不是集合的Set Cover Problem的泛化,因此没有已知的多项式解决方案(并且大多数情况下)相信这样的解决方案不存在。)

您可以使用integer linear programming尝试解决此问题,例如:

minimize Sum( x_s) (number of sets), s.t.:
Sum(x_s | for all sets ) #p(s)*x_s >= p // repeat for c,f
x_s = 0 || x_s = 1

请注意,#p(s)不是变量,所以它适用于整数线性编程。