簡體   English   中英

嘗試創建二進制決策變量來代替 Gurobi 中的條件 if 語句。 獲取約束錯誤

[英]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.

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