[英]IBM CPLEX Optimization Studio OPL doesn't respect constraints?
[英]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歲了,但我還是要回答,因為這是一個普遍的問題。
您不能在forall
或if
語句的條件中使用決策變量。 但是,您可以通過邏輯約束來實現所需的功能。 在您的情況下,您需要的是“隱式”約束(使用“ =>”運算符):
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.