Estos apuntes son libres y los puedes editar.

Algunas secciones están en inglés puedes colaborar traduciendo algunos párrafos.

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
lingo [2008/10/15 21:56]
mmarquez
lingo [2008/10/29 11:23] (actual)
mmarquez
Línea 43: Línea 43:
   * Que el problema es no acotado, "Unbounded solution"   * Que el problema es no acotado, "Unbounded solution"
   * Que no se ha encontrado un punto factible, "No feasible solution found". En programación matemática lineal esto implica que el problema es infactible.   * Que no se ha encontrado un punto factible, "No feasible solution found". En programación matemática lineal esto implica que el problema es infactible.
 +
 +===== Sintaxis Avanzada =====
  
 ==== Formato de ficheros ==== ==== Formato de ficheros ====
Línea 76: Línea 78:
    ENDSETS    ENDSETS
 se define un conjunto asignacion cuyos índices son una máquina y una tarea. se define un conjunto asignacion cuyos índices son una máquina y una tarea.
 +
 +=== Bloque Principal ===
 +
 +En este bloque se define el problema a resolver.
  
 === Bloque DATA === === Bloque DATA ===
Línea 88: Línea 94:
 Si w fuese una variable con dos índices los valores a asignar se especifican de forma consecutiva fila tras fila. Si w fuese una variable con dos índices los valores a asignar se especifican de forma consecutiva fila tras fila.
  
-===== Sintaxis Avanzada =====+El bloque data permite que los valores de los parámetros sean especificados de forma interactiva, sustituyendo los valores por el símbolo ?. Un ejemplo de uso es {{lingo:max_flu.lng}} donde los valores ''fuente'' y ''sumidero'' se introducen de forma interactiva. 
 + 
 +=== Bloque INI === 
 + 
 +Se especifican los valores iniciales para las variables. 
 + 
 +==== Importación de datos ==== 
 + 
 +=== Ficheros de texto === 
 + 
 +En el fichero del modelo se puede insertar porciones texto de un fichero externo. El uso habitual de esto es la separar la formulación y los datos en dos ficheros distintos. 
 + 
 +Un ejemplo de uso es {{lingo:max_flu_mul.lng}} que importa los datos de {{lingo:max_flu_mul.dat}}. 
 + 
 +===  Hoja de cálculo === 
 + 
 +Para importar datos de una hoja de cálculo de "Microsoft Excell" en el párrafo data se utiliza la instrucción 
 +   nombre_variable = @ole("nombre_fichero",nombre_rango) 
 +donde: 
 +   * ''nombre_variable'' es la variable que recibe los datos. 
 +   * ''nombre_fichero'' es el nombre del fichero del que se importan los datos. 
 +   * ''nombre_rango'' es el nombre del rango de los datos que debe importarse, dicho nombre ha de ser previamente definido en el fichero. Para definir nombre_rango en la hoja de cálculo se seleccionan sucesivamente las opciones Insertar->Nombre->Definir y se introduce el nombre y se seleccionan las casillas correspondientes.  
 + 
 +Un ejemplo de este uso es {{lingo:minisum.ole.lng}} que importa los datos del fichero {{lingo:demanda.xls}}. 
 + 
 +==== Exportación de resultados ====
  
 ===== Modelos ===== ===== Modelos =====
 +
 +==== Modelos de localización ====
 +
 +=== Problema de localización minisum ===
 +
 +Encontrar el punto que minimiza la suma de distancias a los puntos (6,10) (5,2) (2,8) (0,2) (4,2)
 +
 +Solución: {{lingo:minisum_noponderado.lng}}
 +
 +=== Problema de localización minisum ponderado ===
 +
 +Encontrar el punto que minimiza la suma de distancias ponderadas a los puntos (6,10) (5,2) (2,8) (0,2) (4,2) con pesos 0.2, 0.6, 0.5, 0.3, 0.7
 +
 +Solución: {{lingo:minisum_ponderado.lng}}
 +
 +Problema de localización minisum ponderado con datos externos del fichero {{lingo:demandas.xls}}
 +
 +Solución: {{lingo:minisum.ole.lng}}
 +
 +=== Problema de localización minimax ===
 +Encontrar el punto que minimiza la mayor de las distancias al punto a localizar.
 +
 +Solución: {{lingo:minimax.lng}}
 +
 +Problema de localización minimax con datos externos del fichero {{lingo:demandas.xls}}
 +
 +Solución: {{lingo:minimax.ole.lng}}
 +
 +==== Caminos Mínimos en grafos ====
 +
 +Dada la matriz de distancias:
 +
 +|    |  4 |  6 |    |    |    |
 +|  3 |    |  2 | 12 |    |    |
 +|  5 |  3 |    |  4 |  9 |    |
 +|    | 10 |  4 |    |  5 |  1 |
 +|    |    |  8 |  4 |    |  2 |
 +|    |    |    |  1 |  3 |    |
 +
 +  * Formular y resolver el problema de encontrar el camino más corto que une los vértices 1 y 6.
 +
 +Solución: {{lingo:camino_minimo.lng}}
 +
 +  * Modificar la formulación para que se pregunte interactivamente el nodo de origen y el de destino.
 +
 +Solución: {{lingo:camino_minimo_1.lng}}
 +
 +  * Modificar la formulación planteando el problema como un problema de asignación.
 +
 +Solución: {{lingo:camino_minimo_2.lng}}
 +
 +  * Modificar la formulación para calcular las longitudes de todos los caminos mínimos entre todos los pares de nodos.
 +
 +Solución: {{lingo:camino_minimo_3.lng}}
 +
 +==== Problemas de flujo máximo ===
 +
 +El problema de máximo flujo en un grafo consiste en dadas unas restricciones de capacidad en cada uno de los arcos del grafo y dados un nodo origen, llamado //fuente// y uno destino, llamado //sumidero//. Encontrar el flujo que debe circular por cada arco para maximizar el flujo entrante en el sumidero.
 +
 +  * Formular el problema de flujo máximo para un grafo de forma que la fuente y el sumidero se especifiquen de forma interactiva.
 +
 +Solución: {{lingo:max_flu.lng}}
 +
 +   * Formular el problema de flujo máximo admitiendo que cada nodo tiene asignada una capacidad de generación y resolverlo usando los datos del fichero {{lingo:max_flu_mul.dat}}.
 +
 +Solución: {{lingo:max_flu_mul.lng}}
 +
  
 ===== Análisis de Sensibilidad ===== ===== Análisis de Sensibilidad =====
 +
 +==== Activar el cálculo de rangos ====
 +
 +Para poder hacer análisis de sensibilidad es necesario activar el cálculo de rangos, se activa:
 +   * Seleccionar ''options'' dentro del menú LINGO
 +   * Selecionar la pestaña ''General Solver''
 +   * En el desplegable ''Dual Computations'' se selecciona ''Prices & Range''
 +   * Pulsar el botón ''OK''
 +
 +==== Análisis de Sensibilidad ====
 +
 +Para realizar un análisis de sensibilidad en LINGO se empieza resolviendo el problema y a continuación se selecciona la opción ''Range'' del menú ''LINGO''. La opción ''Range'' sólo está activa cuando la ventana del modelo está en primer plano y el problema se ha resuelto previamente.
 +
 +Ejemplo:
 +   max=-x1-2*x2-x3;
 +   2*x1+x2+2*x3>6;
 +   x1+3*x2+4*x3>10;
 +
 +Después de resolver y seleccionar la opción ''Range'' se obtiene:
 +
 +   Ranges in which the basis is unchanged:
 +   Objective Coefficient Ranges
 +    
 +       Current     Allowable Allowable
 +   Variable   Coefficient   Increase Decrease
 +   X1        -1.000000      0.7500000 0.0
 +   X2        -2.000000      1.500000    INFINITY
 +   X3        -1.000000      0.0         1.800000
 +   Righthand Side Ranges
 +   Row       Current        Allowable   Allowable
 +             RHS            Increase Decrease
 +           6.000000       14.00000 1.000000
 +           10.00000       2.000000 7.000000
 +
 +Lo que se interpreta como:
 +   0<=Dc1<=.75
 +  -1<=c1<=-.25
 +   Dc2<=1.5
 +   c2<=-0.5
 +   -1.8<=Dc3<=0
 +   -2.8<=c3<=-1
 +   -1<=Db1<=14
 +   5<=b1<=20
 +   -7<=Db2<=2
 +   3<=b2<=12
  
 ===== Bibliografía ===== ===== Bibliografía =====

QR Code
QR Code lingo (generated for current page)