必须满足若干条件的组合优化

本文关键字:组合 优化 条件 满足 | 更新日期: 2023-09-27 18:09:36

我们是一群学习计算机科学的一年级学生。

我们正在进行一个名为"电子饮食计划"的项目(直接翻译)

我们想用c#编写一个程序,在每周基本计算一个饮食计划,满足一些标准:

每日能量摄入不应超过计算出的卡路里需求。(例:如果我们计算一个人每天应该摄入2000卡路里,那么饮食计划应该计划大约2000卡路里)

每日能量(卡路里)应按以下方式分配:

  • 脂肪25 - 35%
  • 碳水化合物50 - 60%
  • 蛋白质10 - 20%

我们有一个食物的"数据库",里面有食物所含的脂肪、碳水化合物和蛋白质的含量+大约的价格。我们有一个"数据库",里面有食谱和烹饪所需的时间。

SO:我们想做一个程序,每周计算一个良好的饮食计划,以满足每天的能量需求(以及它应该如何分配(脂肪,碳水化合物,蛋白质))。该计划还应该制定一个不需要的饮食计划时间长,成本低(用户为每星期的价格定义了一个上限)。

. .我们希望找到一种方法/算法,可以每天组合3-6道菜,满足这一点^^我们已经研究了很多组合优化算法/问题,但主要是"背包问题"。

但这些算法/问题只满足一个标准或试图找到"最便宜"的解决方案。->我们希望满足很多标准,并希望找到最好的解决方案(而不是最便宜的…例如,脂肪必须在25-35%之间,而不仅仅是最低值)

我们希望你们中的一些人可以帮助我们找到一个好的算法。

必须满足若干条件的组合优化

当涉及到寻找"最便宜"而不是"最好"的解决方案时,你只需要重新定义"便宜"。

在优化理论中,人们通常指的是成本函数,这是要最小化的-在你的情况下,"成本"可以是"脂肪与30%的百分比差异",即吃30%的脂肪不需要花费任何成本,吃20%的脂肪和吃40%的脂肪一样多。当然,为了使这个方法更复杂,你可以称重,这样吃太多脂肪比吃太少脂肪更"昂贵"。

现在,如果您为每个标准创建成本,您还必须将它们一起权衡,正如mellamokb在评论中指出的那样;要做到这一点,只需计算加权总成本。您将得到如下内容:

饮食成本=(价格重要性)*价格+(时间重要性)*时间+(脂肪重要性)*(脂肪偏离目标)+等…

如果你想避免超出预算(花费的钱),你可以添加这样的条款
over budget ? infinity : 0,使算法在预算范围内找到解。你也可以限制吃饭的次数等等——这或多或少是你的想象力(和计算能力)设定的限制。

既然你有了一个成本函数,你就可以开始解决这个问题了:最小化饮食的成本。突然之间,所有那些寻找"最便宜"解决方案的算法都有意义了……;)


请注意,制定这个成本函数通常是困难的部分。根据你衡量成本的方式,你会找到非常不同的解决方案;并不是所有的都有用(事实上大多数可能都没用)。