C# 必须满足多个条件的组合优化
我们是一群学习计算机科学的一年级学生 我们正在进行一个名为“电子饮食计划”的项目(直接翻译) 我们想用C语言编制一个程序,在每周的基础上计算一个饮食计划,以满足以下标准: 你每天的能量摄入不应该超过计算出的卡路里需求量。 (例如,如果我们计算一个人每天应该摄入2000卡路里,那么饮食计划应该计划大约2000卡路里) 每日能量(卡路里)的分配如下:C# 必须满足多个条件的组合优化,c#,algorithm,C#,Algorithm,我们是一群学习计算机科学的一年级学生 我们正在进行一个名为“电子饮食计划”的项目(直接翻译) 我们想用C语言编制一个程序,在每周的基础上计算一个饮食计划,以满足以下标准: 你每天的能量摄入不应该超过计算出的卡路里需求量。 (例如,如果我们计算一个人每天应该摄入2000卡路里,那么饮食计划应该计划大约2000卡路里) 每日能量(卡路里)的分配如下: 肥胖25-35% 碳水化合物50-60% 蛋白质10-20% 我们有一个“数据库”,里面有食物以及食物中含有多少脂肪、碳水化合物和蛋白质+大概的价
- 肥胖25-35%
- 碳水化合物50-60%
- 蛋白质10-20%
我们希望你们中的一些人能帮助我们找到一个好的算法。当涉及到寻找“最便宜”的解决方案而不是“最好”时,你只需要重新定义“便宜” 在优化理论中,人们经常提到要最小化的成本函数——在你的例子中,“成本”可以是“脂肪百分比与30%的差异”,也就是说,吃30%的脂肪不需要任何成本,吃20%的脂肪与吃40%的脂肪同样需要成本。当然,为了使这个方法更加复杂,你可以称一下,这样吃太多的脂肪比吃太少的脂肪更“昂贵” 现在,如梅拉莫克在评论中指出的那样,如果你为你的每一个标准创造成本,你还必须将它们综合起来权衡;为此,只需计算加权总成本。您将得到如下结果: 饮食成本=(价格的重要性)*价格+(时间的重要性)*时间+(脂肪的重要性)*(偏离脂肪目标)+等等 如果你想让它不可能超出预算(花费的钱),你可以添加一些术语,如
超出预算?infinity:0
使算法在预算内找到解决方案。你也可以对重复吃饭等做出限制——或多或少是你的想象力(和计算能力)设定了限制
既然你有了一个成本函数,你就可以着手解决这个问题了:最小化饮食成本。突然之间,所有那些寻找“最便宜”解决方案的算法都变得有意义了……;)
请注意,制定此成本函数通常是困难的部分。根据你如何衡量你的成本,你会发现问题的解决方案非常不同;并非所有的方法都有用(事实上,大多数方法可能不会有用)。好吧,你尝试过什么?有些方法你必须定义,与算法无关。约束的优先级是什么?例如,满足预算或满足卡路里限制更重要吗?你需要离边界有多近?你能过去吗,还是一定要在下面?如果数据库中没有满足给定约束集的解决方案呢?您是否只返回“最佳”解决方案?如何定义一组紧密匹配中的“最佳”解决方案?@mellamokb从外观上看,成本不是一个约束,而是一个要最小化的值。其他因素是约束,但不是要最小化的因素。因此,一种可能的(但公认的幼稚且可能低效的)算法是生成配方的所有排列,按价格排序(升序),然后删除所有不符合给定标准的组合。对于OP,我建议将我刚才描述的编码作为基线。这是最容易编码的。如果你不能足够快地计算(由于太多的食谱),那么你就有一些东西可以测试/比较其他算法。当你的脂肪/碳水化合物/蛋白质限制被违反时,你可以分配一个天文数字的成本。这样,您仍然只有一个成本需要最小化;例如,可能要求它是连续的和/或可微的。你必须相应地调整你的体重等。