Php 解决a";“多目标背包”;令人费解的事

Php 解决a";“多目标背包”;令人费解的事,php,algorithm,math,optimization,Php,Algorithm,Math,Optimization,所以我一直在想一个使用PHP的解决方案;旋转“背包问题”。我已经从决策理论的角度以及计算机科学的角度对它做了大量的阅读,看看它将如何实现。我逐渐意识到使用“暴力”是行不通的 因此,请允许我解释一下困境 假设你的身体需要:50克葡萄糖、20克碳水化合物、5克纤维和120克蛋白质。 您的冰箱有: 1个苹果-(10克葡萄糖,2克碳水化合物,0.5克纤维和1克蛋白质) 0.5个苹果-(5克葡萄糖、1克碳水化合物、0.25克纤维和0.5克蛋白质) 1块牛排-(5克葡萄糖、20克碳水化合物、5克纤维

所以我一直在想一个使用PHP的解决方案;旋转“背包问题”。我已经从决策理论的角度以及计算机科学的角度对它做了大量的阅读,看看它将如何实现。我逐渐意识到使用“暴力”是行不通的

因此,请允许我解释一下困境

假设你的身体需要:50克葡萄糖、20克碳水化合物、5克纤维和120克蛋白质。

您的冰箱有:

  • 1个苹果-(10克葡萄糖,2克碳水化合物,0.5克纤维和1克蛋白质)
  • 0.5个苹果-(5克葡萄糖、1克碳水化合物、0.25克纤维和0.5克蛋白质)
  • 1块牛排-(5克葡萄糖、20克碳水化合物、5克纤维和50克蛋白质)
等等等等。。。有出去买更多东西的空间,以后可以加入“冰箱池”。在总体方案中,这个冰箱池可能是一个预定义的数组或从表中提取的行列表(这将更加实用)

现在,我正在努力实现的是从我的“冰箱池”中找到最佳/最接近的匹配项,以满足我的需求

它不必是100%匹配(因为这可能是不可能的),但它需要是最接近的数学匹配

我如何开始解决这样的问题?我见过一些PHP类,它们考虑使用一个变量,而另一些则试图达到最大排列,但在我的例子中,我希望使用最接近设置要求的一个

谢谢:)


以上所有都是假设值,此处用于演示目的。

以下是一个MIP模型,可用于解决您的问题:


LpSolve设计用于解决这样的模型。请注意,这与背包问题并不十分接近。

您可以将其表述为MIP(混合整数程序)。我相信开源解算器LpSolve有一些PHP绑定。@ErwinKalvelagen感谢您给我指出这一点。我已经看过LpSolve,它确实有一个PHP选项,但我不想撒谎,我不知道如何转换我的问题中包含的示例谢谢@ErwinKalvelagen。我不会撒谎,但那可能是我一时糊涂。在研究如何将其转换为实际解决方案之前,我将花一些时间熟悉LpSolve。谢谢你的帮助!