簡體   English   中英

Python中如何創建動態求解器(優化函數)

[英]How to create a dynamic solver (optimization function) in Python

現在,我有一個關於動態約束的問題。 我有原價,但我需要檢查他們是否遵守商業規則,當有違規時,我會更改價格,但我希望總的絕對變化最小。

我的表列如下所示:

  • 項目:字符串
  • 尺寸:浮動
  • Total_Amount:整數
  • 原始價格:浮動
  • Optimal_Price:Float(空白,因為這是決策變量)
  • D1(空白但有公式可以得到它)
  • D2(相同)
  • 絕對(空白,這是決策變量也是目標列)

這是我的問題:

  • 決策變量:
  1. 最優價格
  2. absolute_value(不過這還是線性的function,請看下文)
  • 目標:最小化 Absolute_value 的總和。 總和(絕對值)
  • 約束:
  1. 絕對值 >= Difference_1
  2. 絕對值 >= Difference_2
  3. 最優價格 >= 0
  4. 同款商品,大碼優價>=小碼優價
  5. 同樣尺寸,物品也有價格規則

現在,我正在嘗試實現前三個約束。 我可以在 Excel 中輕松執行此操作,但很難將其移動到 Python。

這是問題所在,我嘗試計算 Difference_1 和 Difference_2,但它需要我將決策變量(即最優價格)帶入 function。Function 如下:

  • Difference_1 = (original_price - optimal_price)*total_amount
  • Difference_2 = (optimal_price - original_price)*total_amount

為什么我們這樣做是為了獲得線性解決方案而不是使用絕對值 function。

我嘗試使用 pulp 創建此優化 function,但是當我嘗試將 LpVariable 添加到差異計算中時,

for i in range(df.shape[0]):
    D1[i] = (Opt_Price[i]-df['Original_Price'][i])*df['Total_Amount'][i]
    D2[i] = (df['Original_Price'][i]-Opt_Price[i])*df['Total_Units'][i]

它說

TypeError: 'LpVariable' object is not subscriptable

我也試過這個:

D1 = (Opt_Price-df['Original_Price'])*df['Total_Amount']
D2 = (df['Original_Price']-Opt_Price)*df['Total_Amount']

提前致謝!

看起來您將Opt_Price單個 LpVariable,而不是包含它們的字典。 使用LpVariable.dicts從鍵列表中創建變量字典是非常標准的,如下所示:

Opt_Price = LpVariable.dics("optprices", range(df.shape[0]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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