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

用餐计划算法?

谢墨竹
2023-03-14

假设我有一个食物数据库,每个食物都含有一定量的脂肪、碳水化合物和蛋白质。例如,假设我有一个数据库

Item          Fat         Carbs         Protein
================================================
Milk           12           36             8
Chicken         1           12            18
Juice           0           50             2
Bacon           9            1             4

什么是一个有效的算法来确定这些食物的哪些组合符合一定范围的脂肪、碳水化合物和蛋白质,并且每种食物都可以多次使用?

比如,如果我想要一个脂肪含量在20-30、碳水化合物含量在170-190、蛋白质含量在100-110之间的组合,那么2杯牛奶、5只鸡、1杯果汁和0份培根将是一个可能的解决方案,0杯牛奶、5只鸡、2份果汁和2份培根也是一个可能的解决方案。

如果算法在遇到一个可能的解决方案时停止运行也可以,但我希望它不是一个确定性算法,因此下次运行时,可能会找到另一个解决方案。

这个问题听起来像一个NP难问题,就像子集和问题或背包问题,我已经研究了这些问题的算法,但我不理解多约束问题的算法。背包问题也在优化,而这里没有优化。

我想如果数据库中有更多的项,这个问题会困难得多,如果解决方案不限于整数(如0.2牛奶),这个问题会更容易(找到适合约束的单个解决方案)。

我计划在Python中加入类似的内容,因此Python解决方案将受到赞赏,谢谢。

共有2个答案

甘君之
2023-03-14

即使你只有一种营养素(例如单独的蛋白质)需要担心,你的问题至少和允许重复的子集总和一样困难,因为无论你希望你的范围是什么,你都可以将目标总和乘以正整数倍,然后定义到下一个倍数减1的范围,类似地将你集合的所有数字乘以相同的正整数,再加上1,如果你能用一个特定的范围解决你的问题,你就能得到你能解决的子集和。

你可以使用整数线性规划来解决你的问题,让变量席表示你将包含多少个项目,然后有约束。

Fmin <= F1*X1 + F2*X2 + ... + Fn*Xn <= Fmax

其中Fi是第1项中的脂肪量,[Fmin,Fmax]是允许的脂肪范围。每个席也需要约束

C1*X1 + C2*X2 + ... + Cn*Xn

最小化或最大化,其中Ci为常量。通过更改Ci,可以获得不同的有效解决方案。获得所有有效的解决方案,甚至更弱的解决方案,计算有效解决方案的数量,是一个困难得多的问题。

王庆
2023-03-14

如果数学规划目前太难,也许可以从随机爬山者开始。

您描述的这个问题让人想起混合问题。这里有一个我发现的迷你锌溶液(一个玩具例子)。

 类似资料:
  • 当我尝试构建项目时。生成失败,出现以下消息。 我看到了两个类似的问题,并尝试了答案中提到的一切。 我尝试过的事情。

  • 我得到以下错误,我不知道为什么。我在多个环境中设置了我的项目,从来没有任何问题,但最近我将项目添加到运行Windows8的环境中,所有的东西都设置正确(例如Maven...),我似乎得到了这个问题 删除.m2存储库,Maven->Update Project... 删除所有文件,Maven->Update project... 更新项目时尝试选择“强制更新快照/发布” 有人对我可以尝试的东西有其他

  • 我使用的是日食火星-2。我想在窗口中创建一个新的mavenSpring启动项目。但是我遇到了这样的错误 任何人都可以帮我解决这个问题吗?

  • 问题内容: 想象一下设有 分支机构的 教育中心。该教育中心的 课程 对所有分支机构都是通用的。 分行 *管理员生成的每个课程的每个分支中的 *房间 。例如,管理员输入数学课程的房间数。系统生成3个房间。换句话说,它们受到计数的限制。 每个房间每天有5个可用的教学时间。换句话说,每个教学小时(共5个)将有1个不同的学生组。 学生 -也按分支分组。每个学生都喜欢按周计划()上中学。 一周的1、3、5天

  • 你遇到最有挑战的事是什么,你是怎么克服的? 你的性格描述一下 如何处理别人的不同意见? 你的优势是什么?为什么选择你? 外语怎么样,能接受外语工作吗? 电商大促的时候需要加班,可以接受吗? 你上段实习的氛围怎么样?你觉得大厂是什么氛围? 话说这还是我第一次正儿八经的hr面,全程憋笑,感觉特逗 #阿里巴巴信息集散地##面经#

  • 一直在问简历上的实习,项目,论文,大模型在推荐的运用。考了两个八股。没写代码题。 面试官一副心不在焉的样子,感觉不是很有诚意 #阿里巴巴信息集散地#