EER – Economia das Energias Renováveis M t d em Energias Mestrado E i Renováveis R á i (MERCEUS) Introdução ao GAMS General Algebraic Modeling System Jorge Alberto Mendes de Sousa Professor Coordenador Webpage: pwp.net.ipl.pt/deea.isel/jsousa MERCEUS | FCT/UNL -1- Agenda g 1. Enquadramento 2. Exemplo de aplicação 3. Estrutura da programação GAMS 4. Exercício MERCEUS | FCT/UNL -2- Enquadramento q O GAMS ‐ General Algebraic Modeling System é uma linguagem dedicada à modelização de problemas de optimização lineares, não lineares e de programação inteira mista, mista particularmente útil para problemas de elevada dimensão e complexidade. O GAMS permite it ao utilizador tili d concentrar‐se t na modelação d l ã do d problema tornando fácil a sua implementação. O utilizador pode alterar a formulação ç de forma rápida p e simples, p ,p podendo seleccionar e trocar o método numérico de resolução e até mudar um problema linear para não linear sem qualquer problema. A linguagem GAMS é formalmente idêntica a outras linguagens de programação comuns pelo que qualquer utilizador com um mínimo de experiência ê em programação ã se sentiráá familiar f l com o GAMS. MERCEUS | FCT/UNL -3- Exemplo de aplicação O problema de transporte: Formulação ã O problema de transporte é um problema clássico de optimização que consiste em determinar a forma mais eficiente de enviar um bem disponível em quantidades limitadas em determinados locais (oferta) para outros locais onde é necessário (procura). ( ) A formulação do problema passa por programar a distribuição óptima de um produto homogéneo que: a) está disponível em m origens nas quantidades fixas ai > 0 (oferta), com i = 1, 2, …, m; quantidades fixas bj > 0 (p (procura), ) com j b)) é necessário em n destinos nas q = 1, 2, …, n; p os destinos,, esgotando g as c)) deve ser enviado directamente para disponibilidades em cada origem e satisfazendo as necessidades em cada destino. MERCEUS | FCT/UNL -4- Exemplo de aplicação O problema de transporte: Formulação ã O problema de transporte tem por objectivo a minimização do custo total de distribuição do produto, em que os custos unitários de transporte da cada origem i para cada destino j, cij, são proporcionais às quantidades transportadas, xij. MERCEUS | FCT/UNL -5- Exemplo de aplicação O problema do transporte: Formulação ã O problema bl d transporte tem assim de i a seguinte i f formulação l ã matemática: ái MERCEUS | FCT/UNL -6- Exemplo de aplicação O problema do transporte: Dados de entrada Como concretização do exemplo de transporte vamos admitir que existem duas fábricas e três centros de consumo, em que os valores de oferta, procura e distâncias entre as fábricas e os centros estão indicados na tabela abaixo. abaixo Considera‐se ainda que o custo unitário de transporte é de 90 unidades monetárias por cada unidade de produto e de distância percorrida. percorrida Oferta (ai) Distâncias (xij) Centro 1 Centro 2 Centro 3 Fábrica 1 Fábrica 1 2.5 1.7 1.8 350 Fábrica 2 2.5 1.8 1.4 600 Procura (b ( j) 325 300 275 MERCEUS | FCT/UNL -7- Exemplo de aplicação O problema do transporte: Programação ã GAMS (1/3) Sets i fabricas f b i j centros / F Fabrica1, b i 1 F Fabrica2 b i 2 / / Centro1, Centro2, Centro3 / ; Parameters a(i) capacidade de producao da fabrica i / Fabrica1 350 Fabrica2 600 / b(j) consumo no centro j / Centro1 325 Centro2 300 Centro3 275 / ; Table d(i,j) distancia das fabricas aos centros C t 1 Centro1 Centro2 C t 2 C Centro3 t 3 Fabrica1 2.5 1.7 1.8 Fabrica2 2.5 1.8 1.4 ; Scalar f custo por unidade de produto e de distancia /90/ ; Parameter c(i,j) custo de transporte por unidade de produto; c(i,j) = f*d(i,j); MERCEUS | FCT/UNL -8- Exemplo de aplicação O problema do transporte: Programação ã GAMS (2/3) Variables x(i,j) quantidade transportada de i para j z custo total de transporte; Positive variable x ; Equations custo funcao objectivo f bj i custo total l oferta(i) limite de producao da fabrica i procura(j) procura no centro j ; custo .. z =e= sum((i,j), c(i,j)*x(i,j)) ; oferta(i) .. sum(j, x(i,j)) =l= a(i) ; procura(j) p ocu a(j) .. su sum(i, ( , x(i,j)) ( ,j)) =g= g b(j) ; Model transporte /custo, oferta, procura/ ; S l Solve t transporte t using i l lp minimizing i i i i z ; MERCEUS | FCT/UNL -9- Exemplo de aplicação O problema do transporte: Programação ã GAMS (3/3) Display x.l, x.m, z.l ; * Escreve resultados no ficheiro externo "C:\transporte.txt" File output /C:\transporte.txt/ ; put output ; put "Custo total = ", put z.l, put /, put / ; put "xij: ", put / , put " "; loop(j, put j.tl) ; put /; loop(i, put i.tl, loop (j, put x.l(i,j)) ; put / ; ) ; putclose output MERCEUS | FCT/UNL - 10 - Estrutura da programação GAMS Entradas e saídas í Inputs p (file.gms) (f g ) ∙ Sets Declaração Assignação dos elementos dos elementos ∙ Data (Parameters, Tables, Scalar) Declaração Assignação de valores de valores Outputs p (f (file.lst)) ∙ Echo Print ∙ Equation Listing ∙ Equation ∙ Model Statistics ∙ Solution Report ∙ Variables Declaração Assignação do tipo Assignação de limites e/ou valores iniciais (opcional) ∙ Results ∙ Equations Equations Declaração Definição ∙ Model / Solve: Model / Solve: definição e solução e solução do modelo do modelo ∙ Display (opcional) MERCEUS | FCT/UNL - 11 - Exercício O problema de transporte alterado Como exercício considere o exemplo do problema de transporte apresentado onde agora existem quatro fábricas e cinco centros de consumo, com os valores de oferta, procura e distâncias entre as fábricas e os centros indicados na tabela abaixo. abaixo Considere ainda que o custo unitário de transporte é de 5 unidades monetárias. monetárias Distâncias (xij) Oferta (ai) Centro 1 Centro 2 Centro 3 Centro 4 Centro 5 Fábrica 1 2.5 1.7 1.5 1.3 1.8 300 Fábrica 2 2.1 1.5 3.8 1.5 5.0 550 Fábrica 3 2.0 2.8 2.0 2.5 1.0 200 Fábrica 4 2.7 2.3 1.0 3.8 4.3 500 Procura (bj) 250 300 275 100 125 MERCEUS | FCT/UNL - 12 -