Optimización
de Procesos
Tier II: Casos de Estudio
Sección 1:
Software de Optimización Lingo
Software de Optimización
• Muchos de los métodos de optimización
previamente vistos pueden ser tediosos y
requieren mucho trabajo para resolverse,
especialmente cuando los modelos se
vuelven más complejos y tienen dos o tres
variables, que será el caso frecuentemente.
• Un Software puede ser usado para resolver
estos problemas más eficientemente
Software de Optimización
• Los Softwares disponibles comúnmente
usan los métodos revisados previamente,
pero por supuesto llevan a cabo los
cálculos más rápido, permitiendo
fácilmente el efecto de variaciones en el
modelo a ser estudiado
Software de Optimización
• Ya se han mostrado algunos ejemplos de
optimización usando Excel
• Otro programa, Lingo, será mostrado a
continuación
• Una versión de prueba de ese software
puede ser descargada en el sitio
www.lindo.com/cgi/frameset.cgi?leftlingo.h
tml;lingof.html
Lingo
• Lingo es un programa diseñado
específicamente para resolver problemas
de optimización
• Usa una sintaxis que es similar a lo que
sería escrito a mano, o a lo que sería
usado en Excel, sin requerir variables a
ser declaradas
• Por ejemplo, y = 3*x^2 es y = 3x2
Operadores Lingo
• Muchos de los operadores Matemáticos
de Lingo son similares a los que usa
Excel:
– Adición: +
- Multiplicación: *
– Sustracción: - División: /
– Para exponentes: X^n
– Igual: =
– Mayor o menor que: > o <
• Nota: Lingo acepta ‘<’ como ‘<=’. Esto no es
estrictamente menor que o mayor que.
Operadores Lingo
(Continuación)
• Valor absoluto de x: @abs(x)
• Logaritmo Natural de x: @log(x)
• Funciones Trigonométricas: @sin(x),
@cos(x), @tan(x) (x in radians)
• Exponenciales: @exp(x)
• Dar la porción entera de un número
decimal: @floor(x)
• @sign(x): da -1 si x < 0, de otra manera
da 1
Operadores Lingo
(Continuación)
• Encontrar el valor mayor o menor en un
grupo: @smax(x1,x2…,xn) o
@smin(x1,x2…,xn)
• Encontrar el máximo o mínimo de una
función: max o min
• Permitir variables negativas: @free(x)
• Lingo contiene otros operadores, pero
estos son los operadores matemáticos
probablemente más usados
Usando Lingo
• Otros operadores, como los operadores lógicos,
pueden encontrarse en la lista completa de
operadores en el archivo ayuda (help)
• Ahora que tenemos los operadores matemáticos
más usados, podemos demostrar como Lingo
trabaja con algunos ejemplos
• Lingo puede ser usado estrictamente como un
solver de ecuaciones o como un optimizador
Pantalla de Lingo
Si se requiere ayuda
adicional
Solve – para resolver
el grupo de
problemas actuales
Estas son las funciones más importantes de Lingo, y probablemente las
únicas que necesitarás;
Solver de Ecuaciones Básicas
Exclamación para una línea de comentario;
Cada línea debe terminar con un punto y coma;
Este encontrará la intersección
de las líneas “y = 3x + 4” y
“y = 5x + 1”
Solución
Solución Factible encontrada en la iteración:
Nota: Lingo no distingue entre letras
mayúsculas y minúsculas
Solver de Ecuaciones #2
! Esto es para encontrar donde la línea “y = x” cruza la parábola “y = (x – 5) ^ 2” ;
Solución #2
Solución Factible encontrada en la iteración:
Solo una solución fue encontrada.
Deben existir dos soluciones para
este problema. El solver
automáticamente se detiene
cuando encuentra la primera
solución.
116
Solución #2
20
15
10
Y
7.791
5
3.2087
0
-5
0
5
10
-5
3.2087
X
7.791
15
Dificultades No Lineales
• Lingo no está diseñado para tratar con
ecuaciones no lineales
• No puede encontrar soluciones múltiples
• Existe un inconveniente al resolver
problemas no lineales, especialmente si la
solución se encuentra en el dominio
negativo
Máximo y Mínimo
• Las funciones máximo y mínimo son las
funciones más importantes necesarias
para problemas de optimización
• Estas funciones son usadas como sigue:
max = función objetivo;
min = función objetivo;
Resolviendo Problemas de
Optimización
• Varios ejemplos de optimización que se
trabajaron en secciones previas ahora
serán resueltos usando Lingo
• El primer ejemplo es de la sección de
introducción
Ejemplo de Planta Química
• Objetivo: Maximizar 1000x1 + 1500x2
• Restricciones:
4x1 + 2x2 <= 80
2x1 + 5x2 <= 60
4x1 + 4x2 <= 75
x1, x2 >= 0
Ejemplo de Planta Química
! Problema# 1;
! Función Objetivo;
! Restricciones;
Solución de Lingo
Solución,
incluyendo el valor
de la función
objetivo en el
óptimo y en el
punto óptimo
Problema de Esquema de
Transportación
! Problema# 2;
! Función Objetivo;
! Restricciones;
Solución del Problema #2
Valores Negativos
• Lingo no puede resolver automáticamente para
una variable negativa
• Si se sospecha que una solución será negativa,
entonces esa variable necesitará ser declarada
específicamente como libre (free) :
@free(x);
• Es una buena idea declarar todas las variables
como se indicó arriba, a menos por supuesto
que un valor negativo no sea factible
Intentando Obtener una
Solución Negativa
• El siguiente ejemplo demostrará que pasa
si un valor negativo es requerido para
obtener una solución óptima
• Lingo automáticamente resolverá para la
solución óptima obtenida solo de variables
positivas, incluso si éste no es el
verdadero óptimo
Intentando Obtener una
Solución Negativa
! Muestra # 6;
! Función Objetivo;
! Restricciones;
Intentando Obtener una
Solución Negativa
Esta solución es
viable si los
valores de la
variable deben
ser positivos,
pero éste no es
el óptimo
verdadero
Intentando Obtener una
Solución Negativa
! Muestra # 6;
! Función Objetivo;
! Restricciones;
Estos enunciados permiten el
uso de valores negativos para
estas variables
Intentando Obtener una
Solución Negativa
Ahora el óptimo
verdadero es
obtenido, con
variables
negativas
Mayor que o Menor que
• Otro problema potencial que será
encontrado al usar Lingo es que éste maneja
< de igual manera que <=, y > igual que >=
• Por lo tanto, si una variable debe ser
estrictamente mayor que un valor, la
restricción debe ser tratada como sigue:
– Para x > A, donde A es una solución diferente usa
x > A + b;
donde b es un valor arbitrario, como 0.1, que cubre
una porción donde la solución no se encuentra
Ejemplo de < o >
! Muestra # 3;
! Función Objetivo;
! Restricciones;
Ejemplo de < o >
Claramente, este
valor no es
correcto puesto
que X1 está
restringida a
valores mayores
que 0
Ejemplo de < o >
! Muestra # 3;
! Función Objetivo;
! Restricciones;
Ahora se forzará a X1 y X2 a
ser mayores que 0. Podemos
hacer esto porque sabemos
que X1 y X2 también son
mayores que 0.1.
Ejemplo de < o >
Las variables
ahora obedecen
las restricciones
deseadas. Es una
coincidencia que el
valor objetivo sea
el mismo que en el
caso anterior.
Conclusiones
• Lingo es efectivo y eficiente para la resolución
de problemas de optimización si éstos son
lineales
• No está diseñado para trabajar con problemas
no lineales
• No es muy bueno para trabajar con problemas
no lineales, por lo que éstos deben ser atacados
con precaución
• No maneja muy bien los puntos múltiples
máximos o mínimos en casos no lineales
Descargar

Slide 1