2016-11-16 147 views
0

我使用Gurobi 7使用Python 2.7,並希望實現以下線性優化問題:Gurobi與Python字典鍵值錯誤

enter image description here

我曾嘗試使用下面的代碼翻譯上面Python和Gurobi :

T = range(1,17520) 
    # Create variables - defined as dictionaries 
    p = {} # power 
    s = {} # SOC 
    b = {} # buy 

    for t in T: 
     p[t] = m.addVar(vtype = GRB.CONTINUOUS, lb = -R, ub = R, name = "power_{}".format(t)) 
     s[t] = m.addVar(vtype = GRB.CONTINUOUS, lb = 0, ub = E, name = "SOC_{}".format(t)) 
     b[t] = m.addVar(vtype = GRB.CONTINUOUS, lb = 0, name = "Buy_{}".format(t))         

    # constraints 
    for t in T: 
     m.addConstr(b[t] == demand[t] + p[t], name = "balance_{}".format(t)) 
     if t == 0: 
      m.addConstr(s[t] == p[t], name = "charge_{}".format(t)) 
     else: 
      m.addConstr(s[t] == s[t-1] + p[t], name = "charge_{}".format(t)) 

    # integrate variables and constraints 
    m.update() 

    # Objective function 
    obj = quicksum(
     b[t]*SBP[t] 
     for t in T 
    ) 
    m.setObjective(obj,GRB.MINIMIZE) 

    # start optimization 
    m.optimize 

我得到的錯誤信息(如下所示)可能是由於[t-1]索引;但我不明白爲什麼這不被編譯器接受。我需要以不同的方式定義這個約束嗎?

error message

我還沒有發現被這種結構所定義的gurobi優化問題的任何其它實施例中(變量是前述變量的功能等),但是這是用於LP問題一個非常典型的結構。

任何幫助,您可以提供非常感謝。

回答

0

OK事實證明我對Python的零索引感到困惑;我已定義的集合T作爲從1至17520的範圍,但我隨後通過定義所述一組T作爲

T = range(0,17519) 
定義在0

我的問題索引被固定變量的約束