簡體   English   中英

懲罰 Python 紙漿優化 function 因為決策變量偏離特定常數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM