es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Resolver un problema de programación lineal utilizando Pyomo, donde la variable de decisión puede ser tanto positiva como negativa.

Estoy tratando de resolver un problema de LP utilizando Pyomo, donde mi variable de decisión (Pst = Pst+ + Pst-) puede ser positiva o negativa (Pst+ para descargar y Pst- para cargar mi batería), y lo mismo sucede con Pg. Me gustaría saber si es obligatorio especificar el dominio como binario para que el solucionador CPLEX pueda resolver el problema, o de lo contrario, cómo especifico el dominio de mi variable de decisión.

import pyomo.environ as pyo

modelo = pyo.ConcreteModel()

#Define los parámetros
modelo.Ppv = 5
modelo.Pch = 20

#Máxima potencia de descarga de la batería (parámetros)
modelo.Pbattdechargemax = 10
modelo.rendimiento_de_descarga = 0.85

#Máxima potencia de carga de la batería (parámetros)
modelo.Pbattchargemax = -10
modelo.rendimiento_de_carga = 0.85


#Define las variables de decisión
modelo.Pg_decharge = pyo.Var(domain=pyo.NonNegativeReals) 
modelo.Pg_charge = pyo.Var(domain=pyo.NegativeReals)
modelo.Pst_decharge = pyo.Var(domain=pyo.NonNegativeReals)
modelo.Pst_charge = pyo.Var(domain=pyo.NegativeReals)

#Función objetivo
modelo.OBJ = pyo.Objective(sense=pyo.minimize, expr= 
2 * modelo.Pg_decharge + 2 * modelo.Pg_charge + 
3 * modelo.Pst_decharge + 3 * modelo.Pst_charge)


#Restricciones
modelo.Constraint1 = pyo.Constraint(expr = modelo.Pg_decharge + 
modelo.Ppv + modelo.Pst_decharge == modelo.Pch)

modelo.Constraint2 = pyo.Constraint(expr = modelo.Pst_decharge 
<= modelo.Pbattdechargemax * modelo.rendimiento_de_descarga)

modelo.Constraint3 = pyo.Constraint(expr = modelo.Pst_charge >= 
modelo.Pbattchargemax / modelo.rendimiento_de_carga)



ERROR: evaluando el objeto como valor numérico: Pg_decharge
    (objeto: <class 'pyomo.core.base.var.scalarvar'="">)
  No hay valor para el objeto NumericValue no inicializado Pg_decharge
ERROR: evaluando el objeto como valor numérico: OBJ
(objeto: <class 'pyomo.core.base.objective.scalarobjective'="">)
  No hay valor para el objeto NumericValue no inicializado Pg_decharge</class></class>
Tags:  

Answer

  1. Avatar for davy.ai

    Para permitir variables de decisión que puedan tomar valores positivos y negativos en Pyomo, no es obligatorio especificar el dominio como binario. En su lugar, puede utilizar un dominio numérico continuo, como pyo.Reals o pyo.NonNegativeReals o pyo.NegativeReals.

    En el código proporcionado, las variables de decisión “model.Pg_decharge”, “model.Pg_charge”, “model.Pst_decharge” y “model.Pst_charge” están correctamente definidas con dominios numéricos continuos de “pyo.NonNegativeReals” y “pyo.NegativeReals”. Sin embargo, parece haber un error relacionado con variables no inicializadas, que puede estar relacionado con restricciones que hacen referencia a estas variables pero no se han establecido adecuadamente. Este error debe resolverse antes de intentar resolver el problema de LP.

Comments are closed.