Está en la página 1de 100

OPTIMIZACIÓN DEL SISTEMA DE

POTENCIA CON PYTHON


TEMA: INTRODUCCIÓN A PYOMO

Dictado por : Fidel Medina Catay


CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

LENGUAJES DE MODELADO PARA OPTIMIZACIÓN (AML)

es un lenguaje de programación Pyomo es una colección de


El General Algebraic
algebraica (AML) para describir y paquetes de software de Python
Modeling System (GAMS)
solucionar problemas de gran
es un software de alto nivel
para formular modelos de
complejidad para computación optimización.
para el modelado de sistema
matemática de gran escala (p. ej.,
para la optimización
problemas de programación de la
matemática
producción a grande escala)
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

LENGUAJES DE MODELADO ALGEBRAICO (AML)

Los AML son lenguajes de alto nivel para describir y resolver problemas de optimización. Los AML
minimizan las dificultades asociadas con el análisis de modelos de optimización al permitir la
especificación de alto nivel de problemas de optimización. Además, el software AML proporciona
interfaces rigurosas para los paquetes de solucionadores externos que se utilizan para analizar
problemas y permite al usuario interactuar con los resultados del solucionador en el contexto de su
especificación de modelo de alto nivel.

❑ Apoya la especificación de conceptos abstractos como


conjuntos dispersos, índices y expresiones algebraicas.
❑ Puede representar una amplia variedad de modelos de
optimización.
❑ Las AML se están ampliando cada vez más para incluir
capacidades de scripting personalizadas.
CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Pyomo (Python Optimization Modeling Objects) es una aplicación desarrollada para el
modelado, definición y solución de problemas de optimización mediante el uso de lenguaje
Python. Python se trata de un lenguaje de alto nivel de sencilla sintaxis y una clara orientación
a objetos, lo cual será un incentivo más en el uso de esta herramienta, tal y como se
comprobará a lo largo de este capítulo. A continuación se describen alguna de las
características principales de Pyomo:

1. Paquete Open Source

Uno de las principales motivos que ha conducido al desarrollo de Pyomo es la necesidad de


crear una herramienta adecuada para la resolución de problemas de optimización basada en
un lenguaje de código abierto. A pesar de que son numerosos los solvers matemáticos de
código abierto para este tipo de problemas, como podrían ser a modo de ejemplo los incluidos
en COIN-OR, son pocas las herramientas de código abierto para el modelado del problema.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
2. Capacidad de Adaptación
Una de las principales desventajas que presentan los lenguajes de modelado de carácter comercial
que desempeñan funciones similares a Pyomo es su limitada capacidad de customización de sus
componentes o de los propios procesos de optimización. Debido al carácter de código abierto de
Pyomo, el usuario tiene la capacidad de no sólo llevar a cabo modificaciones del código existente,
así como de los componentes y características ya integradas, sino también la creación de nuevos
componentes, herramientas, o futuras mejoras, lo cual abre un amplio campo para la comunidad
investigadora. De esta manera, el diseñador puede personalizar el software a su gusto para
adaptarlo a sus necesidades, y prototipar nuevas capacidades que pudieren incluso ser integradas
en un futuro en la versión básica.
3. Integración de Solvers
Las hasta ahora existentes herramientas de modelado de problemas de optimización pueden ser
clasificadas de manera general en dos categorías. Por un lado están las herramientas de modelado
fuertemente acopladas en las cuales se tiene acceso directo a la utilización de un determinado
solver matemático, y por otro lado las herramientas de modelado débilmente acopladas en los que
se hace uso de ejecutables externos. Pyomo permite la utilización de ambas vertientes. Los
objetivos de diseño de Pyomo han llevado a la distinción entre la formulación del modelo y la
ejecución de la optimización, siendo ambos procesos completamente independientes.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
4. Instanciación de Modelos
Una de las principales y deseables característica de Pyomo es la definición de modelos
abstractos de manera similar a la forma en que trabajan AMPL y AIMMS. En un modelo
abstracto se lleva a cabo la separación de la declaración del modelo y de los datos utilizados
para la creación de una instancia de modelo específica.
Dicha separación proporciona una gran capacidad de modelo flexible. Para ello, Pyomo utiliza
una representación simbólica de los datos, variables, restricciones, y objetivos de
optimización, para después proceder a generar instancias del modelo previamente creado
mediante la llamada a fuentes de datos externos

5. Lenguaje de Modelado Flexible

Otro de los principales objetivo de Pyomo es el uso directo de lenguaje de programación en


alto nivel para soportar la definición de modelos de optimización. De esta forma, Pyomo es
similar a herramientas como FlopC++ y OptimJ, los cuales soportan modelado en C++ y Java
respectivamente.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Pyomo es una herramienta que se fundamenta en la creación de modelos a modo de objetos,
construidos mediante la incorporación de diversos componentes. De esta forma, podría
describirse un modelo en Pyomo como la suma de todos y cada uno de los componentes
declarados y asociados al mismo. Sin entrar en detalles acerca de cada uno de los elementos,
se muestra a continuación un diagrama en el cual se puede ver la estructura clásica de un
modelo en Pyomo.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON

Pyomo es una colección de paquetes de software NEOS Server es una aplicación cliente-servidor
de Python para formular modelos de basada en Internet que proporciona acceso
optimización. Pyomo fue desarrollado por William gratuito a una biblioteca de solucionadores de
Hart y Jean-Paul Watson en el Laboratorio optimización. Su biblioteca de solucionadores
Nacional de Sandia y por David Woodruff en incluye más de 60 solucionadores comerciales,
Universitarios de California gratuitos y de código abierto, que pueden
aplicarse a problemas de optimización
matemática de más de 12 tipos diferentes,
incluida la programación lineal , la programación
entera y la optimización no lineal .
CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
Modelos en Pyomo EN PYTHON
Existen principalmente dos tipos de modelos en Pyomo, los modelos concretos y los modelos abstractos. La
diferencia principal entre ambos es que, mientras que en un modelo concreto todos los datos necesarios se
encuentran incluidos en el mismo fichero en el cual se realiza la definición del modelo, en una modelo
abstracto los datos se encuentran en ficheros externos los cuales han de ser llamados cuando se lleva a cabo
la resolución del problema. De esta forma, se utilizará un modelo concreto cuando se desee resolver un
problema particular mientras que se utilizará un modelo abstracto cuando se desee resolver un problema
general del cual se realizarán numerosas instancias con distintos datos.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
Modelos en Pyomo EN PYTHON
El primer paso en cualquier programa desarrollado mediante el uso del Pyomo es la llamada e la
librería que contiene el paquete. Mediante el comando siguiente se importan todos los paquetes
contenidos en el núcleo básico de Pyomo.

Una vez que se ha declarado la librería en la cual se encuentran contenidos los elementos
básicos de Pyomo, se puede declarar el modelo, bien concreto o bien abstracto, mediante los
siguientes comandos.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo
Una vez que se ha creado el objeto modelo en Pyomo, concreto o abstracto, el siguiente paso
es el de agregar todos y cada uno de los elementos necesarios a dicho modelo para la
descripción del problema de optimización, sistema a controlar, y del problema a resolver en sí.
Estos elementos básicos que será necesario añadir al modelo son:

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo: Sets

Estos elementos son aquellos utilizados en Pyomo cuando se desea llevar a cabo la indexación
de una determinada variable. Para su definición, es necesario llevar a cabo una inicialización de
los mismos. Existe numerosas formas de realizar dicha inicialización. La más básica de ellas,
es la utilización de lista, sets, o tuplas de python, tal y como se muestra a continuación:

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo: Parámetros
Son parámetros aquellos elementos utilizados durante el problema de optimización cuyo
valor no es utilizado como variable de decisión del mismo, y que permanecen constantes
durante todo el proceso de optimización para el valor de un índice o índices. Por ello, a la
hora de llevar a cabo la declaración de un parámetro, será necesario indiciar de qué
índice o indices depende.

En el caso en que el que valor del parámetro permanezca constante a lo largo de todo el
proceso de optimización sin depender de ningún índice, son dos las alternativas existentes.
Bien su declaración como parámetros sin dependencia de índice, o bien mediante una
constante de Python al uso. De esta forma se puede tener:

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo: Variables
Otro de los elementos clave, junto con sets y parámetros en pyomo, son las variables. Se
definen como variables aquellos elementos a los cuales se les dará valor a lo largo del
proceso de optimización. Dichas variables son declaradas, pueden ser opcionalmente
restringidas a un conjunto de valores, y se les pueden ser asignados un conjunto de valores
iniciales.

De esta forma, todos y cada uno de los elementos que sean declarados como variables
serán utilizados como toma de decisión durante el proceso de optimización, siendo esto una
de las principales ventajas de Pyomo, y lo cual se conoce como optmización multiobjetivo.
Algunas de las directivas que se pueden incluir durante la declaración de variables son:

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo: Variables
Por último, es posible especificar el domino en el cual se han de encontrar las variables

Any : cualquier valor es posible.


Reals : valores en punto flotante
PositiveReals : valores en punto flotante positivos.
NonPositiveReals : valores en punto flotante no positivos.
NegativeReals : valores en punto flotante negativos.
PercentFraction : valores en punto flotante en el intervalor [0,1].
UnitInterval : otra forma de indicar el anterior.
Integers : valores enteros.
PositiveIntegers : valores enteros positivos.
NonPositiveIntegers: valores enteros no positivos.
NegativeIntegers :valores enteros negativos.
NonNegativeIntegers: valores enteros no negativos.
Boolean : Valores booleanos.
Binary : otra forma de indicar el anterior.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo: Objetivo
Se define objetivo en Pyomo como la función que se desea optimizar, y la cual sirve como
índice de desempeño del problema de optmimización. De esta forma, se trata de una función
que devuelve un valor el cual se intenta minimizar o maximizar, con respecto al conjunto de
variables. Aunque existen diversas maneras de llevar a cabo la declaración de la función
objetivo, la más recomendada de todas ellas es el uso de una función genérica de Python
que después es incluida como elemento del modelo a modo de objetivo. A continuación se
muestra una ejemplo de declaración de función objetivo.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
EN PYTHON
Elementos Básicos en Pyomo: Restricciones

Se definen restricciones como aquellos elementos utilizados para restringir, por lo general,
del valor de las variables del problema. Sin embargo, también se utilizarán restricciones,
tal y como se verá en secciones posteriores, para definir el comportamiento dinámico de
un sistema.

CD - PASCO
PYOMO: MODELADO DE PROBLEMAS DE OPTIMIZACIÓN
Aplicación de Solvers EN PYTHON
Una vez que se ha definido el problema de optimización, es decir, se ha descrito por completo
el modelo que se desea optimizar, incluyéndose función objetivo a optimizar y restricciones
impuestas al sistema, el único paso que queda por dar para la resolución del problema es la
aplicación del solver matemático encargado de resolver el problema.

CD - PASCO
EJEMPLOS BÁSICOS EN PYOMO
Problema de la Mochila (Modelo Concreto)

Supóngase que se desea llevar a cabo el transporte


de una serie de objetos, pertenecientes a un conjunto
A, y cada uno de los cuales tiene asociado un
determinado peso y un determinado beneficio, tal y
como se muestra en la siguiente tabla.

El objetivo del problema de optimización es el de


seleccionar un subconjunto de objetos a transportar
tal que se minimice el peso del equipaje y se
maximice el valor del contenido transportado,
teniéndose en cuenta que existe un máximo peso a
poder ser transportado. La simbología utilizada será la
siguiente.

CD - PASCO
Problema de la Mochila (Modelo Concreto)

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

MODELADO EN PYOMO
El objetivo de Pyomo es proporcionar una plataforma para especificar modelos de optimización que
incorporen las ideas centrales que se encuentran en las AML modernas, dentro de un marco que
promueve la flexibilidad, extensibilidad, portabilidad, apertura y facilidad de mantenimiento. Pyomo
es una AML que amplía Python para incluir objetos para el modelado de optimización.
Estos objetos se pueden utilizar para especificar modelos de optimización y traducirlos a varios
formatos que pueden ser procesados por solucionadores externos.

Ejemplos sencillos

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN
Este LP se puede expresar fácilmente en PYOMO de la siguiente manera:

La primera línea es una declaración de importación estándar de Python que inicializa el entorno
Pyomo y carga la biblioteca de componentes de modelado central de Pyomo.

Las siguientes líneas construyen un objeto modelo y definen atributos del modelo.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN
Este LP se puede expresar fácilmente en PYOMO de la siguiente manera:

Este ejemplo describe un modelo concreto.

Los componentes de modelo son objetos que son atributos de un objeto de modelo y el objeto
ConcreteModel inicializa cada componente del modelo a medida que se agregan.

Las variables de decisión del modelo, las restricciones y el objetivo se definen utilizando
componentes del modelo Pyomo.
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

Los usuarios rara vez tienen que resolver una sola instancia de un problema de optimización en particular.
Más bien, comúnmente tienen un modelo de optimización general y luego crean una instancia particular
de ese modelo usando datos específicos. Por ejemplo, las siguientes ecuaciones representan un LP con
parámetros escalares n y m, parámetros vectoriales b y c, y parámetro matricial a:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

Este LP se puede expresar con un modelo concreto en PYOMO de


la siguiente manera:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

Este script requiere que los datos utilizados para construir el modelo estén
disponibles mientras se construye cada componente de modelado. En este
ejemplo, los datos necesarios existen en mydata.py:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

Este LP también puede verse


como un modelo
matemático abstracto,
donde los valores de
parámetros simbólicos no
especificados se definen
posteriormente cuando se
inicializa el modelo. Por
ejemplo, este LP se puede
expresar como un modelo
abstracto en Pyomo de la
siguiente manera:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

Este ejemplo incluye componentes de


modelo que proporcionan
definiciones abstractas o simbólicas
de valores de parámetros y
conjuntos. El objeto AbstractModel
pospone la inicialización de los
componentes del modelo hasta que
se crea una instancia del modelo,
utilizando datos de parámetros y
conjuntos proporcionados por el
usuario. Tanto los modelos concretos
como los abstractos se pueden
inicializar con datos de una variedad
de fuentes de datos diferentes,
incluidos los archivos de comandos
de datos que se adaptan de los
comandos de datos de AMPL. Por
ejemplo:
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

Las variables de Pyomo se crean utilizando la clase Var, que puede representar un valor único o
una colección indexada de valores. Las variables pueden tener valores iniciales y el valor de una
variable puede ser recuperado y establecido por el usuario o por un solucionador como parte del
proceso de solución.

Se admiten argumentos con nombre y sin nombre, se proporciona una lista de los argumentos
comunes que se pueden pasar al declarar el componente Var

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

Se admiten argumentos con nombre y sin nombre, se proporciona una lista de los argumentos
comunes que se pueden pasar al declarar el componente Var

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

El dominio de una variable (es decir, el conjunto de valores legales) se especifica con el dominio o
dentro de las opciones de palabras clave del constructor Var:

En este ejemplo, y solo puede tomar los valores enteros 1, 2 o 3. La variable r puede tener
cualquier valor real, y w está restringida a ser binaria (es decir, 0/1 o Verdadero / Falso). Si no se
especifica el dominio, el predeterminado es el escenario de los números Reales.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

Otros dominios soportados por Pyomo se definen en la Tabla. Tenga en cuenta que estos dominios
también se pueden utilizar en otros contextos (por ejemplo, al construir objetos Param).

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

El dominio o el argumento interno también pueden aceptar una función, que se utiliza para definir
el dominio para elementos individuales de una variable indexada.

En este ejemplo, s es una variable indexada cuyas entidades individuales se definen en


intervalos enteros consecutivos.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

El límite de variable se puede especificar explícitamente con la opción de palabra clave de bounds

La opción de límites puede especificar una tupla de 2 con valores superiores e inferiores.
Alternativamente, puede especificar una función que devuelva una tupla de 2 para cada índice de
variable. Tenga en cuenta que Ninguno se puede utilizar en lugar del límite inferior o superior para
indicar que no se debe aplicar ningún límite. En el fragmento de código anterior, model.a tiene un
límite inferior de 0 y no tiene un límite superior, mientras que model.b tiene límites diferentes para
cada uno de sus índices. Por ejemplo, model.b [3] tiene un límite inferior de 6: 5 y un límite
superior de 7: 5.
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

El valor inicial de las variables se puede establecer con el argumento de palabra clave initialize
como en el siguiente ejemplo:

Para las variables no indexadas, se proporciona un único valor escalar al argumento de la palabra
clave initialize. Si el componente está indexado, aún se puede proporcionar un valor único, en cuyo
caso todas las entradas de una variable indexada se inicializarán con el mismo valor.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

El dominio o el argumento interno también pueden aceptar una función, que se utiliza para definir
el dominio para elementos individuales de una variable indexada.

Para las variables no indexadas, se proporciona un único valor escalar al argumento de la palabra
clave initialize. Si el componente está indexado, aún se puede proporcionar un valor único, en
cuyo caso todas las entradas de una variable indexada se inicializarán con el mismo valor.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

VARIABLES

Además, se puede pasar un diccionario donde las claves corresponden a los índices válidos de la
variable. Además, a este argumento se le puede pasar una regla (una función de Python) que
acepta el modelo y los índices variables como argumentos y devuelve el valor inicial deseado para
ese elemento variable:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Var

Al generar una salida formateada o al crear secuencias de comandos de flujos de trabajo


avanzados, hay varios atributos y métodos de Var que se utilizan comúnmente. Considere las
siguientes declaraciones:

El valor actual de la variable se puede obtener con la función value(), y los atributos lb y ub
mantienen valores para los límites superior e inferior de la variable, respectivamente. Estos
valores pueden inferirse del dominio de la variable.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Var

Los valores de las variables se pueden establecer mediante el operador de asignación de Python,

También se puede llamar al método set_values para establecer todos los valores de las variables
de un diccionario.

Los componentes de Var se pueden fijar a valores específicos. Si el atributo fixed es Verdadero,
entonces la variable tiene un valor fijo que no será alterado por un optimizador. El método fix se
usa para establecer un valor de elementos de una Var, y el método de unfix se usa para deshacer
elementos de una Var.
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

OBJETIVOS

Un objetivo es una función que un solucionador minimiza o maximiza. El solucionador busca


valores de las variables que dan como resultado el mejor valor posible de la función objetivo. Las
siguientes secciones describen la sintaxis para declarar y trabajar con objetivos.

La mayoría de los solucionadores se pueden aplicar a modelos de optimización con un solo


objetivo. El siguiente código crea un objeto Objective:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

OBJETIVOS

Se admiten argumentos con nombre y sin nombre, y la Tabla proporciona una lista de los
argumentos comunes que se pueden pasar al declarar el componente Objective

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

OBJETIVOS

La palabra clave expr se puede utilizar para especificar la expresión real del objetivo. También se
puede usar la palabra clave rule para especificar una regla (una función de Python) que devuelve
una expresión. Una regla proporciona control sobre cómo se forma el objetivo. Ambas opciones se
ilustran aquí:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

OBJETIVOS

Algunos solucionadores pueden realizar una optimización multiobjetivo con dos o más objetivos.
Se pueden declarar varios objetivos individualmente o se pueden indexar y definir usando una
regla como se muestra aquí:

Cuando el objeto Objective se declara como un componente indexado, Pyomo itera sobre todos
los elementos del conjunto de índices durante la construcción del objeto, pasando cada elemento
del conjunto a la función dada como argumento de la palabra clave de la regla. Si se especifican
varios conjuntos en una declaración de objetivo, Pyomo itera sobre el producto cruzado de todos
los conjuntos, proporcionando un elemento para cada conjunto a la función de regla.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

OBJETIVOS

En algunos contextos, puede ser conveniente no definir objetivos para algunos valores de índice. Si
la regla de construcción devuelve Objective.Skip, el objetivo se ignora.

De forma predeterminada, la declaración de un objeto Objetivo indica que el objetivo debe


minimizarse. La palabra clave sense se puede usar para indicar un objetivo que se maximiza
usando sense = pyo.maximize

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Objective

La función objetivo contiene algunos atributos que pueden resultar útiles para la creación de
scripts o la depuración. El atributo expr almacena la expresión del objetivo. El atributo sense indica
si el objetivo debe minimizarse o maximizarse. La función value se puede utilizar para calcular el
valor del objetivo. Estos se ilustran en el siguiente ejemplo:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES

Una restricción define una o más expresiones que ponen límites a los valores factibles de las variables.
La declaración de expresiones de restricción es similar a la declaración de expresiones de función
objetivo. Las restricciones difieren de los objetivos en que las expresiones incluyen relaciones
(igualdades o desigualdades). Si bien los objetivos se pueden indexar, esta función se usa con poca
frecuencia. Por el contrario, las restricciones se indexan comúnmente, lo que permite construir y
almacenar una colección de expresiones de restricción relacionadas en un único objeto de restricción.

El siguiente código crea un único objeto de restricción no indexado:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES

La expresión especificada por la palabra clave expr se puede generar alternativamente con una
función de regla. Por ejemplo, la restricción diff también se puede declarar de la siguiente manera:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES

Se admiten varios argumentos con nombre y la Tabla enumera los argumentos comunes que se
pueden pasar al declarar un componente Constraint.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES
Las restricciones se pueden indexar y esos índices se pueden usar para hacer referencia a elementos
específicos de parámetros y variables indexados al construir expresiones. El siguiente fragmento de
código muestra un ejemplo de esto:

Las restricciones indexadas se especifican de la misma manera que


los objetivos indexados. Pyomo itera sobre el producto cruzado de
los conjuntos de indexación, proporcionando un índice de cada
conjunto a la función de regla. La restricción CoverConstr en este
ejemplo implementa el siguiente modelo matemático:
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES
Dados los datos especificados en a y b, la instancia del modelo pasada al solucionador incluirá las
siguientes restricciones explícitas:

Se permiten tres tipos de expresiones de restricción en Pyomo:

las restricciones de desigualdad tienen la forma

donde expr1 y expr2 pueden ser expresiones no constantes. (Tenga en


cuenta que < y > no son compatibles).
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES

las restricciones de igualdad tienen la forma

donde expr1 y expr2 pueden ser expresiones no constantes.

las restricciones de rango tienen la forma

donde lower y upper son expresiones constantes y expr1 es una


expresión no constante.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

RESTRICCIONES
En algunos modelos de optimización, es posible que no se defina una restricción para todos los índices. Por
ejemplo, es posible que determinados índices no sean realizables físicamente. La función de regla puede devolver
Constraint.Skip (o Constraint.NoConstraint) para indicar que no hay ninguna restricción asociada con un índice en
particular. Por ejemplo, considere la declaración de una restricción de programación de tareas teórica:

El valor Constraint.Skip indica que no se genera ninguna restricción y se omite el valor de índice
correspondiente. Una alternativa a este enfoque es construir un conjunto de índices dispersos que
especifique solo los índices válidos en la restricción. Sin embargo, esto puede no ser siempre práctico en
modelos complejos. CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS DE RESTRICCIÓN Constraint

Después de declarar una restricción, la expresión de restricción se procesa para identificar los
elementos de la tupla lógica: (lower, body, upper), donde las expresiones no constantes se
envían al cuerpo. Por lo tanto, los atributos lower e upper son expresiones constantes o
Ninguno, y el atributo body contiene una expresión Pyomo. Si una restricción contiene una
expresión de igualdad, el atributo de igualdad es Verdadero y los atributos superior e inferior
tienen el mismo valor.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS DE RESTRICCIÓN Constraint


El valor del cuerpo de la restricción se puede evaluar mediante la función de valor. De manera
similar, los métodos lslack y uslack se pueden usar para calcular los valores de holgura (la diferencia
entre el valor de la expresión actual y el límite superior o inferior), como se muestra en el siguiente
ejemplo:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

SET DATA

conjunto es una colección de datos, que posiblemente incluya datos numéricos (por ejemplo, valores
reales o enteros) así como datos simbólicos (por ejemplo, cadenas) que normalmente se utilizan para
especificar los índices válidos para un componente indexado. Se pueden usar varias clases para definir
conjuntos en modelos Pyomo:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

El siguiente código crea un objeto Set:

Se admiten
argumentos con
nombre y sin
nombre, y la Tabla
proporciona una lista
de los argumentos
comunes que se
pueden pasar al
declarar el
componente Set.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

También se puede especificar un conjunto indexado proporcionando otros conjuntos o listas de Python
como argumentos sin nombre en la declaración:

De manera similar, los tipos estándar de Python se pueden usar para definir un índice establecido:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

Las declaraciones de conjuntos también pueden usar operaciones de conjuntos estándar para declarar
un conjunto de forma constructiva:

Además, el conjunto de productos cruzados se puede especificar con el operador de multiplicación:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

La palabra clave initialize se puede utilizar para especificar los elementos de un conjunto:

También se puede pasar un diccionario de Python a la palabra clave initialize para especificar los
elementos de cada índice de un conjunto indexado:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

Alternativamente, se puede pasar una regla (una función de Python) a la palabra clave initialize para
proporcionar los elementos de un conjunto indexado. La función acepta el modelo y los índices y
devuelve el conjunto deseado para ese índice:

Los ejemplos anteriores ilustran cómo se pueden especificar o generar dinámicamente datos para
inicializar un conjunto. Hay algunos contextos en los que es más sencillo especificar los elementos del
conjunto que deben omitirse. La palabra clave filter se puede utilizar para especificar una función que
devuelve True cuando un elemento pertenece a un conjunto y False en caso contrario. Por ejemplo:

Aquí, el conjunto P contiene valores primos y el conjunto Q es el conjunto de todos los números
excepto los miembros de P. CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

Después de construir un conjunto indexado en un modelo concreto, se pueden agregar conjuntos para
índices específicos usando el operador igual de Python:

La validación de los datos del conjunto se admite de dos formas diferentes. Primero, se puede
especificar un superconjunto con la palabra clave dentro o dominio:

Cuando se agrega un elemento al conjunto B, se verifica para confirmar que también pertenece a A.
Esto asegura que B sea un subconjunto de A.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

La validación de los datos del conjunto también se puede realizar pasando una regla al argumento de la
palabra clave validate. La función de regla debe devolver True si el elemento que se pasa pertenece a
este conjunto, y False en caso contrario (Pyomo lanzará una excepción). Por ejemplo, la siguiente
función de validación de C imita el argumento de la palabra clave interna:

Finalmente, tenga en cuenta que si se especifican los argumentos de la palabra clave within y validate,
entonces la lógica especificada por ambos se aplica para validar los elementos del conjunto.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

De forma predeterminada, los conjuntos se ordenan por orden de inserción. En algunos casos, es
posible que deseemos que los elementos del conjunto estén ordenados. Esto se puede hacer usando la
opción Set.SortedOrder con la palabra clave ordenada:

Los conjuntos pueden contener elementos de datos que son singleton o k-tuples. La palabra clave
dimen se utiliza para especificar la dimensión esperada de los datos. El valor predeterminado es uno, lo
que indica que el conjunto contendrá datos singleton. En algunos casos, el valor apropiado de la
dimensión se puede determinar a partir de otros valores de palabras clave, pero en general se requiere
que el usuario especifique esta palabra clave para los datos del conjunto de tuplas.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DECLARACIONES Set

El componente RangeSet define un conjunto virtual ordenado que representa una secuencia de
valores enteros o de punto flotante. Esta secuencia está definida por un valor inicial, un valor final y un
tamaño de paso. Si un RangeSet se define con un solo argumento, el argumento define el valor final. El
valor inicial predeterminado es 1 y el tamaño de paso predeterminado es 1. Por ejemplo, lo siguiente
define una secuencia de números enteros del 1 al 10:

Si un RangeSet se define con dos argumentos, el primero es el valor inicial y el segundo es el valor
final. Por ejemplo, lo siguiente define una secuencia de números enteros del 5 al 10:

Finalmente, si un RangeSet se define con tres argumentos, entonces son el valor inicial, el valor final y
el tamaño del paso respectivamente. Por ejemplo, lo siguiente define una secuencia de valores de
coma flotante de 2.5 a 10.0 con el paso 1.5:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Set


La función len() devuelve el número de elementos del conjunto:

Se puede acceder a los elementos del conjunto con el método data(), que devuelve los datos del
conjunto subyacente como una tupla de Python (o un diccionario de Python para conjuntos indexados)
como se muestra a continuación.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Set


Las pruebas de membresía y comparación de conjuntos son compatibles con una variedad de
operadores de Python:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Set


Los conjuntos también se pueden iterar para acceder a elementos individuales del conjunto:

Los conjuntos ordenados incluyen una variedad de métodos que reflejan el orden en el conjunto:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Set


Los métodos first() y last() devuelven el primer y último elemento en un conjunto ordenado
respectivamente. El método next() toma un elemento del conjunto y devuelve el siguiente elemento
del conjunto. De manera similar, el método prev() devuelve el elemento anterior. Los métodos nextw()
y prevw() funcionan de manera similar, excepto que envuelven los extremos del conjunto. En este
ejemplo, el valor de nextw(1) es 3 porque 1 es el último elemento del conjunto y 3 es el siguiente
elemento si los índices del conjunto se envuelven.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Set


El método ord() se puede usar para encontrar el índice de posición de un elemento en un conjunto
ordenado, y el operador [] se puede usar para acceder a un elemento dado un índice de posición:

NOTA: Los índices de posición comienzan en uno, no en cero. El orden del conjunto está determinado
por la secuencia de los datos proporcionados cuando se instancia y la opción especificada para el
argumento de palabra clave ordenada.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
Un parámetro es un valor numérico o simbólico que se utiliza para formular restricciones y objetivos
en un modelo. Los parámetros de Pyomo se pueden crear usando la clase Param, que puede denotar
un valor único, una matriz de valores o una matriz multidimensional de valores. Un componente
Param no indexado se parece mucho a un valor escalar, y un componente Param indexado se parece
mucho a un diccionario de valores de Python. El componente Param admite funciones avanzadas
como mutabilidad y representaciones dispersas con valores predeterminados.

El siguiente código crea un objeto Param:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
Se admiten argumentos con nombre y sin nombre, y Table proporciona una lista de los argumentos
comunes que se pueden pasar al declarar el componente Param.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
Se puede especificar un parámetro indexado proporcionando conjuntos como argumentos sin nombre
a la declaración Param:

La palabra clave initialize se puede utilizar para especificar el valor de un parámetro como se muestra
en los dos fragmentos de código anteriores. También se puede pasar una función de regla a la palabra
clave initialize para establecer el valor de un parámetro:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
Si se utilizan conjuntos ordenados para definir el índice de un parámetro indexado, la función de
inicialización puede hacer referencia a valores de parámetro definidos previamente:

La opción predeterminada se puede utilizar para especificar valores de parámetros para todos los
índices válidos que no se han inicializado explícitamente. Por ejemplo, podemos definir un parámetro
indexado que representa una matriz diagonal de 3 × 3 de la siguiente manera:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
De forma similar al componente Establecer, hay dos formas de validar los valores de los parámetros.
Primero, la opción dentro de la palabra clave se puede utilizar para especificar el dominio válido de los
valores de los parámetros:

La validación de los datos de los parámetros también se puede realizar con la opción de validación, que
especifica una función que devuelve Verdadero si el valor de un parámetro es válido y Falso si no lo es
(Pyomo lanzará una excepción). El siguiente ejemplo usa la opción de validación para imitar el
comportamiento de la opción within:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
La validación de los parámetros indexados se realiza de manera similar. La opción de validación
especifica una función cuyos argumentos son el modelo, el valor del parámetro y los índices de los
parámetros:

Si se especifican las opciones internas y de validación, se aplicará la lógica de ambas opciones para
validar los valores de los parámetros.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
El componente Param se puede utilizar para representar valores constantes en modelos Pyomo; sin
embargo, también se admite la mutabilidad. En el siguiente ejemplo, Pyomo genera la expresión para
el objetivo en este modelo con la forma:

Específicamente, Pyomo ha tratado los valores de los parámetros como constantes fijas y sus
expresiones simplemente contienen las constantes numéricas.

Tenga en cuenta que esta "conversión" ocurre tan pronto como se crea la expresión por primera vez. El hecho de
que estos valores provengan de un componente Param se pierde y solo quedan los valores numéricos. Esto se hace
por eficiencia. En consecuencia, estos valores no se pueden cambiar una vez que se crea la expresión.
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
Sin embargo, este comportamiento es diferente si se especifica la opción mutable al construir el
modelo. Si esta opción es Verdadero, los valores de los parámetros no se tratan como constantes.
Considere el ejemplo anterior nuevamente donde el parámetro p ahora es mutable:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

DATOS DE PARÁMETROS
Cuando Pyomo genera la expresión para el objetivo en este modelo, mantiene el conocimiento del
componente Param y ahora tiene la forma:

donde los valores pi son objetos Param con referencias a los valores de los parámetros. Aquí, Pyomo
trata los valores de los parámetros como valores mutables que el usuario puede cambiar más
adelante. En este ejemplo, los valores de los parámetros se cambian después de que se define la
expresión del objetivo, y el objetivo resultante es

Los parámetros solo se reemplazan con sus valores numéricos cuando se llama al solucionador. Por lo
tanto, sus valores se pueden cambiar entre llamadas consecutivas a un solucionador. Los parámetros
mutables requieren una sobrecarga adicional para la memoria y requieren un procesamiento adicional
al traducir las expresiones de Pyomo a una forma que comprenda un solucionador. En consecuencia,
los parámetros son inmutables por defecto.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Param


Pyomo asume que los valores de los parámetros se especifican con una representación escasa. Por
ejemplo, el objeto Param T declara un parámetro indexado sobre los conjuntos A y B:

Sin embargo, no es necesario definir todos estos valores en un modelo. Por ejemplo:

El parámetro W está definido para los índices 1 y 3, pero el conjunto de índices B incluye 1, 2 y 3. Si se
accede a W [2], se produce un error y se lanza una excepción de Python.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Param


Pyomo asume que los valores de los parámetros se especifican con una representación escasa. Por
ejemplo, el objeto Param T declara un parámetro indexado sobre los conjuntos A y B:

Sin embargo, no es necesario definir todos estos valores en un modelo. Por ejemplo:

El parámetro W está definido para los índices 1 y 3, pero el conjunto de índices B incluye 1, 2 y 3. Si se
accede a W [2], se produce un error y se lanza una excepción de Python.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

EXPRESIONES NOMBRADAS

Las expresiones Pyomo son declaraciones matemáticas que contienen números, parámetros y variables
combinadas usando operadores como +, -, *, / por ejemplo. Estas expresiones forman la base de la
representación algebraica de un modelo y se almacenan dentro de los componentes de restricción y
objetivo del modelo.
El componente Expresión proporciona un mecanismo para almacenar una expresión Pyomo en un modelo
que hace que la expresión sea reutilizable en múltiples contextos, como una subexpresión común en una o
más restricciones, sin la sobrecarga de regenerar la expresión cada vez. Además, la expresión Pyomo
almacenada por el componente Expression se puede cambiar en un momento posterior, actualizando así
cualquier restricción o expresión objetiva que haga referencia a ella. Esto proporciona un enfoque poderoso
para modificar un modelo entre llamadas a un solucionador.
Las siguientes secciones describen la sintaxis para declarar y trabajar con expresiones con nombre.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

EXPRESIONES NOMBRADAS

Las expresiones Pyomo son declaraciones matemáticas que contienen números, parámetros y variables
combinadas usando operadores como +, -, *, / por ejemplo. Estas expresiones forman la base de la
representación algebraica de un modelo y se almacenan dentro de los componentes de restricción y
objetivo del modelo.
El componente Expresión proporciona un mecanismo para almacenar una expresión Pyomo en un modelo
que hace que la expresión sea reutilizable en múltiples contextos, como una subexpresión común en una o
más restricciones, sin la sobrecarga de regenerar la expresión cada vez. Además, la expresión Pyomo
almacenada por el componente Expression se puede cambiar en un momento posterior, actualizando así
cualquier restricción o expresión objetiva que haga referencia a ella. Esto proporciona un enfoque poderoso
para modificar un modelo entre llamadas a un solucionador.

El siguiente código crea un único objeto Expression no indexado:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

EXPRESIONES NOMBRADAS

Se admiten argumentos con nombre y sin nombre, y la Tabla proporciona una lista de los
argumentos comunes que se pueden pasar al declarar el componente Expression.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN
EXPRESIONES NOMBRADAS
Las palabras clave expr o rule se pueden usar para inicializar una expresión nombrada cuando
se declara, como se muestra en el siguiente ejemplo:

Al igual que con los otros componentes básicos de modelado, el componente Expression se puede indexar
declarándolo con uno o más argumentos sin nombre que representen conjuntos de indexación. El siguiente
ejemplo declara un componente de expresión indexado sobre todos los miembros del conjunto de índices
excepto el primero. Los índices que deben dejarse fuera del componente Expression indexado se indican
devolviendo el atributo Expression.Skip de la función de regla.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Expression

Un uso simple del componente Expression declara una sola expresión y la usa dentro de un
objetivo y una declaración de restricción:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

TRABAJAR CON OBJETOS Expression

El valor de la expresión nombrada se puede calcular utilizando la función de valor. Además, la


expresión almacenada en el componente Expression con nombre se puede actualizar. Como
muestra el siguiente ejemplo, la actualización de la expresión nombrada tiene el efecto de
actualizar las expresiones objetivo y de restricción donde se usa:

El componente Expression no requiere una expresión cuando se declara en un modelo, pero se le


debe asignar una antes de que el modelo se resuelva si la expresión nombrada se usa en cualquier
objetivo o restricción activos. Además, las expresiones con nombre que se usan en objetivos o
restricciones no deben almacenar expresiones Pyomo relacionales, es decir, expresiones que usan
uno o más de los operadores <=, <,> =,> y ==. CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix
Los sufijos proporcionan un mecanismo para anotar un modelo con datos auxiliares que no están
estrictamente relacionados con la declaración y estructura del modelo. Los complementos de
solucionador suelen utilizar sufijos para almacenar información adicional sobre la solución de un
modelo. De manera más general, los sufijos se pueden utilizar para

• importar información de un solucionador sobre la solución a un programa matemático (por


ejemplo, restricciones duales, costos variables reducidos, información básica),
• exportar información a un solucionador o algoritmo para configurar el proceso de la
solución (por ejemplo, información de inicio en caliente, prioridades de ramificación de
variables), y
• Etiquetar componentes del modelo con datos locales para su uso posterior en algoritmos
avanzados de secuencias de comandos.

Esta funcionalidad está disponible para el modelador a través de la clase de componente Suffix,
proporcionando una interfaz para anotar componentes de modelado Pyomo con datos
adicionales.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix
El siguiente código crea un sufijo etiquetado foo:

Se admiten argumentos con nombre, y la Tabla proporciona una lista de los argumentos comunes
que se pueden pasar al declarar el componente Sufijo

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix

El componente Suffix no es un componente indexado y, por lo tanto, no se puede declarar con


argumentos posicionales sin nombre. El argumento de la palabra clave de dirección se utiliza para
especificar el flujo de información de un sufijo cuando se interactúa con un solucionador. Este
argumento puede ser uno de cuatro valores posibles:

• Suffix.LOCAL: los datos del sufijo son locales para el modelo. Los complementos de
solucionador no lo importan ni exportan y es el predeterminado.
• Suffix.IMPORT: Los datos de sufijo se importarán desde los solucionadores al modelo mediante
complementos de solucionadores.
• Suffix.EXPORT: Los complementos exportarán los datos del sufijo del modelo al solucionador.
• Suffix.IMPORT EXPORT: Los complementos del solucionador importan y exportan los datos del
sufijo.

No todos los complementos de solucionador están garantizados para administrar el flujo de


información de sufijo, pero el usuario controla este flujo de información configurando componentes
de sufijo.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix

El argumento de la palabra clave del tipo de datos especifica el tipo de datos contenidos en el sufijo.
Este argumento puede ser uno de tres valores posibles:

• Suffix.FLOAT: datos de coma flotante (predeterminado).


• Suffix.INT: datos enteros.
• Ninguno: cualquier tipo de datos.

Este argumento puede ser opcional para algunas interfaces de solucionador; sin embargo, exportar
datos de sufijos con solucionadores usando la interfaz de archivo nl requiere que todos los sufijos de
exportación activos tengan un tipo de datos estricto (es decir, la palabra clave del tipo de datos no
puede ser Ninguno).

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix

El siguiente ejemplo ilustra varias declaraciones de sufijos:

No se garantiza que los sufijos sean compatibles con todos los complementos de solucionador en Pyomo.
Si un sufijo determinado es aceptable o no depende de la interfaz del solucionador y del solucionador que
se utilicen. En algunos casos, un complemento de solucionador generará una excepción si encuentra un
tipo de sufijo que no maneja, pero esto no es cierto en todas las situaciones. Por ejemplo, la interfaz de
archivo nl es genérica para todos los solucionadores compatibles con AMPL, por lo que Pyomo no tiene
forma de validar que un sufijo de un nombre, dirección y tipo de datos dado es apropiado para un
solucionador. Se debe tener cuidado al verificar que las declaraciones de sufijos se manejen como se
espera cuando se cambia a un solucionador o interfaz de solucionador diferente.

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix

El argumento de palabra clave initialize se puede utilizar para definir valores de sufijo. Este argumento
especifica una función que se ejecuta cuando se construye el modelo. Esta función devuelve una lista
o iterable de tuplas (componente, valor).

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN
Trabajar con Suffix
Considere el siguiente ejemplo:

Este ejemplo incluye dos componentes variables, indexados y no indexados, junto con un componente de
sufijo. Conceptualmente, la declaración del sufijo foo permite la asociación de foo con cada componente
del modelo. Por ejemplo:

Los valores de sufijo se pueden asignar con un valor de sufijo establecido y se puede acceder a ellos con
obtener un valor de sufijo. Este ejemplo ilustra dos formas de especificar el mismo sufijo: con un
nombre y con un objeto componente de sufijo. CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN
Trabajar con Suffix
Los valores de sufijo para componentes indexados también se pueden asignar con un valor de sufijo
establecido:

Este ejemplo ilustra cómo se usa establecer valor de sufijo para establecer el valor de un componente
indexado y un objeto de datos de un solo componente. Cuando se llama a establecer un valor de sufijo
para un componente indexado, de forma predeterminada establece valores de sufijo para todos los
elementos o índices del componente, en lugar del componente en sí. Debido a esto, cuando
intentamos recuperar el valor del sufijo para el componente model.y, encontramos que es None.
CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN
Trabajar con Suffix
Los valores de sufijo también se pueden borrar, lo que equivale a establecer el valor Ninguno:

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

COMPONENTE Suffix

El argumento de palabra clave initialize se puede utilizar para definir valores de sufijo. Este argumento
especifica una función que se ejecuta cuando se construye el modelo. Esta función devuelve una lista
o iterable de tuplas (componente, valor).

CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

USANDO SOLVERS

la función SolverFactory se usa para construir un objeto de interfaz de solucionador. El argumento que
se pasa a la fábrica de solucionadores especifica el nombre del solucionador que se está utilizando. En
la mayoría de los casos, este es el nombre del ejecutable que se utilizará para resolver el problema; sin
embargo, Pyomo admite nombres más cortos para algunos solucionadores. Por ejemplo, el
solucionador GLPK se puede especificar con

Una vez que se ha construido un objeto solucionador, el solucionador puede invocarse llamando al
método solve(). El método solve() acepta varios argumentos de palabras clave, algunos de los cuales
se muestran aquí, más o menos en orden de importancia.
• options: un diccionario de opciones que se pasará al solucionador subyacente.
• tee: si este argumento es Verdadero, la salida del solucionador se imprime tanto en la salida
estándar como se guarda en el archivo de registro. Si es False (el valor predeterminado), la salida
del solucionador solo se guarda en el archivo de registro si el solucionador crea uno.
• Load_solutions: si este argumento es Verdadero (el valor predeterminado), los valores de la
solución se transfieren automáticamente a los objetos Var en el modelo. Si es False, el objeto de
resultados conserva una representación sin formato de las soluciones y no se transfiere al modelo.
Se puede transferir al modelo utilizando el método model.solutions.load from (). CD - PASCO
LENGUAJES DE MODELADO PARA OPTIMIZACIÓN

USANDO SOLVERS
• logfile: el nombre de archivo utilizado para almacenar la salida para los solucionadores de shell.
• solnfile: el nombre de archivo utilizado para almacenar la solución para los solucionadores de shell.
• timelimit: el número de segundos que se ejecuta un solucionador de shell antes de que finalice. (el
valor predeterminado es Ninguno)
• report_timing: si este argumento es Verdadero, el solucionador informa la información de tiempo
(el valor predeterminado es Falso)
• solver_io: especifica una interfaz de solucionador alternativa, p. Ej. solucionador io = "nl".
• suffixes: una lista de sufijos que se exportan al solucionador.

CD - PASCO

También podría gustarte