






























Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Matematicas I, Profesor: Manuel Mocholí, Carrera: Economia, Universidad: UV
Tipo: Apuntes
1 / 38
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!































................................................................................................................................ 3 ....................................................................................... 4 ....................................................... 7 .............................................................. 9
4.1 Inclusión de texto ........................................................................................................................ 9
4.2 Opciones ................................................................................................................................... 10
4.3 Declaración de variables ........................................................................................................... 10
4.4 Declaración de ecuaciones ........................................................................................................ 11
4.5 Declaración de modelos ............................................................................................................ 12
4.6 Solución de modelos ................................................................................................................. 13
........................................................................................... 13 ......................................................................................................... 14 ........................................................................................................ 17 ........................................................ 18
8.1 Declaración de conjuntos .......................................................................................................... 19
8.2 Declaración de escalares ........................................................................................................... 20
8.3 Declaración de vectores ............................................................................................................ 20
8.4 Declaración de Matrices............................................................................................................ 21
8.5 Declaración de variables indexadas .......................................................................................... 22
8.6 Declaración de ecuaciones indexadas ....................................................................................... 23
8.7 Comprobación del modelo y lectura del fichero LST ............................................................... 24
8.8 Comando display ...................................................................................................................... 26
8.9 Operador condicional $ ............................................................................................................. 28
.................................................................... 30 ...................................................................................... 32
10.1 Cotas sobre las variables ........................................................................................................... 32
10.2 Tolerancia ................................................................................................................................. 32
................................................................................................ 33
11.1 Punto de inicio .......................................................................................................................... 35
..................................................................... 37
Para la instalación de la última versión “demo”, de gams hay que acceder a la página http://gams.com/download/ y elegir la versión que corresponda
Una vez, descargado el fichero ejecutable la instalación es muy sencilla, basta ejecutar dicho fichero y seguir la secuencia siguiente
Una vez instalado el programa, este se ejecuta desde el icono creado en el escritorio o desde el menú de programas. La ejecución de GAMS por defecto se realiza en la misma carpeta donde se ha instalado y durante la ejecución además de los ficheros fuente (gms) que nosotros creamos y los de solución (LST), GAMS genera otros ficheros y carpeta que al finalizar elimina y otros que mantiene como lxi,*log, motivo por el cual la carpeta de instalación después de un tiempo de uso puede contener innumerables ficheros que no corresponden a la instalación, Por este motivo resulta conveniente cambiar el directorio de trabajo por defecto, creando un nuevo proyecto, lo cual se realiza a partir de la pantalla de inicio
Se selecciona file / Project /New Project
En esta pantalla se elige el directorio de trabajo deseado, en nuestro caso Problemas GAMS y se introduce el nombre que se quiera para el proyecto, en nuestro caso proyecto El proyecto además de guardar la configuración del directorio de trabajo, también permite guardar nuestra configuración personal sobre márgenes, tipos y tamaño de letra, colores, solvers, etc.
Una empresa produce tres modelos (modelo1, modelo2 y modelo 3) de estructuras metálicas. La fábrica tiene cuatro secciones, el número de horas necesarias de cada sección para producir cada modelo, así como las disponibilidades, aparecen reflejados en la siguiente tabla.
Necesidades (horas/unidad) Sección Modelo 1 Modelo 2 Modelo 3 Horas dis. Cortar 0’02 0'04 0'01 500 Ensamblar 0’04 0’03 0'04 600 Pintar 0'03 0'03 0'02 500 Montar 0'05 0'04 0'04 1000
Además dispone de 70000 m^2 de chapa metálica para la semana próxima. En cada modelo se utilizan 6, 5 y 4 m^2 , respectivamente. La demanda mínima semanal de cada modelo así como los precios de venta y el coste unitario variable, son:
Modelo Precio vta Coste var. Dem. min 1 100 30 1000 2 120 35 1000 3 75 25 1000
Determinar la cantidad a producir de cada modelo para maximizar el beneficio, teniendo en cuenta la limitación de chapa y sin ella.
Para poder plantear matemáticamente nuestro problema lo primero que hemos de averiguar es cuál es la variable dependiente (objetivo) que pretendemos maximizar o minimizar y como la vamos a denominar, en nuestro caso como el objetivo que pretende la empresa es maximizar el beneficio que podrá obtener la próxima semana. Declararemos la variable
B beneficio de la próxima semana en euros
Las variables deben representar las decisiones que podemos tomar con el fin de alcanzar
el objetivo previsto. En nuestro problema lo que podemos decidir es el número de
unidades a producir de cada modelo de estructura lo cual determinará el beneficio que se
obtendrá, por tanto las variables serán
M1 número de estructuras metálicas a producir del modelo 1 la próxima semana
M2 número de estructuras metálicas a producir del modelo 2 la próxima semana
M3 número de estructuras metálicas a producir del modelo 3 la próxima semana
Dado que se trata estructuras a producir, es evidente que no pueden tomar valores
negativos (M1≥0, M2≥0, M3≥0) en principio suponemos que las estructuras que no se
terminan esta semana se terminan la próxima y por tanto admitimos variables continuas,
posteriormente se considerará el caso en que no se admita producción en curso y por tanto
las variables sean enteras.
Cotas sobre variables
De cada tipo de estructura se nos dice que no se pueden producir menos de 1000 unidades,
por tanto las variables están acotadas inferiormente, es decir
M1≥1000 M2≥1000, M3≥
ECUACIONES
El siguiente paso consiste en identificar (asignándoles nombre) todas aquellas limitaciones que hacen que la empresa no puede construir un número ilimitado de estructuras de cada modelo. Así pues, como limitaciones se tienen
Corte máximo 500 h semanales en la sección de corte Ensamblaje máximo 600 h semanales en la sección de ensamblaje Pintura máximo 500 h semanales en la sección de pintura Montar máximo 1000 h semanales en la sección de montaje Chapa máximo 70.000 m^2 de chapa para la próxima semana Objetivo ecuación para calcular el beneficio de la próxima semana B
Además de las limitaciones, hay que introducir otra ecuación adicional que permita calcular el valor de la variable dependiente B.
Una vez identificadas las variables y las limitaciones, el siguiente paso consiste en escribir cada una de las limitaciones y el objetivo en función de dichas variables:
Corte.. 0.02M1+0.04M2+0.01*M3 ≤ 500 Ensamblaje.. 0.04M1+0.03M2+0.04*M3 ≤ 600 Pintura.. 0.03M1+0.03M2+0.02*M3 ≤ 500 Montar.. 0.05M1+0.04M2+0.04*M3 ≤ 1000
Existen una gran cantidad de opciones disponibles en GAMS, pero en este apartado únicamente nos referiremos a aquellas que utilizaremos con más frecuencia. Opciones para elegir el solver a utilizar: OPTION LP=CPLEX MIP=CPLEX NLP=MINOS; Con estas tres opciones le estamos indicando a GAMS que cuando el problema a resolver sea lineal (LP) o lineal entero (MIP) utilice como solver el CPLEX, y cuando sea no lineal (NLP) utilice el MINOS. Otras opciones pueden ser para ajustar el margen de tolerancia para problemas lineales enteros (por defecto el 10%): OPTION OPTCR=0.01; Para ajustar el número de restricciones o variables a visualizar de cada bloque en el fichero LST en los modelos indexados OPTION LIMROW= LIMCOL=7; Para ajustar el número de decimales a mostrar con el comando DISPLAY OPTION DECIMALS=2;
Hay cinco tipos básicos de variables que podemos utilizar
COMANDO
Cota Inferior
Cota Superior Los valores de las cotas pueden ser cambiados Free -∞ +∞ Por defecto si se pone variables son free Positive 0 +∞ Negative -∞ 0 Binary 0 1 Variables que sólo pueden tomar el valor 0 ó 1 Integer 0 100 valores enteros no negativos
La introducción de las variables se inicia con el comando correspondiente a cada tipo de variable. Positive variables, binary variables, etc. y a continuación se introduce el nombre de cada variable (hasta 63 caracteres máximo, empezando por una letra) y a continuación se puede poner un texto explicativo de lo que representa la variables. Las variables pueden definirse una por línea (recomendado) o separadas por comas. En GAMS la variable dependiente que hay que optimizar obligatoriamente debe ser una variable libre. Las variables correspondientes a nuestro ejemplo se introducen del siguiente modo
VARIABLES B beneficio semanal en euros;
POSITIVE VARIABLES M1 número de estructuras metálicas a producir del modelo 1 la próxima semana M2 número de estructuras metálicas a producir del modelo 2 la próxima semana
M3 número de estructuras metálicas a producir del modelo 3 la próxima semana ;
Obsérvese que el final de cada bloque se indica con ;
Sufijos Sobre las variables
.LO Cota Inferior .UP Cota Superior .FX Para fijar el valor de una variable .L Devuelve el valor de una variable o permite inicializarla .M Devuelve el marginal de una variable
La forma de utilizar los sufijos es poniendo el nombre de la variable, el punto, el sufijo e indicando igual al valor que corresponda. En nuestro ejemplo todas las variables están acotadas inferiormente por el valor 1000, por tanto habría que añadir
M1.LO =1000; M2.LO =1000; M3.LO =1000;
Si alguna de ellas tuviera una cota superior, por ejemplo producir 10000 unidades máximo de M3 se pondría
M3.UP=10000;
Al igual que se ha realizado en el modelado del problema, en GAMS también hay que indicar en primer lugar los nombres que vamos a utilizar para denominar a cada restricción y a la función objetivo y a continuación ya se expresan matemáticamente cada ecuación. Así pues el bloque de ecuaciones comienza con el comando EQUATIONS a continuación se declaran los nombres (hasta 63 caracteres) que vamos a utilizar para cada ecuación que pueden ir seguidos opcionalmente (recomendado) de un texto explicativo
EQUATIONS Corte máximo 500 h semanales en la sección de corte Ensamblaje máximo 600 h semanales en la sección de ensamblaje Pintura máximo 500 h semanales en la sección de pintura Montar máximo 1000 h semanales en la sección de montaje Chapa máximo 70.000 m2 de chapa para la próxima semana Objetivo ecuación para calcular el beneficio de la próxima semana B ;
MODEL CON_CHAPA modelo que tiene en cuenta todas las limitaciones /ALL/;
Cuando el modelo incluye todas las limitaciones no es necesario escribirlas todas de forma explícita basta con poner ALL.
Dado que se pueden declarar varios modelos en el mismo fichero también es necesario decirle cuáles de ellos queremos que resuelva. Para indicarle que resuelva un modelo la instrucción comienza con el comando SOLVE, seguido del NOMBRE del modelo que se quiere resolver a continuación el comando USING ó US le indica el tipo de solver a utilizar según el tipo de problema a resolver LP, MIP, NLP, etc y por último la dirección de optimización MAXIMIZING (MAX) o MINIMIZING (MIN) seguido de la variable dependiente a optimizar. En el ejemplo que se plantea como los modelos a resolver son de programación lineal (LP) sería
SOLVE SIN_CHAPA USING LP MAXIMIZING B; SOLVE CON_CHAPA US LP MAX B;
El fichero fuente Produccion_1.gms después de introducir todos los apartados quedaría del siguiente modo
La ejecución de este fichero se puede realizar de varias formas
Pulsando la tecla de función “F9” Haciendo clic con el botón izquierdo del ratón sobre el icono con una flecha roja
Desde el menú File Run
Una vez ejecutado el fichero por cualquiera de los procedimientos anterior aparecerá una pantalla en la cual, tendremos una ventana donde además de la pestaña correspondiente al fichero Produccion_1.gms, tendremos otra visible con el fichero producción_1.lst y a la derecha otra ventana con el fichero Produccion_1.log. similar a la siguiente
Si se han cometido errores en la introducción del fichero en esa ventana aparecerán unas líneas en rojo que indican los errores cometidos, cuando se tiene un mayor conocimiento
El error 96 GAMS sugiere que es debido a que
falta un espacio en blanco entre el identificador y el texto Este error se produce cuando introducimos un nombre de variable, ecuación, etc y su explicación o un comando y texto todo junto, lo cual no es el caso dado que la ecuación se ha de deficnir con el nombre seguido de ..
Carácter ilegal en el identificador En la palabra corte no hay ningún carácter ilegal (acento, ñ,@, etc)
Compruebe si falta un ; en una línea anterior Efectivamente el bloque de declaración hay que finalizarlo con un ; por eso al no haberlo puesto intenta leer corte.. como una nueva ecuación y en ese caso el nombre corte si que debe ir separado del texto o .. es ilegal.
Una vez que ya sabemos que el error es debido a que falta un ; al final del bloque ecuaciones volvemos al fichero producción_1.gms ponemos el ; en su lugar y volvemos a ejecutar, hasta que ya no aparezcan más errores.
El error 140 de la línea 28 Ensamblaje.. 0.04M+0.03M2+0.04M3 =L= 600; **** $ corresponde a símbolo desconocido y esto es debido a que hemos escrito 0.04M en lugar de 0.04*M
En la línea 29 29 Pintura.. 0.03M1+0.03M2+0.02M3 =L= 500 ; ****** $37,** El error 37 corresponde a que falta un operador , efectivamente no se ha puesto el * es decir 0.02*M
Los errores 257 de las líneas 35 SOLVE SIN_CHAPA USING LP MAXIMIZING B; ****** $** 36 SOLVE CON_CHAPA US LP MAX B; ****** $**
Nos indican que no ha resuelto a causa de errores previos, por lo tanto una vez corrijamos los errores anteriores en el fichero Producción_1.gms y volvamos a ejecutar estos errores desaparecerán.
Si no ha habido errores la solución aparecerá en el fichero Produccion_1.lst en el cual podemos apreciar el bloque de ecuaciones, en la columna LEVEL aparecen las horas o m^2 realmente utilizados y como todas las restricciones eran ≤ en la columna UPPER aparecen las horas o m^2 disponibles, por último la columna MARGINAL corresponde al multiplicador asociado a dicho restricción en el cual nos indica la variación que sufrirá la función objetivo si se incrementa en una unidad el valor del término independiente
LOWER LEVEL UPPER MARGINAL ---- EQU Corte -INF 500.000 500.000 818. ---- EQU Ensamblaje -INF 447.273 600.. ---- EQU Pintura -INF 408.182 500.. ---- EQU Montar -INF 573.636 1000.. ---- EQU Chapa -INF 70000.000 70000.000 10. ---- EQU Objetivo... 1.
Corte máximo 500 h semanales en la sección de corte Ensamblaje máximo 600 h semanales en la sección de ensamblaje Pintura máximo 500 h semanales en la sección de pintura Montar máximo 1000 h semanales en la sección de montaje Chapa máximo 70.000 m2 de chapa para la próxima semana Objetivo ecuación para calcular el beneficio de la próxima semana B
En el bloque de variables, dado que todas eran ≥ 1000 en la columna LOWER aparece el valor 1000, la columna LEVEL indica el número de estructuras que hay que fabricar para maximizar el beneficio, la columna UPPER puesto que las variables no están acotadas superiormente es +INF y por último la columna MARGINAL, en el caso de la variable M1 nos indica que si se pudieran producir menos unidades de dicha estructura por cada unidad menos el beneficio aumentaría en 9,091€
LOWER LEVEL UPPER MARGINAL ---- VAR B -INF 1.1318E+6 +INF. ---- VAR M1 1000.000 1000.000 +INF -9. ---- VAR M2 1000.000 11636.364 +INF. ---- VAR M3 1000.000 1454.545 +INF. B beneficio semanal en euros M1 número de estructuras metálicas a producir del modelo 1 la próxima semana M2 número de estructuras metálicas a producir del modelo 2 la próxima semana M3 número de estructuras metálicas a producir del modelo 3 la próxima semana
**** REPORT SUMMARY : 0 NONOPT 0 INFEASIBLE 0 UNBOUNDED
Puede expresarse como
Y en forma compacta
݆ܾܱ݁ ݒ݅ݐ ܸܲൌ ሺ ܤ (^) ܥ ܲെ (^)
Siguiendo este mismo procedimiento podemos construir en GAMS modelos indexados a partir de la declaración de índices, vectores, matrices, etc
El bloque de conjuntos debe comenzar obligatoriamente con la palabra SET o SETS. La forma de definir los Conjuntos es la siguiente
SET R restricciones /corte,ensamblar,pintar,montar,chapa/ M modelos a producir /Mod1Mod3/*
Donde R es el nombre que hemos dado al conjunto, restricciones es un texto opcional que se puede poner para aclarar qué representa el conjunto R, entre barras, separados por comas (o por salto de línea) se ponen los nombres de los elementos del conjunto R. Los nombres de los conjuntos y los elementos pueden tener una longitud de hasta 63 caracteres, deben comenzar por una letra y sólo pueden contener caracteres alfanuméricos (no ñ ni acentos) Cuando los elementos del conjunto siguen una serie, como en el caso del conjunto M, se pude poner el primer elemento seguido de un * y el último elemento y GAMS generará toda la serie. Ejemplos de SETS abreviados con *
A años /20002004/; L letras /ad/;
O Otros /a1mda4md/; I Inversiones /proy1proy3,inv1*inv4 /;
También se pueden poner comentarios a los elementos del conjunto. El conjunto R se podía haber declarado como
SET R restricciones /corte máximo 500 horas semanales Ensamblar máximo 600 horas semanales Pintar máximo 500 horas semanales Montar máximo 1.000 horas semanales Chapa máximo 70.000 metros cuadrados semanales /
se utilizan para declarar o inicializar constantes y se introducen con el comando SCALAR seguido del nombre que se quiere dar, un texto explicativo opcional y el valor que debe tomar entre //, es decir
SCALAR K Coste de capital /0.065/
PHMO precio de la hora de mano de obra SM sueldo semanal ;
PHMO=10;
SM=40*PH;
El comando PARAMETER puede ser utilizado indistintamente para definir escalares,
vectores y matrices. El bloque comienza con el comando PARAMETER seguido del
nombre que queremos dar al parámetro, entre paréntesis el nombre del conjunto que
indica la dimensión del vector, texto explicativo opcional, y a continuación entre barras
(/) los valores correspondientes a cada elemento del conjunto.
PV(M) precio de venta de cada modelo
/mod1 100
mod2 120
mod3 75/