【发布时间】:2013-04-18 03:46:03
【问题描述】:
我们是一群学习计算机科学的一年级学生。
我们正在做一个名为“电子饮食计划”(直译)的项目
我们想用 C# 编写一个程序,每周基本计算一个完全/满足某些标准的饮食计划:
您的每日能量摄入量不应超过计算的卡路里需求。 (例如,如果我们计算一个人每天应该摄入 2000 卡路里,那么饮食计划应该计划大约 2000 卡路里)
每天的能量(卡路里)应该分配如下:
- 脂肪 25-35%
- 碳水化合物 50-60%
- 蛋白质 10-20%
我们有一个“数据库”,其中包含食物以及其中包含多少脂肪、碳水化合物和蛋白质 + 大概价格。 我们有一个“数据库”,其中包含食谱以及烹饪所需的时间。
SO:我们想要制作一个程序,每周计算一个满足日常能量需求的良好饮食计划(以及它应该如何分配(脂肪、碳水化合物、蛋白质))。该计划还应该计划一个不采取的饮食计划 花费大量时间且成本不高(用户定义了一周价格的上限)。
SO.. 我们希望帮助找到一种方法/算法,该方法/算法可以每天组合 3-6 道菜来满足这一点^^ 我们一直在研究很多组合优化算法/问题,但主要是“背包问题”。
但这些算法/问题只是满足一个标准或试图找到“最便宜”的解决方案。 -> 我们想要满足很多标准,想要找到最好的解决方案(不是最便宜的……例如脂肪必须在 25-35% 之间,而不仅仅是最低值)
我们希望你们中的一些人可以通过一个好的算法帮助我们。
【问题讨论】:
-
嗯,你试过什么?
-
有些东西你必须定义,它们与算法无关。您的约束的优先级是什么?例如,满足预算更重要还是满足卡路里限制更重要?你需要离边界多近?你可以过去,还是必须在下面?如果数据库中没有满足给定约束集的解决方案怎么办?您是否只返回“最佳”可能的解决方案?您如何定义一组紧密匹配中的“最佳”解决方案?
-
@mellamokb 从表面上看,成本不是约束,而是最小化的值。其他因素是约束,但不是要最小化的因素。因此,一种可能的(但诚然幼稚且可能效率低下)的算法是生成食谱的所有排列,按价格排序(升序),然后删除所有不符合给定标准的组合。对于 OP,我建议对我刚刚描述为基线的内容进行编码。这是最容易编码的。如果您不能足够快地计算(由于配方太多),那么您可以测试/比较其他算法。
-
当您的任何脂肪/碳水化合物/蛋白质限制被违反时,您可以分配一个天文数字。这样一来,您仍然只需将一项成本降至最低。