2016-11-16 121 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

我的问题索引被固定变量的约束