【问题标题】:No value for uninitialized NumericValue object for a Variable[t]- Pyomo变量 [t] 的未初始化 NumericValue 对象没有值 - Pyomo
【发布时间】:2020-11-03 19:44:49
【问题描述】:

我是 Pyomo 的新手,并试图找到一种方法来优化我的电池算法,其中未定义电池容量 (Smax) 和逆变器尺寸 (Rmax)。

我的目标是找到最小化电池总充电成本的 Smax 和 Rmax 组合。

但我收到此错误: "未初始化的 NumericValue 对象 Ein[0] 没有值"

这是我的代码:

############################################## ######################

       model = ConcreteModel()

       # Define model parameters
       model.T = Set(doc='hour of the period', initialize=df.hour.tolist(), ordered=True)
       model.Rmax = Var( within=PositiveIntegers )
       model.Smax = Var( within=PositiveIntegers )
       model.Ein = Var(model.T, bounds = (0, None))   " Energy charged in battery at period t"
       model.Eout = Var(model.T, bounds = (0, None))   "Energy discharged from battery at period t"
       model.Z = Var(model.T, bounds = (0, None))   "Energy stored in battery at the end of the hour 
       model.L = Var(model.T)  "Energy bought from the grid at every period t"


   # DEFINE ALL CONSTRAINTS OF THE MODEL

   "Initial storage state = 0 and constraint on SOC flow"

   def storage_state(model, t):
       if t == model.T.first():
          return model.Z[t] == 0
       else:
          return (model.Z[t] == (model.Z[t-1] + (model.Ein[t]) - (model.Eout[t])))    
                     
   model.charge_state = Constraint(model.T, rule=storage_state)


   "Max SOC constraint" 
   def SOC_maxconstraint(model, t):
         return model.Z[t] <= model.Smax
   model.SOC_maxconstraint = Constraint(model.T, rule=SOC_maxconstraint)


   "Min SOC constraint"   
   def SOC_minconstraint(model, t):
        return model.Z[t] >= 0
   model.SOC_minconstraint = Constraint(model.T, rule=SOC_minconstraint)


   "Maximum dischage within a single hour"
   def discharge_constraint(model, t):
        return model.Eout[t] <= model.Rmax
   model.discharge = Constraint(model.T, rule=discharge_constraint)

   "Maximum charge within a single hour"   
   def charge_constraint(model, t):
        return model.Ein[t] <= model.Rmax
   model.charge = Constraint(model.T, rule=charge_constraint)


   "Limit discharge to the amount of the charge in the battery"
   def positive_charge(model, t): 
        return model.Eout[t] <= model.Z[t] 
   model.positive_charge = Constraint(model.T, rule=positive_charge)


  "Demand of energy constraint"
  def demand_constraint(model, t):
        return (model.L[t] == (df.loc[t, 'MktDemand'] + (model.Ein[t]) - (model.Eout[t]))) 
  model.demand_constraint = Constraint(model.T, rule=demand_constraint)


  "Non-negativity of total demand"
  def negativity_demand_constraint(model, t):
       return model.L[t] >= 0
  model.negativity_demand_constraint = Constraint(model.T, rule=negativity_demand_constraint)



  ## Objective function 

  original_costs = sum(df.loc[t, 'TOU'] * df.loc[t, 'MktDemand'] for t in model.T)

  model.costs = sum(df.loc[t, 'TOU'] * (df.loc[t, 'MktDemand'] + (model.Ein[t]) - (model.Eout[t])) 
  for t in model.T)

  model.objective = Objective(expr=model.costs, sense=minimize)

  results = SolverFactory('glpk').solve(model)




  print("Profits % =", round((model.objective() / original_costs ) * 100,2))
  print("Smax:", model.Smax.get_values().values())
  print("Rmax:", model.Rmax.get_values().values())

我得到:

  pyomo\core\expr\numvalue.pyx in pyomo.core.expr.numvalue.value()

  ValueError: No value for uninitialized NumericValue object Ein[0]

你们知道我做错了什么吗?

谢谢!

【问题讨论】:

    标签: python pyomo glpk


    【解决方案1】:

    通常这意味着您的求解器没有得到结果。所以基本上如果这是错误,你的模型是不可行的。

    也许尝试使用 tee=True 查看求解器信息。

    求解器 = SolverFactory('glpk')

    结果 = solver.solve(model,tee=True)

    如果它表明您的模型不可行,则说明您的约束、界限或其他方面存在问题(我没有查看方程式)

    【讨论】:

    • 我计算了:solver = SolverFactory('glpk') results = solver.solve(model,tee=True) 我得到了这个错误信息:错误:基矩阵对于工作精度来说是奇异的(cond = 4.9e+31) glp_intopt:无法解决 LP 松弛 使用时间:84.2 秒 使用内存:67.6 Mb (70896367 字节) 将 MIP 解决方案写入 'C:\Users\ADMINI~1\AppData\Local\Temp\tmpci7_50co.glpk.raw '... 写了 105133 行
    • 您是否尝试过使用其他求解器?例如 cbc,如果您已将其安装在您的计算机上。或者,如果不尝试使用 Neos 服务器 Cplex 求解器:“results = SolverManagerFactory('neos').solve(modele,opt='cplex',tee=True)”
    【解决方案2】:

    您要构建 ESS 模型吗?我是说储能系统。

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多