Sets
Sets são os blocos básicos de construção de um modelo GAMS, correspondendo exatamente aos índices nas representações algébricas dos modelos. O exemplo de Transporte acima contém apenas uma declaração Set:
Sets i canning plants / Seattle, San-Diego / j markets / New-York, Chicago, Topeka / ;
O efeito desta declaração é provavelmente auto-evidente. Nós declaramos dois conjuntos e demos-lhes os nomes $i$ e $j$. Também atribuímos membros aos conjuntos da seguinte forma:
$i =$ {Seattle, San Diego}
$j =$ {New York, Chicago, Topeka}.
Note o uso de travessões para numerar os membros de um conjunto. Em notação matemática e outras linguagens de programação, isto seria feito frequentemente com chaves encaracoladas em vez de.
Parâmetros
Parâmetros são uma forma de inserir dados em GAMS. Neste caso, os parâmetros $a$ e $b$ são definidos sobre os conjuntos $i$ e $j$.
Parameters a(i) capacity of plant i in cases / Seattle 350 San-Diego 600 / b(j) demand at market j in cases / New-York 325 Chicago 300 Topeka 275 / ;
GAMS permite-lhe colocar texto explicativo (mostrado em minúsculas) em todo o seu modelo, à medida que o desenvolve. Seus comentários são automaticamente incorporados no relatório de saída, nos lugares apropriados.
Tabela
Dados também podem ser inseridos em forma de tabela conveniente. GAMS permite que você insira dados na sua forma básica – as transformações são especificadas algébricamente.
Table d(i,j) distance in thousands of miles New-York Chicago Topeka Seattle 2.5 1.7 1.8 San-Diego 2.5 1.8 1.4 ;
Scalar
Constantes podem simplesmente ser declaradas como escalares:
Scalar f freight in dollars per case per thousand miles /90/ ;
Manipulação de dados
Quando os valores dos dados devem ser calculados, você primeiro declara o parâmetro (isto é, dá-lhe um símbolo e, opcionalmente, indexa), depois dá a sua formulação algébrica. O GAMS fará automaticamente os cálculos.
Parameter c(i,j) transport cost in thousands of dollars per case ;c(i,j) = f * d(i,j) / 1000 ;
Variáveis
Variáveis de decisão são expressas algébricamente, com os seus índices especificados. A partir desta forma geral, GAMS gera cada instância da variável no domínio. As variáveis são especificadas como para digitar: FREE, POSITIVE, NEGATIVE, BINARY, ou INTEGER. A variável objetivo (z, aqui) é simplesmente declarada sem um índice.
Variables x(i,j) shipment quantities in cases z total transportation costs in thousands of dollars ;Positive variables x ;
Equações
Função objetiva e equações de restrição são primeiro declaradas dando-lhes nomes. Depois são descritas as suas fórmulas algébricas gerais. O GAMS agora tem informações suficientes (dos dados entrados acima e das relações algébricas especificadas nas equações) para gerar automaticamente cada expressão de restrição individual – como o usuário pode ver no relatório de saída abaixo. Um extenso conjunto de ferramentas permite modelar qualquer expressão que possa ser declarada algébricamente: aritmética, indexação, funções e log de tratamento de exceções (por exemplo, se-else e such- que constrói).
=E= indica ‘igual a’
=L= indica ‘menor ou igual a’
=G= indica ‘maior ou igual a’
Equations cost define objective function supply(i) observe supply limit at plant i demand(j) satisfy demand at market j ;cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;supply(i) .. sum(j, x(i,j)) =l= a(i) ;demand(j) .. sum(i, x(i,j)) =g= b(j) ;
Declaração do modelo
O modelo recebe um nome único (aqui, TRANSPORTE), e o modelador especifica quais equações devem ser incluídas nesta formulação em particular. Neste caso especificamos TODAS que indicam que todas as equações são parte do modelo. Isto seria equivalente ao MODELO TRANSPORTE /COST, SUPPLY, DEMAND/ . Esta seleção de equações permite formular modelos diferentes dentro de um único arquivo de entrada GAMS, baseado nos mesmos dados ou em dados diferentes.
Model transport /all/ ;
Declaração de resolução
A declaração de resolução (1) diz ao GAMS qual modelo resolver, (2) seleciona o solver a ser usado (neste caso um solver LP), (3) indica a direção da otimização, seja MINIMIZANDO ou MÁXIMIZANDO , e (4) especifica a variável objetiva.
Solve transport using LP minimizing z ;