当前位置: 首页 > 知识库问答 >
问题:

背包有4个约束

史逸春
2023-03-14

我试图找出一个有四个约束的背包的逻辑。我想做一个程序,你输入你想在一餐中摄入的卡路里、脂肪、碳水化合物和蛋白质,它会在一个可能的食物列表中查找符合输入标准的最接近的食物组合。

示例

我有这些东西

  • 4盎司牛肉(231卡路里,15克脂肪,0克碳水化合物,22克蛋白质)
  • 1/2杯燕麦粥(260卡路里,2克脂肪,58克碳水化合物,10克蛋白质)
  • 1/2杯黑豆(120卡路里,.5克脂肪,23克碳水化合物,7克蛋白质)
  • 1根香蕉(105卡路里,0克脂肪,27克碳水化合物,1克蛋白质)
  • 1/2杯白干酪(110卡路里,5克脂肪,6克碳水化合物,11克蛋白质)
  • 1/2杯全麦面食(200卡路里,1克脂肪,40克碳水化合物,8克蛋白质)

我的目标是消耗745卡路里,

我见过很多背包问题的实现,但我从未见过有4个约束的背包问题。我的问题是这是否可行。你能为我的程序找到正确的算法吗?非常感谢。

共有1个答案

姜德泽
2023-03-14

这是基本的线性规划。你应该看看这些类型问题的解决方案。在微软世界中,解决者基金会将解决这个问题。您还可以玩Excel求解器,以交互方式完成它。

还有很多开源解决方案。如果您喜欢自己编写代码,并且需要一个通用的解决方案,请使用数组数学,您将求解一个不等式方程组。这样可以处理N个约束和Y个变量。

 类似资料:
  • 这就是古老而著名的背包问题:背包问题 这里我有一个有约束的背包问题。 我有一个大小为W=100000000和N=100项的背包,我为它写了动态解。我的算法复杂度为,这在时间和空间上都太大了,但这里有一个条件,所以如果我的背包大小超过50000,我的项的最大值是有限的。 所以现在我想知道如何用这个条件我认为背包问题取决于背包的大小和物品的数量,那么物品的值如何才能改变我的算法呢?

  • 假设我有一个表示篮球运动员及其姓名、位置、费用和预计得分的元组列表,

  • 1.【强制】 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可。 2.【强制】 所有的覆写方法,必须加@Override 注解。 说明: getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override 可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。 3.

  • 1.【强制】 在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。 说明: 使用 * 会增加查询分析器解析成本,大大降低查询效率。 2.【强制】 根据 开发总则第4条 ,在考虑性能和维护成本的权衡的时候,需要优先代码的健壮性和易读性, 所以我们推荐为每个复杂的数据表建一个数据模型,不推荐使用数组作为所有表的通用数据模型,毕竟通过数据并不能看出数据模型的结构。

  • 到目前为止,我的想法是生成一个超重的背包,然后递归地向后工作,一次替换一个项目,直到它<=最大重量。对于生成最优背包来说,这不是一个问题,然而,我真的想生成以下100个左右的背包。我想我可以通过继续我的递归过程来做到这一点,然而,我觉得这并不完全准确,因为a可能缺少稍微更优化的背包。

  • 我有一个项目清单,每个项目都有一个价格--或者就背包问题而言,一个重量。可购买物品的数量只受预算的限制,所以只要总花费不超过某个常数,就有可能购买尽可能多的物品。我也有一个算法,它基于某些变量,告诉每一个项目的利润(即每一个项目的价值)。所以基本上,我有一个有界背包问题,额外的条件是每个物品中有一个以上适合背包。 我想在这些条件下使利润最大化。我知道没有一个有效的解决方案,但至少有一个可行的方案吗