[英]Penalize Python PuLP Optimization function as decision variable diverges from a specific constant
我正在努力最大化类似于PuLP 文档中提供的示例的混合问题。 但是,我想惩罚我的优化问题,因为我的一种成分与某个已知常数不同。 通过这种方式,我想强制求解器在诉诸于从设置的常量值更改我的关键变量之前更喜欢操纵其他决策变量(我也将其用作热启动中的起始值)。 我已经尝试修改目标 function 如下所示,但它似乎不起作用。 我意识到我需要添加一些额外的约束来基本上取牛肉百分比和基线之间差异的绝对值,但我不确定这是否是问题所在。 当我打印出问题时,基线与牛肉百分比不同。
PENALTY = -0.5
KEY_INGREDIENT='BEEF'
KEY_INGREDIENT_BASELINE=20
prob += lpSum([costs[i]*ingredient_vars[i] for i in Ingredients] +[PENALTY*(ingredient_vars[KEY_INGREDIENT] - KEY_INGREDIENT_BASELINE)])
您的方法是有道理的,但在目标中您需要使用差异的绝对值。 为了线性化绝对值,引入一个连续变量z
。 然后使用以下两个约束:
z >= ingredient_vars[KEY_INGREDIENT] - KEY_INGREDIENT_BASELINE
z >= -(ingredient_vars[KEY_INGREDIENT] - KEY_INGREDIENT_BASELINE)
此外,让PENALTY
为正值(-0.5 表示差异较大是好的)。
最后修改目标:
prob += lpSum([costs[i]*ingredient_vars[i] for i in Ingredients] + [PENALTY*z])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.