簡體   English   中英

IBM Optimization Studio CPLEX OPL有問題嗎?

[英]Issue with IBM Optimization Studio CPLEX OPL?

我使用IBM Optimization Studio CPLEX(OPL)開發了一個程序,我試圖這樣做:

 If (P_p(t) >= (P_L(t))/(Einv ))

 Pb(t) = Pb0+(Eb_c/3600)*(Pp(t)-P_L(t))/Einv)

 t Є {t0,t0+1,,t0+nΔt} , Δt: step time

我做了這樣的事情:

maximize ....

subject to {
....

forall(j in NH: Pp[j] >= Pl[j]/Einv)
Pb[j] == Pb0 + (Eb_c/3600)*(Pp[j]- Pl[j]/Einv);

...
}

這給了我這個錯誤:“不允許使用決策變量(或表達式)”,我嘗試了很多解決方案,但是它不起作用,我在任何文檔,表達式或執行方法中都找不到的問題? !

編輯

但是我沒有什么要解釋的,我在主題中編寫的第一篇代碼應該使用Studio CPLEX創建。

我試圖使系統產生的功率成本最小化,所以在此期間,我必須在時段T內每次仿真時檢查一個if條件,如果if條件正確,則執行下一行代碼,否則會傳遞給Pb(t)的另一個值嗎?

問題是如果條件和內部受制於內部使用采樣時間T!

盡管這個問題已經3歲了,但我還是要回答,因為這是一個普遍的問題。

您不能在forallif語句的條件中使用決策變量。 但是,您可以通過邏輯約束來實現所需的功能。 在您的情況下,您需要的是“隱式”約束(使用“ =>”運算符):

forall(j in NH) {
   (Pp[j] >= Pl[j]/Einv) => (Pb[j] == Pb0 + (Eb_c/3600)*(Pp[j]- Pl[j]/Einv));
}

僅當左側為true時,才強制使用“ =>”運算符的右側。

暫無
暫無

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

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