簡體   English   中英

將求解器 GRG 非線性 function 轉換為 PuLP

[英]Transform Solver GRG Nonlinear function into PuLP

我的任務是將求解器中使用的 GRG 非線性問題轉換為 python。 由於我沒有使用 NLP 的經驗,因此我正在嘗試將其轉換為 LP 問題。

我們有 12 個變量代表一年中每月產生的太陽能發電量,以及 12 個代表每月電網消耗的常數。 目標是最大化十二個變量的總和。 在紙漿中,我們用以下方式表示這些變量:

problem = LpProblem("Test_Problem", LpMaximize)
grid_consumption = [190, 409, 273, 424, 351, 412, 360, 509, 280, 241, 263, 175]
total_grid_consumption = sum(consumo_odf)
fv_productions = LpVariable.dicts('fv', list(range(12)))

有五個約束,一些顯式依賴於變量,一些隱式依賴。

例如,其中一個約束條件是太陽能發電量不能大於電網消耗量,這是一個常數。 在 PuLP 中,我們以這種方式表示此約束:

for i in range(12):
    fv_i - grid_consumption[i] <= 0

讓我們頭疼的約束之一是,1/3 的自我消耗必須大於補償能量。 如果電網消耗低於太陽能發電量 (fv_i),則每月自用電量等於電網消耗量,否則將等於太陽能發電量:

for i in range(12):
    if(fv_i>grid_consumption[i]):
        self_consumption[i] = grid_consumption[i]
    else:
        self_consumption[i] = fv_i

Excel Solver 對此約束沒有問題,但我們不知道如何將其轉換為 PuLP 約束。 歡迎任何幫助。 這是我的第一個問題,所以如果我可以提供更多信息,請告訴我。 謝謝。

好的,所以我設法解決了它。 原來我不得不再添加兩個約束:

for i in range(12):
    self_consumption[i] <= grid_consumption[i]
    self_consumption[i] <= fv_i

由於它是一個最大化類型的問題,每個變量的值將低於電網消耗和太陽能發電量之間的最小值。

暫無
暫無

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

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