[英]Tried creating binary decision variable in place of conditional if statement in Gurobi. Getting constraint error
我遵循了所有現有的討論帖子和有關如何在 Gurobi 中編寫條件約束的說明。 我不知道為什么會收到此錯誤。
GurobiError: Constraint has no bool value (are you trying "lb <= expr <= ub"?)
請參閱以下來自 python 腳本的代碼片段:
b = {}
gap = {}
for k in range(start_yr,end_yr):
for i in multi_df:
reduction[start_yr,i] = 0
reduction[k+1,i] = 0
for j in range(len(multi_df[i]['COMPLIANCE'])):
for u in multi_df[i]['utilities']:
reduction[k+1,i] += td_matrix[i,j,k]*multi_df[i]['COMPLIANCE']['CO2 reduction (Tons CO2e)'].iloc[j]*(multi_df[i]['utilities'][u]['tCO2_per_dict'][k]/multi_df[i]['utilities'][u]['tCO2_per_dict'][start_yr])
multi_df[i]['annual_total2'] = {}
multi_df[i]['annual_total2'][str(k)] = m.addVar(vtype=gp.GRB.CONTINUOUS, name="x")
multi_df[i]['annual_total2'][str(k)] = multi_df[i]['annual_total'][str(k)]-sum(reduction[k,i] for k in range(start_yr,k))
m.addConstr(multi_df[i]['annual_total2'][str(k)], gp.GRB.GREATER_EQUAL,0)
b[k,i] = m.addVar(vtype=gp.GRB.BINARY, name='b')
gap[k,i] = m.addVar(lb=0,vtype=gp.GRB.CONTINUOUS,name='gap')
M = 15000
m.addConstr(multi_df[i]['annual_total2'][str(k)] >= multi_df[i]['SQFT']*(em_fac[k]) - M*(1-count_tax[k,i]))
m.addConstr(multi_df[i]['annual_total2'][str(k)] <= multi_df[i]['SQFT']*(em_fac[k]) + M*count_tax[k,i])
gap[k,i] = b[k,i]*(multi_df[i]['annual_total2'][str(k)] - multi_df[i]['SQFT']*(em_fac[k]))*cost
我的 2 個 Big M 約束導致以下行出現上述錯誤:
m.addConstr(multi_df[i]['annual_total2'][str(k)] >= multi_df[i]['SQFT']*(em_fac[k]) - M*(1-count_tax[k,i]))
我最初嘗試使用基本的 if else 語句,但遇到了 gurobi 錯誤,說我必須 go 這條大 M 路線。
您的代碼很難閱讀 - 請按照評論中的建議重新制定並發布MRE 。
我懷疑multi_df[i][...][...]
已經包含一個線性表達式,而不僅僅是包含一個 Gurobi 變量。 因此,關於一個約束中有多個<=
或>=
的警告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.