I'm working on an optimization model in python with the pyomo library. However I'm getting an error message in python that I cannot seem to understand. The code and error message is below. My code is
from pyomo.environ import *
from pyomo.opt import SolverFactory
import json
model = ConcreteModel()
with open('C:/Users/cindy/python/Pyomo/ADMM_Distributed_Pyomo/input_data.json') as f:
par = json.load(f)
# Declaro os parametros
model.P_PV = Param(initialize = par['P_PV'])
model.P_D = Param(initialize = par['P_D'])
model.P_SE = Param(initialize = par['P_SE'])
model.P_ESS_max = Param(initialize = par['P_ESS_max'])
model.E_ESS_max = Param(initialize = par['E_ESS_max'])
model.P_load_max = Param(initialize = par['P_load_max'])
model.E0 = Param(initialize = par['E0'])
model.delta = Param(initialize = par['delta'])
model.custo_venda = Param(initialize = par['custo_venda'])
model.custo_compra = Param(initialize = par['custo_compra'])
model.custo_load = Param(initialize = par['custo_load'])
model.rho = Param(initialize = par['rho'])
model.epsilon = Param(initialize = par['epsilon'])
model.iter = Param(initialize = par['iter'])
model.tol_lambda = Param(initialize = par['tol_lambda'])
model.tol_var = Param(initialize = par['tol_var'])
model.P_SE_in_1_param = Param(initialize = par['P_SE_in_1_param'])
model.P_SE_out_1_param = Param(initialize = par['P_SE_out_1_param'])
model.P_ESS_1_param = Param(initialize = par['P_ESS_1_param'])
model.E_ESS_1_param = Param(initialize = par['E_ESS_1_param'])
model.P_load_1_param = Param(initialize = par['P_load_1_param'])
model.P_SE_in_2_param = Param(initialize = par['P_SE_in_2_param'])
model.P_SE_out_2_param = Param(initialize = par['P_SE_out_2_param'])
model.P_ESS_2_param = Param(initialize = par['P_ESS_2_param'])
model.E_ESS_2_param = Param(initialize = par['E_ESS_2_param'])
model.P_load_2_param = Param(initialize = par['P_load_2_param'])
model.P_SE_in_3_param = Param(initialize = par['P_SE_in_3_param'])
model.P_SE_out_3_param = Param(initialize = par['P_SE_out_3_param'])
model.P_ESS_3_param = Param(initialize = par['P_ESS_3_param'])
model.E_ESS_3_param = Param(initialize = par['E_ESS_3_param'])
model.P_load_3_param = Param(initialize = par['P_load_3_param'])
model.lambda_P_SE_in_a = Param(initialize = par['lambda_P_SE_in_a'])
model.lambda_P_SE_out_a = Param(initialize = par['lambda_P_SE_out_a'])
model.lambda_P_ESS_a = Param(initialize = par['lambda_P_ESS_a'])
model.lambda_E_ESS_a = Param(initialize = par['lambda_E_ESS_a'])
model.lambda_P_load_a = Param(initialize = par['lambda_P_load_a'])
model.lambda_P_SE_in_b = Param(initialize = par['lambda_P_SE_in_b'])
model.lambda_P_SE_out_b = Param(initialize = par['lambda_P_SE_out_b'])
model.lambda_P_ESS_b = Param(initialize = par['lambda_P_ESS_b'])
model.lambda_E_ESS_b = Param(initialize = par['lambda_E_ESS_b'])
model.lambda_P_load_b = Param(initialize = par['lambda_P_load_b'])
model.lambda_P_SE_in_a_ant = Param(initialize = par['lambda_P_SE_in_a_ant'])
model.lambda_P_SE_out_a_ant = Param(initialize = par['lambda_P_SE_out_a_ant'])
model.lambda_P_ESS_a_ant = Param(initialize = par['lambda_P_ESS_a_ant'])
model.lambda_E_ESS_a_ant = Param(initialize = par['lambda_E_ESS_a_ant'])
model.lambda_P_load_a_ant = Param(initialize = par['lambda_P_load_a_ant'])
model.lambda_P_SE_in_b_ant = Param(initialize = par['lambda_P_SE_in_b_ant'])
model.lambda_P_SE_out_b_ant = Param(initialize = par['lambda_P_SE_out_b_ant'])
model.lambda_P_ESS_b_ant = Param(initialize = par['lambda_P_ESS_b_ant'])
model.lambda_E_ESS_b_ant = Param(initialize = par['lambda_E_ESS_b_ant'])
model.lambda_P_load_b_ant = Param(initialize = par['lambda_P_load_b_ant'])
#Declaracao das variaveis
model.P_SE_in_1 = Var(bounds = (0,None),within=NonNegativeReals) #Potência importada 1
model.P_SE_out_1 = Var(bounds = (0,None),within=NonNegativeReals) #Potência vendida 1
model.P_ESS_1 = Var(bounds = (None,None)) #Potência do BESS 1
model.E_ESS_1 = Var(bounds = (0,None),within=NonNegativeReals) #Energia do BESS 1
model.P_load_1 = Var(bounds = (0,None),within=NonNegativeReals) #Potência da carga controlada 1
model.P_SE_in_2 = Var(bounds = (0,None),within=NonNegativeReals) #Potência importada 2
model.P_SE_out_2 = Var(bounds = (0,None),within=NonNegativeReals)#Potência vendida 2
model.P_ESS_2 = Var(bounds = (None,None))#Potência do BESS 2
model.E_ESS_2 = Var(bounds = (0,None),within=NonNegativeReals)#Energia do BESS 2
model.P_load_2 = Var(bounds = (0,None),within=NonNegativeReals)#Potência da carga controlada 2
model.P_SE_in_3 = Var(bounds = (0,None),within=NonNegativeReals)#Potência importada 3
model.P_SE_out_3 = Var(bounds = (0,None),within=NonNegativeReals)#Potência vendida 3
model.P_ESS_3 = Var(bounds = (None,None))#Potência do BESS 3
model.E_ESS_3 = Var(bounds = (0,None),within=NonNegativeReals)#Energia do BESS 3
model.P_load_3 = Var(bounds = (0,None),within=NonNegativeReals)#Potência da carga controlada 3
#Declaro as funçoes objetivo
#Declaro a FO1
model.obj1 = Objective(expr = model.delta * model.custo_compra * model.P_SE_in_1
- model.delta * model.custo_venda * model.P_SE_out_1 + model.delta * model.custo_load*(model.P_load_max - model.P_load_3_param)
+ model.lambda_P_SE_in_a*(model.P_SE_in_1 - model.P_SE_in_2_param) + model.rho/2*(model.P_SE_in_1 - model.P_SE_in_2_param)**2
+ model.lambda_P_SE_out_a*(model.P_SE_out_1 - model.P_SE_out_2_param) + model.rho/2*(model.P_SE_out_1 - model.P_SE_out_2_param)**2
+ model.lambda_P_ESS_a*(model.P_ESS_1 - model.P_ESS_2_param) + model.rho/2*(model.P_ESS_1 - model.P_ESS_2_param)**2
+ model.lambda_E_ESS_a*(model.E_ESS_1 - model.E_ESS_2_param) + model.rho/2*(model.E_ESS_1 - model.E_ESS_2_param)**2
+ model.lambda_P_load_a*(model.P_load_1 - model.P_load_2_param) + model.rho/2*(model.P_load_1 - model.P_load_2_param)**2
+ model.lambda_P_SE_in_b*(model.P_SE_in_1 - model.P_SE_in_3_param) + model.rho/2*(model.P_SE_in_1 - model.P_SE_in_3_param)**2
+ model.lambda_P_SE_out_b*(model.P_SE_out_1 - model.P_SE_out_3_param) + model.rho/2*(model.P_SE_out_1 - model.P_SE_out_3_param)**2
+ model.lambda_P_ESS_b*(model.P_ESS_1 - model.P_ESS_3_param) + model.rho/2*(model.P_ESS_1 - model.P_ESS_3_param)**2
+ model.lambda_E_ESS_b*(model.E_ESS_1 - model.E_ESS_3_param) + model.rho/2*(model.E_ESS_1 - model.E_ESS_3_param)**2
+ model.lambda_P_load_b*(model.P_load_1 - model.P_load_3_param) + model.rho/2*(model.P_load_1 - model.P_load_3_param)**2)
#Declaro as restricões da FO1
model.r1 = Constraint(expr = model.P_SE_in_1 + model.P_PV == model.P_ESS_1 + model.P_D + model.P_SE_out_1 + model.P_load_1)
model.r2 = Constraint(expr = model.P_SE_in_1 <= model.P_SE)
model.r3 = Constraint(expr = model.P_SE_out_1 <= model.P_SE)
#Declaro a FO2
model.obj2 = Objective(expr = model.lambda_P_SE_in_a*(model.P_SE_in_1_param - model.P_SE_in_2)
+ model.rho/2*(model.P_SE_in_1_param - model.P_SE_in_2)**2
+ model.lambda_P_SE_out_a*(model.P_SE_out_1_param - model.P_SE_out_2) + model.rho/2*(model.P_SE_out_1_param - model.P_SE_out_2)**2
+ model.lambda_P_ESS_a*(model.P_ESS_1_param - model.P_ESS_2) + model.rho/2*(model.P_ESS_1_param - model.P_ESS_2)**2
+ model.lambda_E_ESS_a*(model.E_ESS_1_param - model.E_ESS_2) + model.rho/2*(model.E_ESS_1_param - model.E_ESS_2)**2
+ model.lambda_P_load_a*(model.P_load_1_param - model.P_load_2) + model.rho/2*(model.P_load_1_param - model.P_load_2)**2)
#Declaro as restricões da FO2
model.r5 = Constraint(expr = model.E_ESS_2 == model.E0 + model.delta * model.P_ESS_2)
model.r6 = Constraint(expr = -1*model.P_ESS_max <= model.P_ESS_2)
model.r7 = Constraint(expr = model.P_ESS_2 <= model.P_ESS_max)
model.r8 = Constraint(expr = model.E_ESS_2 <= model.E_ESS_max)
#Declaro a FO3
model.obj3 = Objective(expr = model.delta * model.custo_load *(model.P_load_max - model.P_load_3)
+ model.lambda_P_SE_in_b*(model.P_SE_in_1_param - model.P_SE_in_3) + model.rho/2*(model.P_SE_in_1_param - model.P_SE_in_3)**2
+ model.lambda_P_SE_out_b*(model.P_SE_out_1_param - model.P_SE_out_3) +model.rho/2*(model.P_SE_out_1_param - model.P_SE_out_3)**2
+ model.lambda_P_ESS_b*(model.P_ESS_1_param - model.P_ESS_3) + model.rho/2*(model.P_ESS_1_param - model.P_ESS_3)**2
+ model.lambda_E_ESS_b*(model.E_ESS_1_param - model.E_ESS_3) + model.rho/2*(model.E_ESS_1_param - model.E_ESS_3)**2
+ model.lambda_P_load_b*(model.P_load_1_param - model.P_load_3) + model.rho/2*(model.P_load_1_param - model.P_load_3)**2)
#Declaro as restricões da FO3
model.r4 = Constraint(expr = model.P_load_3 <= model.P_load_max)
#Problem solution
while model.tol_lambda > 10e5 and model.tol_var > 10e5 :
model.lambda_P_SE_in_a_ant = model.lambda_P_SE_in_a
model.lambda_P_SE_out_a_ant = model.lambda_P_SE_out_a
model.lambda_P_ESS_a_ant = model.lambda_P_ESS_a
model.lambda_E_ESS_a_ant = model.lambda_E_ESS_a
model.lambda_P_load_a_ant = model.lambda_P_load_a
model.lambda_P_SE_in_b_ant = model.lambda_P_SE_in_b
model.lambda_P_SE_out_b_ant = model.lambda_P_SE_out_b
model.lambda_P_ESS_b_ant = model.lambda_P_ESS_b
model.lambda_E_ESS_b_ant = model.lambda_E_ESS_b
model.lambda_P_load_b_ant = model.lambda_P_load_b
#Solucao da FO1
opt = SolverFactory('glpk')
model.obj1.activate()
model.obj2.deactivate()
model.obj3.deactivate()
results = opt.solve(model)
model.P_SE_in_1_param == model.P_SE_in_1
model.P_SE_out_1_param == model.P_SE_out_1
model.P_ESS_1_param == model.P_ESS_1
model.E_ESS_1_param == model.E_ESS_1
model.P_load_1_param == model.P_load_1
#Solucao da FO2
'''
opt = SolverFactory('glpk')
model.obj1.deactivate()
model.obj3.deactivate()
results = opt.solve(model)
'''
model.P_SE_in_2_param == model.P_SE_in_2
model.P_SE_out_2_param == model.P_SE_out_2
model.P_ESS_2_param == model.P_ESS_2
model.E_ESS_2_param == model.E_ESS_2
model.P_load_2_param == model.P_load_2
#Solucao da FO3
'''
opt = SolverFactory('glpk')
model.obj1.deactivate()
model.obj2.deactivate()
results = opt.solve(model)
'''
model.P_SE_in_3_param == model.P_SE_in_3
model.P_SE_out_3_param == model.P_SE_out_3
model.P_ESS_3_param == model.P_ESS_3
model.E_ESS_3_param == model.E_ESS_3
model.P_load_3_param == model.P_load_3
#atualizacao variavel dual
model.lambda_P_SE_in_a = model.lambda_P_SE_in_a_ant + model.rho * (model.P_SE_in_1_param - model.P_SE_in_2_param)
model.lambda_P_SE_out_a = model.lambda_P_SE_out_a_ant + model.rho * (model.P_SE_out_1_param - model.P_SE_out_2_param)
model.lambda_P_ESS_a = model.lambda_P_ESS_a_ant + model.rho * (model.P_ESS_1_param - model.P_ESS_2_param)
model.lambda_E_ESS_a = model.lambda_E_ESS_a_ant + model.rho * (model.E_ESS_1_param - model.E_ESS_2_param)
model.lambda_P_load_a = model.lambda_P_load_a_ant + model.rho * (model.P_load_1_param - model.P_load_2_param)
model.lambda_P_SE_in_b = model.lambda_P_SE_in_b_ant + model.rho * (model.P_SE_in_1_param - model.P_SE_in_3_param)
model.lambda_P_SE_out_b = model.lambda_P_SE_out_b_ant + model.rho * (model.P_SE_out_1_param - model.P_SE_out_3_param)
model.lambda_P_ESS_b = model.lambda_P_ESS_b_ant + model.rho * (model.P_ESS_1_param - model.P_ESS_3_param)
model.lambda_E_ESS_b = model.lambda_E_ESS_b_ant + model.rho * (model.E_ESS_1_param - model.E_ESS_3_param)
model.lambda_P_load_b = model.lambda_P_load_b_ant + model.rho * (model.P_load_1_param - model.P_load_3_param)
# Calcula os critérios de parada
model.tol_var = abs(model.P_SE_in_1_param - model.P_SE_in_2_param)
+ abs(model.P_SE_out_1_param - model.P_SE_out_2_param)
+ abs(model.P_ESS_1_param - model.P_ESS_2_param)
+ abs(model.E_ESS_1_param - model.E_ESS_2_param)
+ abs(model.P_load_1_param - model.P_load_2_param)
+ abs(model.P_SE_in_1_param - model.P_SE_in_3_param)
+ abs(model.P_SE_out_1_param - model.P_SE_out_3_param)
+ abs(model.P_ESS_1_param - model.P_ESS_3_param)
+ abs(model.E_ESS_1_param - model.E_ESS_3_param)
+ abs(model.P_load_1_param - model.P_load_3_param)
model.tol_lambda = abs(model.lambda_P_SE_in_a - model.lambda_P_SE_in_a_ant)
+ abs(model.lambda_P_SE_out_a - model.lambda_P_SE_out_a_ant)
+ abs(model.lambda_P_ESS_a - model.lambda_P_ESS_a_ant)
+ abs(model.lambda_E_ESS_a - model.lambda_E_ESS_a_ant)
+ abs(model.lambda_P_load_a - model.lambda_P_load_a_ant)
+ abs(model.lambda_P_SE_in_b - model.lambda_P_SE_in_b_ant)
+ abs(model.lambda_P_SE_out_b - model.lambda_P_SE_out_b_ant)
+ abs(model.lambda_P_ESS_b - model.lambda_P_ESS_b_ant)
+ abs(model.lambda_E_ESS_b - model.lambda_E_ESS_b_ant)
+ abs(model.lambda_P_load_b - model.lambda_P_load_b_ant)
iter = iter + 1,
The error is
ERROR: evaluating object as numeric value: P_SE_in_1
(object: <class 'pyomo.core.base.var.ScalarVar'>)
No value for uninitialized NumericValue object P_SE_in_1
Traceback (most recent call last):
File "C:\Users\cindy\python\Pyomo\ADMM_Distributed_Pyomo\ADMM_Distributed_Pyomo.py", line 218, in <module>
FO1 = model.obj1.expr()
File "pyomo\core\expr\numeric_expr.pyx", line 218, in pyomo.core.expr.numeric_expr.ExpressionBase.__call__
File "C:\Users\cindy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pyomo\core\expr\visitor.py", line 1045, in evaluate_expression
return visitor.dfs_postorder_stack(exp)
File "C:\Users\cindy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pyomo\core\expr\visitor.py", line 572, in dfs_postorder_stack
flag, value = self.visiting_potential_leaf(_sub)
File "C:\Users\cindy\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\pyomo\core\expr\visitor.py", line 953, in visiting_potential_leaf
return True, value(node, exception=self.exception)
File "pyomo\core\expr\numvalue.pyx", line 156, in pyomo.core.expr.numvalue.value
File "pyomo\core\expr\numvalue.pyx", line 143, in pyomo.core.expr.numvalue.value
ValueError: No value for uninitialized NumericValue object P_SE_in_1
PS C:\Users\cindy\python\Pyomo\ADMM_Distributed_Pyomo>