设定未在Pyomo中初始化

时间:2019-02-20 18:57:59

标签: python pyomo

我正在尝试通过以下方式在Pyomo中定义一组变量:

def initA ( i , model ):
   for i in range(p)
      yield -1

def initB ( i , model ):
   for i in range(p)
      yield random.randrage(-999999, 999999)

# variables
model.A = Set()
model.B = Set()
model.a = Var(model.A, within=IntegerSet, bounds=(-1,1), initialize=initA)
model.b = Var(model.B, domain=Reals, initialize=initB)

我使用Pyomo的打印功能来验证套印,我得到了:

a : Size=0, Index=A
  Key : Lower : Value : Upper : Fixed : Stale : Domain
b : Size=0, Index=B
  Key : Lower : Value : Upper : Fixed : Stale : Domain

当我尝试求解模型时,出现此错误:

ERROR: Rule failed when generating expression for objective OBJ: KeyError:
"Index '1' is not valid for indexed component 'a'"

创建变量集时是否缺少某些内容?

1 个答案:

答案 0 :(得分:0)

在初始化函数中不需要内部for循环。此外,模型必须是这些函数中的第一个参数:

def initA(model, i):
   return -1

def initB(model, i):
   return random.randrage(-999999, 999999)

# variables
model.A = Set()
model.B = Set()
model.a = Var(model.A, within=IntegerSet, bounds=(-1,1), initialize=initA)
model.b = Var(model.B, domain=Reals, initialize=initB)