AIMMS
Es un sistema de programa de optimización, que permite por medio de su tecnología de optimización tomar decisiones complejas de forma más eficiente, con el fin de encontrar y analizar sus mejores soluciones.
Uno de los problemas que se pueden programar en esta herramienta son los problemas de transporte, por medio de un ejemplo se observara la forma de resolverlo.
Descripción del problema
Desde dos plantas, se envían camiones de cerveza a cinco clientes durante un periodo de tiempo determinado. La capacidad de suministro de cada planta así como la demanda de cada cliente (medido en camiones de cerveza) son conocidas. Los costes de transporte de un camión cargado al desplazarse desde una planta a un cliente también se conocen.
El objetivo es encontrar un plan de envíos con el mínimo costo de acuerdo con el cual desplazar los camiones de cerveza de tal forma que se satisfaga la demanda y de manera que los envíos no excedan la capacidad de cada planta de cerveza.
Clientes plantas | Costo de transporte unitario Madrid Tarragona Santander Albacete Sevilla | capacidad |
Cáceres | 297 831 573 504 264 | 47 |
Zamora | 248 694 344 499 536 | 63 |
Demanda | 31 16 22 12 28 |
Datos de entrada del problema de la cerveza
Declaraciones del problema:
Índices:
P plantas
C clientes
Parámetros:
Op oferta o capacidad de cada planta p
Dc demanda de cada cliente c
CTpc coste unitario de transporte desde p a c
Variables:
Xpc camiones transportados desde p a c
Z coste total de transporte
Al ser solucionado y analizado, se desea obtener el menor costo de trasporte a las diferentes ciudades y además que se cumpla con la demanda, por lo tanto se obtiene lo siguiente.
Minimize: pcxpc
Subject to:
xpc ≥ 0 ∀p, c
Ya es de suponer que se tiene el programa de AIMMS instalado en el ordenador, por lo tanto se procede a introducir los índices:
1. Abrimos la declaration section, haciendo doble clic en el icono.
Después de haber abierto la declaration se activaran los iconos en la barra de herramientas. Esto es con el fin de insertar el identificador estándar.
2. A continuación se agregan el conjunto de plantas de la siguiente manera.
Presiona el botón Set . Se crea un nuevo conjunto de árbol de modelo
el nombre a colocar es “planta” y se prosigue a dar enter con el fin de confirmar.
3. Declaramos el índice p como un atributo del conjunto de plantas.
Entonces se abre la ventana realizando doble clic en el nodo “plantas”. Quedara de la siguiente manera.
Entonces declaramos el índice p.
Moviendo el cursor al campo “Index”, y se da clic en el campo vacio. Donde se procede a colocar la letra “p” y ce cierra la ventana presionando el icono que tiene por nombre Check, commit and close.
3. Ahora se declaran el conjunto de clientes, a donde van los productos, a esta declaración se le denotara con la letra “c” de la misma forma que se declaro el conjunto de plantas con el índice “p”. el árbol va quedando de la siguiente manera.
4. Ahora se procede a declarar los parámetros, se relaiza d ela misma forma en la que se declaran los conjunto “plantas y clientes”.
Entonces introducimos el parámetro de “oferta “. Se realiza de la siguiente forma:
Se presiona el icono de introducir un parámetro . En el árbol de modelo se abrirá un nuevo parámetro la cual se llamara “oferta (p)” y se presiona enter para confirmar o registrar el nombre
El identificador p que esta dentro de el paréntesis es el indicador de oferta.
De la misma forma se realiza en el árbol un nuevo parámetro pero ahora es llamado “demanda(c)”
5. Ahora se procede a declarar los parámetros, se relaiza d ela misma forma en la que se declaran los conjunto “plantas y clientes”.
Entonces introducimos el parámetro de “oferta “. Se realiza de la siguiente forma:
Se presiona el icono de introducir un parámetro . En el árbol de modelo se abrirá un nuevo parámetro la cual se llamara “oferta (p)” y se presiona enter para confirmar o registrar el nombre
El identificador p que esta dentro de el paréntesis es el indicador de oferta.
De la misma forma se realiza en el árbol un nuevo parámetro pero ahora es llamado “demanda(c)”
6. Se introduce el ultimo parámetro la cual es lo que se desea buscar, este se llamara “costo unitario Transporte” este parámetro es de dos dimensiones (P,c), se ingresa con el siguiente nombre .”costo Unitario Transporte (p,c), por lo tanto el árbol de decisión queda de la siguiente forma.
Esta variable es utilizad apara dar el valor de la función objetivo.
7. Se ingresan las variables, es de la misma forma de ingresar los parámetros.
Se presiona el icono . Se creara una variable nueva en el árbol de modelo, la cual se
Llamara “Transporte (p,c)” y se presiona enter para confirmar el nombre.
8. Ahora se hace click ene le nodo de “trasporte” en el árbol . La ventana de dialogo resultante permite especificar el rango de valores que puede tener la variable “trasporte”.
En este caso se selecciona el “ standard Range” y “nonnegative”. Y se termina dándole click en ok
9. Ahora se introduce la definición variable
sum[ (p,c), UnitTransportCost(p,c) * Transport(p,c) ]
10. Introducimos las restricciones de oferta y demanda, cada una con su propia definición
Se realiza el mismo procedimiento de las variables con la única diferencia del icono en este caso se hace click en el icono
La restricción oferta
Restricción demanda, de esta forma quedara
11. Seleccionar la entrada ‘Mathematical Program’ mediante el icono . Se presiona el botón ok y se procede a escribir “planminimocostoTransporte”
12. Se rellena la ventana de características del programa
13. El asistente para la definición objetivo, requiere seleccionar una variable escalar. Se realiza de la siguiente forma
14. Introducimos ahora los datos que nos brinda el problema.
Los datos del conjunto de plantas se ingresan de la siguiente forma.
Se abre la ventana de carácter del conjunto plantas y se presiona el botón Data
Mueve el ratón a la página de datos tal, se le da clic en el campo vacío en la parte superior de la pagina y se procede a escribe ‘Caceres’ como primer elemento del conjunto y enter.
luego Zamora, enter y así sucesivamente con el resto de datos
15. Se ingresan los elementos del conjunto clientes de la misma formas de el conjunto plantas,
16. Ingresamos los datos que van relacionados con los parámetros.
Parámetro ‘Oferta’.
Abre la ventana de características del parámetro ‘Oferta’,
Presiona el botón Data ,
Mueve el raton a la primera celda y haz clic,
Escribe el numero 47,
Presiona la tecla Enter para registrar el primer valor,
Escribe el número 63,
Presiona la tecla Enter para registrar el segundo valor, y
Cierra la pagina de datos presionando el boton Close
17. Ingresan los valores de los parámetros de demanda de la misma forma que se han ingresado los de la oferta De esta forma se verán los datos.
18. Se procede a guardar el problema o cambios relazados mediante el icono Check, commit and close
19. Calculo de la solución
Ya obtenemos el resultado que nos ofrece el problema se introduce
Dos líneas de código dentro del cuerpo del procedimiento MainExecution que
Existe por defecto (y que esta vacío).
Hacer clic en la variable MainExecution en el árbol del modelo.
Es la solución del problema mostrado dando clic derecho, ventana emergente y comando
Data.
El resultado obtenido es que Cáceres envía 6 unidades a Madrid, 12 Albacete y 28 a Sevilla.
Y Zamora envía 25 unidades a Madrid 16 Tarragona y 22 a Santander.