我不明白为什么你最小化值(cfg ['items'] [i] [2] = value)。你想要最高的价值。
你的模型类似于背包。只有您将为成本(低于总成本)和标记(总标志大于5)添加额外约束。另外,你说你会选择20项。但您的约束限制为15项(最大项目)。
OR工具页面详细解释了bin包装标题下的背包问题。
我想你编辑了你的问题。 “is_blue”属性只需要一个约束。但现在你的模型有不同的问题。
如果列出成本名称为“成本”,则您的约束必须更改,因为您使用“成本”命名列表。
for in in range(num_recipes): solver.Add(x [i] * costs [i]< = max_cost) 此外,我从这个约束中理解,max_cost是为每个项目定义的,而不是为成本总和定义的。
这是你的目标功能。
solver.Maximize(solver.Sum([profits[i] * x[i] for i in range(total_chosen)]))
但是你只将前20项添加到目标函数中。您需要使用MAX_ITEMS更改total_chosen。如:
solver.Maximize(solver.Sum([profits[i] * x[i] for i in range(MAX_ITEMS)]))
最后一个is_blue约束。我知道你要选择至少5个蓝色项目。
blues = [x[3] for x in items] solver.Add(solver.Sum([blues[i] * x[i] for i in range(MAX_ITEMS)]) >= 5)