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 = 3x 2
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 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 n Factible encontrada en la iteración: 116 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.
Solución #2 20 15 10 Y 7.791 5 3.2087 0-5 0 5 10 15-5 3.2087 X 7.791
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 1000x 1 + 1500x 2 Restricciones: 4x 1 + 2x 2 <= 80 2x 1 + 5x 2 <= 60 4x 1 + 4x 2 <= 75 x 1, x 2 >= 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