Beruflich Dokumente
Kultur Dokumente
PESQUISA OPERACIONAL
` APLICADA A
MINERACAO
Marcone Jamilson Freitas Souza Alexandre Xavier Martins Tatiana Alves Costa Frederico Augusto C. Guimares a Jos Maria do Carmo Bento Alves e
Departamento de Computao ca Instituto de Cincias Exatas e Biolgicas e o Universidade Federal de Ouro Preto
Sumrio a
I OTIMIZADOR LINGO 5
5 5 6 6 7 7 7 7 8 8 8 8 9 9 9 10 10 10 11 11 11 12 12 13 15 15 17 17 18 19 19 20 20 20 22
1 Introduo ca 2 Restries Lineares co 3 Introduo ` Linguagem de Modelagem do LINGO ca a 3.1 Funao Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c 3.2 Restries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 4 Adicionando Caracter sticas 4.1 Rotulando as Restries . co 4.2 Intitulando o Modelo . . . 4.3 Inserindo comentrios . . . a ` Linguagem de Modelagem a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5 Operadores e Funes do LINGO co 5.1 Operadores Aritmticos . . . . . . e 5.2 Operadores Lgicos . . . . . . . . . o 5.3 Operadores Relacionais . . . . . . . 5.4 N de prioridade dos operadores vel 5.5 Funoes matemticas . . . . . . . . c a 5.6 Funoes de probabilidade . . . . . . c 5.7 Funoes de dom c nio . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
6 O modelo LINGO do Problema de Transporte 7 SETS (Conjuntos) 7.1 Porque SETS? . . . . . . . . . . . . . 7.2 O que so SETS? . . . . . . . . . . . a 7.3 Seo SETS . . . . . . . . . . . . . . ca 7.4 Denindo Conjuntos Primitivos . . . 7.5 Denindo conjuntos derivados . . . . 7.6 Funoes sobre conjuntos . . . . . . . c 7.7 Funoes de manipulao de conjuntos c ca 8 Seo DATA ca 8.1 Introduo ` seo DATA . . . . ca a ca 8.2 Parmetros . . . . . . . . . . . . a 8.3 Anlise E se. . . . . . . . . . . . a 8.4 Inicializando um atributo com um 8.5 Omitindo valores na seo DATA ca
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . simples valor . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
9 Utilizando Arquivos-texto 9.1 Importando dados de um arquivo texto com @FILE . . . . . . . . . . . . . . . . . 9.2 Exportando dados para um arquivo com @TEXT . . . . . . . . . . . . . . . . . .
Modelagem de PPLs 10 Utilizando planilhas do EXCEL 10.1 Funao @OLE . . . . . . . . . . . . . . . . . c 10.2 Importando dados do EXCEL com @OLE . 10.3 Denindo nomes no EXCEL . . . . . . . . . 10.4 Excluindo um nome denido no EXCEL . . 10.5 Exportando dados para EXCEL com @OLE 10.6 Algumas consideraes sobre @OLE . . . . . co 11 Embutindo planilhas do EXCEL no LINGO 12 Embutindo Modelos LINGO no EXCEL 13 Utilizando links OLE automatizados no EXCEL 13.1 Comando SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 23 23 23 25 27 27 29 30 32 34 38
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
II
39
39 39 41 41 45 47 47 51 51 54 54 57 60 60 62 64 64 65 65 67 69 72 72
Carteira de Investimentos Problema 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mistura de Minrios com Custos e Problema 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mistura de Minrios com Metas e Problema 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema das Usinas Problema 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Planejamento da Produo ca Problema 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alocao de Pessoal ca Problema 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formao de Ligas ca Problema 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Corte de Estoque Unidimensional (Cutting Stock Problem) Problema 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problema 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Corte de Estoque Bidimensional Problema 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mochila 0-1 Problema 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mochila 0-1 M ltipla u Problema 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mochila Inteira Problema 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mochila Inteira M ltipla u Problema 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Localizao ca Problema 19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Caixeiro Viajante Problema 20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Roteamento de Ve culos Problema 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Parte I
OTIMIZADOR LINGO
1 Introduo ca
O LINGO uma ferramenta computacional para modelagem e resoluo de problemas lineares e ca e no-lineares de otimizao. O processo de otimizao consiste em tentar encontrar a melhor a ca ca soluo poss para um dado problema, usando tcnicas de programao matemtica, de forma ca vel e ca a a atingir o maior benef cio/lucro ou gerar o menor custo/desperd cio. Problemas de otimizao so ca a classicados como lineares ou no-lineares, dependendo se os relacionamentos entre as variveis a a do problema so lineares ou no, respectivamente. a a
Restries Lineares co
Se todos os termos das variveis so de primeira ordem, a restrio dita linear. Isto signica a a ca e que a restrio no contm uma varivel quadrtica, cbica, ou elevada a qualquer potncia, um ca a e a a u e termo dividido por uma varivel, ou uma varivel multiplicada por outra. Alm disso, deve existir a a e proporcionalidade, ou seja, para cada unidade adicionada ou retirada de uma varivel, o valor da a restrio aumentar ou reduzir em uma quantidade xada. ca a a Frmulas lineares so relaes que podem ser gracamente representadas por uma linha reta. o a co Sua forma bsica pode ser escrita como: a y = mx + b onde m e b so constantes. a Suponha, por exemplo, que um quilo de tomate custe R$ 1,50. A expresso ou funo usada a ca para calcular o custo (c) em termos da quantidade de tomate comprada (t) : e c = 1.5 t Como esperado, o grco da funo de custo uma linha reta: a ca e
Expresses lineares podem ter mltiplos valores, como por exemplo, se forem acrescentados ` o u a funo acima o custo de batatas (b) a R$ 0,75 e mas (m) a R$ 1,25, ter ca ca amos: c = 1.5 t + 0.75 b + 1.25 m
6 Esta nova expresso de custo formada continua sendo linear. Pode-se dizer que ela e a soma a de trs expresses lineares simples. e o Como os modelos lineares podem ser resolvidos de forma mais rpida em ordens de magnitude a e com maior preciso do que os modelos no-lineares, prefer que os modelos sejam formulados a a e vel usando expresses lineares sempre que poss o vel. Para problemas representados por modelos lineares, quando completamente resolvidos pelo LINGO (sem serem interrompidos), tem-se a garantia que o valor da funo objetivo encontrado ca timo, ou seja, o melhor valor poss para o problema em questo. Tal garantia no ocorre eo e vel a a no caso de modelos no-lineares, j que os mesmos podem car presos em timos locais, como a a o mostra a gura abaixo, que ilustra o caso de uma funo objetivo no-linear. ca a
Algumas expresses no-lineares podem ser facilmente convertidas em lineares. Considere a o a restrio abaixo: ca x/y = 10; Da forma como est escrita, essa restrio no-linear porque x est sendo dividido por y. a ca e a a Simplesmente multiplicando ambos os lados por y, temos a restrio linear equivalente: ca x = 10 y;
3
3.1
A linguagem de modelagem do LINGO permite representar a funo objetivo de forma bastante ca simples e intuitiva. Para exemplicar, considere dois conjuntos, fabricas e armazens, e uma matriz rotas de elementos (i, j), com i fabricas e j armazens. As funes objetivo a seguir: co minimizar
ifabricas jarmazens
maximizar
if abricas jarmazens
so assim representadas no LINGO: a MIN = @SUM(fabricas(i): @SUM(armazens(j): custo(i,j)*qtdEnviada(i,j))); MAX = @SUM(fabricas(i): @SUM(armazens(j): lucro(i,j)*qtdEnviada(i,j))); ou, equivalentemente: MIN = @SUM(rotas(i,j): custo(i,j)*qtdEnviada (i,j)); MAX = @SUM(rotas(i,j): lucro(i,j)*qtdEnviada(i,j));
3.2
Restries co
Assim como na funo objetivo, podemos usar a linguagem de modelagem do LINGO para repreca sentar as restries do problema de forma simples e direta. co Para as seguintes restries em notao matemtica: co ca a (qtdEnviadaij ) capacidadei
jarmazens
i fabricas j armazens
(qtdEnviadaij ) = demandaj
ifabricas
temos a seguinte representao no LINGO: ca @FOR(fabricas(i): @SUM(armazens(j): qtdEnviada(i,j)) <= capacidade(i)); @FOR(armazens(j): @SUM(fabricas(i): qtdEnviada(i,j)) = demanda(j)); Obs: Toda restrio do tipo escrita no LINGO comeando com a funo @FOR. ca e c ca
4
4.1
O LINGO permite que as restries sejam rotuladas com nomes. Este recurso util por duas co e razes: o - Os nomes so usados nos relatrios das solues geradas para torn-los mais fceis de serem a o co a a interpretados. - Muitas das mensagens de erro do LINGO referem-se aos nomes dados `s restries. Caso as a co restries no sejam rotuladas, localizar a fonte desses erros pode ser bastante dif co a cil. Rotular restries extremamente simples. Basta inserir um nome entre colchetes no in co e cio da restrio. O nome deve obedecer aos requisitos padres do LINGO, a saber: todo nome ca o deve comear com um caracter alfabtico (A-Z); caracteres subseqentes devem ser alfabticos, c e u e numricos (0-9), ou o underscore ( ); os nomes no podem ter mais que 32 caracteres. Abaixo e a so mostrados alguns exemplos: a [FO] MIN = @SUM(rotas(i,j): custo(i,j)*qtdEnviada(i,j)); @FOR(armazens(j): [Dem Armazem] @SUM(fabricas(i): qtdEnviada(i,j)) = demanda(j));
4.2
Intitulando o Modelo
Um t tulo pode ser inserido para um modelo. Se um t tulo for inclu do, ele ser exibido no topo a do relatrio da soluo gerada. o ca No exemplo a seguir, o modelo foi intitulado de Problema de Transporte. MODEL: TITLE: Problema de Transporte;
4.3
Inserindo comentrios a
Um comentrio pode ser denido utilizando um sinal de exclamao (!) e um ponto e v a ca rgula (;), os quais determinam respectivamente o seu inicio e m. Um exemplo de comentrio exibido a seguir: a e ! As capacidades das fbricas no podem ser ultrapassadas; a a @FOR(fabricas(i): @SUM(armazens(j): qtdEnviada(i,j)) <= capacidade(i));
Os operadores podem ser: binrios, quando requererem dois argumentos - um imediatamente ` a a esquerda do operador e outro imediatamente ` direita; ou unrios, quando requererem apenas um a a argumento.
5.1
Operadores Aritmticos e
Operadores aritmticos so aqueles que trabalham com valores numricos. O LINGO possui cinco e a e operadores aritmticos binrios, como mostrado a seguir: e a Operador Descrio ca Exponenciao ca Multiplicao ca Diviso a Adio ca Subtrao ca
* / + -
O unico operador aritmtico unrio o de negao (-) que, neste caso, aplicado ao operando e a e ca e imediatamente ` direita do sinal de negao. a ca
5.2
Operadores Lgicos o
No LINGO, os operadores lgicos so principalmente usados em expresses condicionais, denidas o a o nas funes sobre conjuntos, para controlar quais dos seus membros sero inclu co a dos ou exclu na do funo. Eles tambm possuem um importante papel na construo dos membros de um conjunto. ca e ca Esses recursos sero mostrados mais adiante neste cap a tulo. Operadores lgicos retornam TRUE ou FALSE como resultado. O LINGO usa o valor 1 para o representar TRUE e o valor 0 para representar FALSE. A linguagem de modelagem do LINGO inclui nove operadores lgicos, sendo todos binrios, a o a exceo do operador unrio #NOT#. ca a
Operador #NOT# #EQ# #NE# #GE# #GT# #LE# #LT# #AND# #OR#
Valor de Retorno TRUE se o operando imediatamente a direita FALSE e TRUE se os operandos so iguais a TRUE se os operandos no so iguais a a TRUE se o operando da esquerda maior ou igual ao operando da direita e TRUE se o operando da esquerda estritamente maior que o operando da direita e TRUE se o operando da esquerda menor ou igual ao operando da direita e TRUE se o operando da esquerda estritamente menor que o operando da direita e TRUE se ambos os operandos possuem valor TRUE FALSE se ambos os operandos possuem valor FALSE
5.3
Operadores Relacionais
No LINGO, operadores relacionais so usados no modelo para especicar se o lado ` esquerda de a a uma expresso deve ser igual, menor igual ou maior igual ao lado direito. Eles so usados para a a formar as restries que compem o modelo. co o O LINGO faz uso de trs operadores relacionais: e Operador = <= >= Descrio ca A expresso ` esquerda deve ser igual a expresso ` direita a a a a A expresso ` esquerda deve ser menor ou igual a expresso ` direita a a a a A expresso ` esquerda deve ser maior ou igual a expresso ` direita a a a a
O LINGO considera menor (<) como sendo menor ou igual (<=) e maior (>) como sendo maior ou igual (>=). Portanto, caso seja util usar A < B, a expresso deve ser convertida em a A + e <= B, onde e uma pequena constante no qual o valor depende do quanto A menor do e e que B. Para denir A < 10, com A inteiro, faa A <= 9. Se A for real, faa A <= 10 , onde c c 0 o erro mximo admiss e a vel.
5.4
#GE#
#LT#
#LE#
5.5
Funes matemticas co a
O LINGO oferece um conjunto padro de funes matemticas. Algumas destas funes so a co a co a listadas a seguir:
10 Funo ca @ABS(X) @COS(X) @SIN(X) @TAN(X) @FLOOR(X) @SMIN(X1,X2,...,XN) @SMAX(X1,X2,...,XN) Retorna Retorna Retorna Retorna Retorna Retorna Retorna o o o a o o o Retorno valor absoluto de X cosseno de X, onde X um ngulo em radianos e a seno de X, onde X um ngulo em radianos e a tangente de X, onde X um ngulo em radianos e a menor inteiro mais prximo de X o m nimo valor de X1, X2, ..., e XN mximo valor de X1, X2, ..., e XN a
5.6
Funes de probabilidade co
O LINGO possui uma srie de funes relacionadas ` probabilidade. Apenas @RAND apresene co a e tada aqui. Funo ca @RAND(SEED) Retorno Retorna um nmero randmico entre 0 e 1, deterministicamente u o dependente da semente (SEED) denida, sendo SEED um nmero inteiro u
5.7
Por default, o LINGO assume que as variveis so cont a a nuas e maiores ou iguais a 0. As funes de co dom impem restries adicionais `s variveis, determinando quais valores elas podem assumir. nio o co a a Essas funes e seus efeitos so descritos a seguir: co a Funo ca @BIN(varivel) a Descrio ca
Limita a varivel a assumir apenas valores binrios a a (0 ou 1). @BND(inferior,varivel,superior) Limita a varivel a assumir valores entre os valores a a inferior e superior (inferior varivel superior). a @FREE(varivel) a Permite que a varivel assuma quaisquer valores (-,0,+). a @GIN(varivel) a Restringe que a varivel assuma apenas valores inteiros. a A funo @FOR pode ser usada para aplicar as funes de dom ca co nio sobre todos os membros de um atributo. Esse recurso pode ser aplicado ao modelo Produo das Fabricas para indicar ca que a quantidade enviada de uma determinada fbrica para um armazm qualquer, deve ser um a e valor inteiro: @FOR(rotas(i,j): @GIN(qtdEnviada(i,j)));
A funo objetivo e as restries apresentadas nas sees 3.1 e 3.2 formam o modelo linear referente ca co co ao Problema de Transporte. A descrio deste problema apresentada a seguir: ca e Dado um conjunto de fontes de produo (fbricas), um conjunto de mercados consumidores ca a (armazns), e uma rede de poss e veis caminhos de transporte (rotas) das fontes de produo para ca os mercados, o objetivo da problema determinar o carregamento que minimiza o custo total e de transporte, de modo que as capacidades das fontes produtivas no sejam ultrapassadas e as a demandas dos mercados sejam atendidas.
11 O modelo LINGO do Problema de Transporte apresentado abaixo, em que se considera a e quantidade ofertada pelas fbricas maior que a soma das demandas dos armazns. a e MODEL: TITLE: Problema de Transporte [FO] MIN = @SUM(rotas(i,j): custo(i,j)*qtdEnviada(i,j)); ! As capacidades das fbricas no podem ser ultrapassadas; a a @FOR(fabricas(i): @SUM(armazens(j): qtdEnviada(i,j)) <= capacidade(i)); ! As demandas dos armazns devem ser atendidas; e @FOR(armazens(j): @SUM(fabricas(i): qtdEnviada(i,j)) = demanda(j)); @FOR(rotas(i,j): @GIN(qtdEnviada(i,j)); END O modelo LINGO completo relativo a esse problema apresentado ` pgina 21. Para o modelo e a a corrente falta a denio dos conjuntos fabricas, armazens e rotas, bem como a entrada de dados, ca o que feito por meio das sees SET e DATA, respectivamente, explicadas a seguir. e co
7
7.1
SETS (Conjuntos)
Porque SETS?
SETS so a base da linguagem de modelagem do LINGO. Eles permitem escrever uma srie de a e restries similares atravs de uma simples instruo. Tambm poss representar expresses co e ca e e vel o longas e frmulas complexas de maneira concisa. o
7.2
O que so SETS? a
SETS (conjuntos) so grupos de objetos relacionados. Um conjunto pode ser uma lista de proa dutos, caminhes, ou empregados. Cada membro de um conjunto pode ter associado a si uma o ou mais caracter sticas. Os valores dos atributos podem ser previamente conhecidos ou no pelo a LINGO. Por exemplo, cada produto em um conjunto produtos pode ter um atributo listando o seu preo, assim como cada caminho em um conjunto caminhoes pode ter um atributo de capacidade c a de carga. O LINGO reconhece dois tipos de conjuntos: primitivo e derivado. Um conjunto primitivo aquele formado somente por objetos que no podem ser reduzidos e a posteriormente. No modelo Problema de Transporte mostrado na seo 6, o conjunto fabricas, ca assim como o conjunto armazens, so exemplos de conjuntos primitivos. a Um conjunto derivado formado por um ou mais diferentes conjuntos. O conceito chave e e que ele deriva seus membros de um outro conjunto pr-existente. Novamente considerando o e modelo Problema de Transporte, o conjunto rotas formado pelos pares (i, j), onde i fabricas e j armazens, um conjunto derivado, pois gerado a partir dos conjuntos primitivos fabricas e e e armazens. Um conjunto derivado pode tambm ser composto por outros conjuntos derivados. e
12
7.3
Seo SETS ca
Conjuntos so denidos em uma seo opcional do modelo LINGO, chamada de seo SETS (seo a ca ca ca de conjuntos). Antes de usar um conjunto em um modelo LINGO, necessrio list-lo nesta seo. e a a ca A seo de conjuntos iniciada com a palavra-chave SETS: (incluindo os dois pontos), e termina ca e com a palavra chave ENDSETS. Um modelo pode no ter uma seo SETS ou ento, ter uma a ca a unica ou mltiplas sees SETS. A unica limitao com relao ao uso dessas sees a necessidade u co ca ca co e de denir um conjunto e seus atributos antes deles serem referenciados nas restries do modelo. co
7.4
Para denir um conjunto primitivo em uma seo SETS, devem ser especicados: ca o nome do conjunto; opcionalmente, seus membros (objetos contidos no conjunto); e opcionalmente, qualquer atributo que os membros dos conjuntos devam ter. A denio de um conjunto primitivo tem a seguinte sintaxe: ca nome [/lista de membros/] [: lista de atributos]; O uso dos colchetes indica que os itens lista de membros e lista de atributos so ambos a opcionais. O nome escolhido designa o conjunto e deve seguir as convenes padres do LINGO. No h co o a a distino entre caracteres maisculos e minsculos nos nomes. ca u u Uma lista de membros constitui os membros pertencentes ao conjunto. Se os membros so ina clu dos na denio do conjunto, eles podem ser listados explicitamente ou implicitamente. Caso ca os membros no sejam inclu a dos na denio do conjunto, eles devem ser denidos subseqenteca u mente na seo DATA do modelo. A seo DATA ser descrita mais adiante neste cap ca ca a tulo. Quando listados explicitamente, cada membro deve ter seu nome denido, opcionalmente separado por v rgulas. Os nomes dos membros devem respeitar as convenes do LINGO para nomes. co O exemplo a seguir exibe os membros do conjunto fabricas sendo explicitamente declarados: fabricas /F1 F2 F3 F4/: capacidade; ou fabricas /F1, F2, F3, F4/: capacidade; Quando listados implicitamente, no h a necessidade de declarar o nome de cada membro. O a a LINGO automaticamente gera os nomes de todos os membros do conjunto. A seguir so listadas a as diversas maneiras de se denir elementos de forma impl cita: ! membros: 1, 2, 3, 4, 5; fabricas / 1..5 /: capacidade; ! membros: cam3, cam4, cam5, cam6, cam7; caminhoes / cam3..cam7 /: capCarga; ! membros: mon, tue, wed, thu, fri; dias / mon..fri /: ; ! membros: oct, nov, dec, jan; meses / oct..jan /: ;
13 ! membros: oct2005, nov2005, dec2005, jan2006; meses ano / oct2005..jan2006 /: ; Outra alternativa utilizar a seo DATA como exemplicado a seguir: e ca DATA: n = 6; ENDDATA SETS: fabricas / 1..n /: capacidade; ENDSETS Os membros dos conjuntos podem ter um ou mais atributos especicados atravs da lista de e atributos. Um atributo uma propriedade denida para cada membro do conjunto. Os nomes e dados aos atributos devem seguir as convenes impostas pelo LINGO. O exemplo seguinte declara co dois atributos, capacidades e localizacao, para o conjunto fabricas. fabricas / 1..6 /: capacidade, localizacao;
7.5
Para denir um conjunto derivado necessrio especicar: e a o nome do conjunto; seus conjuntos pais; opcionalmente, seus membros; e opcionalmente, qualquer atributo que os membros dos conjuntos devam ter. A lista de pais uma lista de conjuntos previamente denida, separadas por v e rgulas. Caso a lista de membros no seja especicada, o LINGO constri todas as combinaes poss a o co veis para os membros do novo conjunto derivado, utilizando os membros dos conjuntos pai. Como exemplo, considere os conjuntos abaixo: SETS: produtos / A B /; maquinas / M N /; semana / 1..2 /; permitido(produtos,maquinas,semana); ENDSETS Os membros do conjunto permitido so constitu a dos pelo LINGO, derivados dos conjuntos produtos, maquinas e semana. Esses membros so exibidos a seguir: a
14 Indice 1 2 3 4 5 6 7 8 Membro (A,M,1) (A,M,2) (A,N,1) (A,N,2) (B,M,1) (B,M,2) (B,N,1) (B,N,2)
A lista de membros opcional e usada quando se deseja limitar os membros em um subcone e junto de todas as combinaes poss co veis, derivadas dos conjuntos pais. Essa lista pode alternativamente ser especicada na seo DATA do modelo, descrita mais adiante. ca Quando um conjunto no possui uma lista de membros e, portanto, contm todas poss a e veis combinaes de membros derivados de seus conjuntos pais, ele referido como sendo um conjunto co e denso. Caso ele inclua uma lista de membros que o limita em um subconjunto da sua forma densa, ele dito conjunto esparso. e Uma lista de membros de um conjunto derivado pode ser constru usando: da uma lista explicita de membros; ou um ltro de membros. Ao declarar uma lista de membros expl citos necessrio denir todos os membros que iro e a a pertencer ao conjunto. Cada membro listado deve ser um membro do conjunto denso formado por todas poss veis combinaes dos conjuntos pais. Voltando ao conjunto permitido, do exemplo co acima, podemos ter: permitido(produtos, maquinas, semana) / A M 1, A N 2, B N 1 / ; Em muitos conjuntos esparsos, todos os membros satisfazem a alguma condio que os diferca encia dos no membros. Usar o ltro de membros envolve especicar uma condio lgica, a qual a ca o cada membro potencial deve satisfazer, para pertencer ao conjunto nal. Uma condio lgica ca o pode ser vista como um ltro que impede os membros, que no satisfazem algum critrio, de a e pertencerem ao conjunto esparso. Como exemplo, suponha um conjunto de nome caminhoes, e que cada caminho tenha um atributo chamado capacidade. Caso haja a necessidade de denir a o um subconjunto carga pesada derivado do conjunto caminhoes, que contenha somente caminhes com capacidade acima de 50000 kg, ter amos: carga pesada(caminhoes) | capacidade(&1) #GT# 50000: ; A barra vertical (|) marca o in do ltro de membros. O ltro permite que apenas caminhes cio o de grande porte (com capacidade acima de 50000 kg) pertenam ao conjunto carga pesada. O c s mbolo &1 conhecido como um e ndice marcador de lugar (placeholder). Ao construir um conjunto derivado que usa um ltro, o LINGO gera todas as poss veis combinaes de membros co originados dos conjuntos pais. Cada membro gerado atribu a &1 para que a condiao lgica e do c o seja testada. Caso o membro passe no teste, ele adicionado ao conjunto carga pesada. e
15
7.6
As funes @MIN e @MAX so usadas para encontrar o m co a nimo e o mximo de uma expresso a a sobre os membros de um conjunto. Considerando o modelo Problema de Transporte apresentado na seo 9.1, podemos ter os seguintes exemplos: ca demanda min = @MIN(armazens(j): demanda(j)); demanda max = @MAX(armazens(j): demanda(j)); demanda1 = @MIN(armazens(j) | j #LE# 3: demanda(j)); demanda2 = @MAX(armazens(j) | capacidade(j) #GE# 500: demanda(j)); A funo @SUM utilizada para percorrer um conjunto e retornar o somatrio dos valores de ca e o um determinado atributo, referentes aos membros especicados. Utilizando o modelo Problema de Transporte, temos: demanda total = @SUM(armazens: demanda); ou demanda total = @SUM(armazens(j): demanda(j)); demanda1 = @SUM(armazens(j) | j #NE# 1: demanda(j)); demanda2 = @SUM(armazens(j) | capacidade(j) #GT# 100: demanda(j)); A funo @FOR usada para gerar restries utilizando os membros de um conjunto. Ela ca e co permite escrever uma restrio apenas uma vez e o LINGO ento trabalha gerando uma ocorrncia ca a e da restrio para cada membro do conjunto. Como exemplo, considere um conjunto de pilhas ca de minrio que devem ser retomadas por uma p-carregadeira, para compor uma determinada e a produo diria. Para cada pilha retomada deseja-se saber o nmero de caambadas realizadas ca a u c pela p-carregadeira: a @FOR(pilhas(i): numCacambadas(i) = retomado(i) / capCacamba); ou, considerando que capCacamba no pode ser nulo: a @FOR(pilhas(i) | capCacamba #NE# 0: numCacambadas(i) = retomado(i) / capCacamba); As funes sobre conjuntos podem ser aninhadas. As funes @SUM, @MAX e @MIN podem co co ser aninhadas dentro de qualquer outra funo. Por outro lado, a funo @FOR s pode ser ca ca o aninhada dentro de outras funes @FOR. Para o modelo Problema de Transporte, tem-se: co @FOR(armazens(j): @SUM(fabricas(i): qtdEnviada(i,j)) = demanda(j));
7.7
O LINGO oferece vrias funes que ajudam a manipular os conjuntos. Elas sero descritas a a co a seguir. A funo @IN retorna TRUE se o membro de um conjunto primitivo, especicado atravs de ca e seu ndice, pertence a um determinado conjunto. @IN(nome do conjunto, indice primitivo 1, [indice primitivo 2 . . . ]) Como mostra o exemplo a seguir, @IN pode ser usado juntamente com os operadores lgicos, o para gerar complementos de subconjuntos.
16 SETS fabricas / SEATTLE, DENVER, CHICAGO, ATLANTA /: ; fechadas(fabricas) / DENVER /: ; abertas(fabricas) | #NOT# @IN(fechadas, &1): ; ENDSETS O prximo exemplo ilustra como determinar se um elemento pertence ou no a um conjunto o a derivado espec co. Note que para obter o ndice dos elementos primitivos foi necessrio utilizar a a funo @INDEX, descrita a seguir. ca SETS s1 / A B C /: ; s2 / X Y Z /: ; s3(s1,s2) / A,X A,Z B,Y C,X /: ; ENDSETS pertence = @IN(s3, @INDEX(s1, B), @INDEX(s2, Y)); A funo @INDEX retorna o ca ndice de um elemento pertencente a um conjunto primitivo. @INDEX([nome do conjunto], elemento do conjunto primitivo) Se o nome do conjunto omitido, o LINGO retorna o e ndice do elemento do primeiro conjunto primitivo encontrado, cujo nome seja igual ao especicado atravs do elemento do conjunto primitivo. e Esta funo exemplicada a seguir: ca e SETS mulheres /DEBBIE, SUE, ALICE/ ; homens /BOB, JOE, SUE, FRED/; ENDSETS @INDEX(homens, SUE) retornaria o valor 3. J @INDEX(SUE) devolveria o valor 2, pois o a LINGO encontra primeiro o elemento SUE do conjunto mulheres. A funo @WRAP permite ligar o ultimo elemento de um determinado conjunto ao primeiro. ca Isto , quando o ultimo (respectivamente primeiro) membro de um conjunto atingido, por exeme e plo, por uma funo @FOR, usar @WRAP permitir ligar o ca a ndice do conjunto ao seu primeiro (respectivamente ultimo) membro. Este recurso particularmente util em modelos c e clicos. @WRAP (indice, limite) Formalmente, @WRAP retorna j de modo que j = indice k limite, onde k um inteiro e tal que j pertena ao intervalo [1, limite]. Informalmente, a funo @WRAP subtrai ou soma o c ca limite ao indice at que o valor a ser retornado esteja entre 1 e o limite. e Considerando um conjunto que contenha 3 elementos, como homens do exemplo anterior, podemos ter os seguintes valores para @WRAP:
17 @WRAP(-1, 3) = -1 @WRAP(0, 3) = 0 @WRAP(1, 3) = 1 @WRAP(2, 3) = 2 @WRAP(3, 3) = 3 @WRAP(4, 3) = 4 @WRAP(5, 3) = 5 - (-1) * 3 = 2 (-1) * 3 = 3 0*3=1 0*3=2 0*3=3 1*3=1 1*3=2
A funo @SIZE retorna o nmero de elementos contidos em um determinado conjunto, ou ca u seja, a cardinalidade deste conjunto. @SIZE(nome do conjunto) O uso desta funo torna o modelo mais independente, pois mesmo que o tamanho dos conjunca tos se altere, o modelo ainda se manter conciso. Isto pode ser melhor visualizado usando como a exemplo a funo @WRAP(indice, limite). Caso o limite fosse especicado como 3, qualquer ca alterao no tamanho do conjunto ao qual ele se refere tornaria o modelo incorreto. Por outro ca co lado, se o limite fosse especicado como @SIZE(nome do conjunto), alteraes no tamanho do conjunto no afetariam o modelo desenvolvido. a
8
8.1
Seo DATA ca
Introduo ` seo DATA ca a ca
A seo DATA permite isolar os dados do resto do modelo. Isto uma prtica util, pois facilita ca e a a manuteno do modelo e a escalabilidade das suas dimenses. Essa seo se inicia com a ca o ca palavra-chave DATA: (incluindo os dois pontos) e termina com a palavra-chave ENDDATA. Na seo DATA so escritas instrues que inicializam os membros e/ou os atributos dos conjuntos, ca a co previamente instanciados na seo SETS. Essas expresses possuem a seguinte sintaxe: ca o lista de objetos = lista de valores; A lista de objetos contm os nomes dos atributos e/ou um conjunto cujos membros sero inie a cializados, opcionalmente separados por v rgulas. No pode haver mais que um nome de conjunto a na lista de objetos, enquanto que vrios nomes de atributo so permitidos. a a A lista de valores contm os dados que sero atribu e a dos aos elementos da lista de objetos, opcionalmente separados por v rgulas. A seguir so apresentadas duas maneiras de se inicializar uma lista de atributos: a
18 SETS: set1 /A,B,C/: X, Y; ENDSETS DATA: X = 1, 2, 3; Y = 4, 5, 6; ENDDATA ou SETS: set1 /A,B,C/: X, Y; ENDSETS DATA: X, Y = 1, 4, 2, 5, 3, 6; ENDDATA Como mencionado anteriormente, membros de um conjunto podem ser inicializados na seo ca DATA. Utilizando esta tcnica para modicar o exemplo acima, temos: e SETS: set1: X, Y; ENDSETS DATA: set1, X, Y = A 1 4 B25 C 3 6; ENDDATA
8.2
Parmetros a
O LINGO no restringe o uso de apenas atributos e conjuntos no lado esquerdo das instrues a co declaradas na seo DATA. Variveis escalares (simples) tambm podem ser inicializadas na seo ca a e ca DATA. Quando isto ocorre, essas variveis so referidas como parmetros. a a a Como exemplo, suponha que um modelo utilize uma taxa de juros de 8.5% como um parmetro. a Isto poderia ser expresso da seguinte forma: DATA: taxa de juros = .085; ENDDATA
19 Assim como os atributos, vrios parmetros podem ser inicializados em uma unica instruo. a a ca Imagine agora que um novo parmetro, taxa de inacao, seja adicionado ao modelo acima. Deste a modo, teremos: DATA: taxa de juros, taxa de inacao = .085, .03; ENDDATA
8.3
Anlise E se. . . a
Suponha que um modelo utilize a taxa de inao como um parmetro. No sendo poss ca a a vel determinar um valor para esse parmetro no futuro, mas sabendo que ele pode cair dentro de uma a faixa entre 2% a 6%, este modelo poderia ser resolvido para vrios valores de taxa de inao, a ca variando dentro da faixa descrita, para analisar a sensibilidade deste modelo com relao ao ca parmetro. Esta anlise referida como e se. . . . Para denir um parmetro deste tipo, utilize o a a e a sinal de interrogao como mostra o exemplo a seguir: ca DATA: taxa de inacao = ?; ENDDATA O LINGO exibir uma caixa de entrada cada vez que o modelo for resolvido. a
8.4
O LINGO permite inicializar todos os elementos de um atributo usando um unico valor. O exemplo a seguir, mostra como isto pode ser feito: SETS: dias / MO, TU, WE, TH, FR, SA, SU /: necessidade; ENDSETS DATA: necessidade = 20; ENDDATA
20 Se existem mltiplos atributos no lado esquerdo da instruo, ser necessrio um valor no lado u ca a a direito para cada atributo utilizado. Acrescentando ao exemplo um novo atributo custo, temos: SETS: dias / MO, TU, WE, TH, FR, SA, SU/: necessidade, custo; ENDSETS DATA: necessidade, custo = 20, 100; ENDDATA
8.5
Valores em uma instruo da seo DATA podem ser omitidos, caso no seja poss determin-los ca ca a vel a para alguns membros. Como exemplo, suponha uma fbrica que deseja planejar a sua capacidade a para os prximos 5 anos. Alm disso, suponha que a expanso da capacidade leve tempo para o e a ser encorajada e implementada. Sendo assim, seria imposs aumentar a capacidade nos dois vel primeiros anos. Neste caso, ter amos: SETS: anos /1..5/: capacidade; ENDSETS DATA: capacidade = 34, 34, , , ; ENDDATA O LINGO estar, portanto, livre para decidir os valores da capacidade para os trs ultimos a e anos.
9
9.1
Utilizando Arquivos-texto
Importando dados de um arquivo texto com @FILE
A funo de interface @FILE permite importar dados de um arquivo texto para um modelo ca qualquer. Isto particularmente util para incorporar dados, gravados em arquivos, `s sees e a co SETS e DATA. A sintaxe da funo @FILE apresentada a seguir: ca e @FILE(nome do aquivo); Quando esta funo utilizada no modelo, o LINGO ir ler os dados do arquivo especicado ca e a at que o m do arquivo seja atingido, ou uma marca de m de registro () seja encontrada. e Para subseqentes @FILE referidos em um mesmo modelo, que fazem uso de um mesmo arquivo, u o LINGO retoma a leitura do arquivo do ponto onde parou. Funes @FILE no podem ser co a aninhadas (embutir um @FILE em um arquivo que chamado por um @FILE). e Como exemplo, considere o modelo Problema de Transporte apresentado na seo 6, para 6 ca fbricas e 8 armazns. Sendo assim, tem-se: a e
21 SETS: fabricas / F1 F2 F3 F4 F5 F6 /: capacidade; armazens / A1 A2 A3 A4 A5 A6 A7 A8 / : demanda; rotas(fabricas,armazens): custo, qtdEnviada; ENDSETS DATA: capacidade = 60 55 51 43 41 52; demanda = 35 37 22 32 41 32 43 38; custo = 6 2 6 7 4 2 5 9 49538582 52197433 76739271 23957265 5 5 2 2 8 1 4 3; ENDDATA Com o objetivo de isolar completamente os dados do modelo, estes podem ser movidos para um arquivo texto. A modicao realizada apresentada a seguir. ca e SETS: fabricas / @FILE( Transporte.ldt) /: capacidade; armazens / @FILE( Transporte.ldt) / : demanda; rotas(fabricas,armazens): custo, qtdEnviada; ENDSETS DATA: capacidade = @FILE( Transporte.ldt); demanda = @FILE( Transporte.ldt); custo = @FILE( Transporte.ldt); ENDDATA Neste modelo, o arquivo Transporte.ldt (a extenso .ldt usada por conveno) dispe os a e ca o dados da seguinte maneira: ! Lista das fbricas; a F1 F2 F3 F4 F5 F6 ! Lista dos armazns; e A1 A2 A3 A4 A5 A6 A7 A8
22 ! Capacidade das fbricas; a 60 55 51 43 41 52 ! Demanda dos armazns; e 35 37 22 32 41 32 43 38 ! Custo de envio; 62674259 49538582 52197433 76739271 23957265 55228143 As sees do arquivo de dados entre so chamadas de registros. Se um arquivo no contm co a a e nenhum , o LINGO ler o arquivo inteiro como um unico registro. a O exemplo apresentado acima esclarece como as funes @FILE trabalham ao longo do modelo. co A primeira chamada a @FILE abre o arquivo Transporte.ldt e l o primeiro registro (elementos e do conjunto fabricas). A segunda chamada diz respeito ao segundo registro (elementos do conjunto armazens), e assim por diante. O ultimo registro (custos de envio) no necessita de um . Quando o LINGO encontra o m a do arquivo, l o ultimo registro e o arquivo fechado. Caso seja inclu um no nal deste e e do registro, o LINGO no fechar o arquivo at que o modelo corrente seja resolvido. Isto pode a a e causar problemas, caso mltiplos arquivos sejam abertos durante a resoluo do modelo. u ca Comentrios inclusos nos arquivos textos so ignorados pelo LINGO. O nmero mximo de a a u a arquivos que um modelo pode referenciar, simultaneamente, 16. e
9.2
A funo de interface @TEXT pode ser usada com o intuito de exportar solues para um arquivo ca co texto. Podem ser exportados tanto membros de um conjunto, quanto valores de um atributo. A sintaxe para este comando apresentada a seguir. e @TEXT([nome do arquivo]) Instrues escritas na seo DATA, que utilizam funes de interface para exportar dados, so co ca co a referidas como operaes de sa co da. Operaes deste tipo so executadas somente quando o LINGO co a termina de resolver o modelo, seguindo a ordem a qual elas so listadas na seo. a ca Um exemplo de como exportar dados utilizando @TEXT apresentado abaixo. e DATA: @TEXT(Resultados.txt ) = x; @TEXT() = y; ENDDATA No caso onde o nome do arquivo omitido, os dados so enviados para a tela de resultados do e a LINGO.
23
10
10.1
@OLE uma funo de interface usada para mover dados entre o LINGO e o Excel, atravs e ca e de transferncias baseadas em OLE (Object Linking and Embedding). Essas transferncias so e e a realizadas diretamente pela memria e, portanto, no fazem uso de arquivos intermedirios. o a a
10.2
A funo @OLE pode ser usada nas sees SETS e DATA para importar dados. @OLE pode tanto ca co ler membros de conjuntos quanto atributos - membros so esperados no formato texto, enquanto a que atributos no formato numrico. e A sintaxe da funo @OLE, quando usada na seo DATA para importar dados do EXCEL, ca ca : e lista de objetos = @OLE(nome do arquivo xls [, lista de nomes]); A lista de objetos formada por objetos do modelo, opcionalmente separados por v e rgulas, que so inicializados com dados importados de uma planilha. Ela pode conter qualquer combinao a ca de nomes de conjuntos, atributos e variveis escalares. a A lista de nomes composta por nomes de campos denidos na planilha do Excel, que compem e o os dados importados. Cada nome da lista deve possuir um elemento corresponde na lista de objetos. Existem trs opes poss e co veis de denir a lista de nomes, exemplicadas a seguir. custo, capacidade = @OLE(Transporte.xls); Quando a lista de nomes omitida, o LINGO utiliza os nomes contidos na lista de objetos. e Deste modo, custo e capacidade so inicializados com os valores denidos, respectivamente, nos a campos nomeados como custo e capacidade no arquivo Transporte.xls. custo, capacidade = @OLE(Transporte.xls, tabela); Neste exemplo, um unico campo, rotulado com o nome de tabela no arquivo Transporte.xls, utilizado para inicializar os atributos custo e capacidade. Assumindo que o campo tabela e possui duas colunas, o LINGO utiliza a primeira para inicializar custo e a segunda para inicializar capacidade. Para que este mtodo funcione necessrio que ambos custo e necessidade, sejam e e a denidos pelo mesmo conjunto, ou conjuntos de mesmo tamanho. Alm disso, ambos devem ser e conjuntos ou atributos - tipos diferentes no so permitidos. a a custo, capacidade = @OLE(Transporte.xls, cust,cap); Neste caso, cada atributo inicializado por um campo correspondente. O atributo custo ir e a receber os dados referentes a cust e capacidade, os dados referentes a cap. Para melhor entendimento de como importar os dados do EXCEL utilizando a funo @OLE, ca o modelo Problema de Transporte com 6 fbricas e 8 armazens ser modicado para receber os a a dados inseridos no arquivo Transporte.xls. As modicaes so apresentadas a seguir. co a
24 SETS: fabricas: capacidade; armazens: demanda; rotas(fabricas,armazens): custo, qtdEnviada; ENDSETS DATA: fabricas, armazens, capacidade, demanda, custo = @OLE(Transporte.xls, fabricas,armazens,capacidade,demanda, custo); ENDDATA
Alm de inserir os dados na planilha, necessrio denir os nomes para os campos fabricas, e e a armazens, capacidade, demanda e custo. Especicamente, sero denidos os seguintes nomes: a Nome fabricas armazens capacidade demanda custo Campo B6:B11 C5:J5 K6:K11 C12:J12 C6:J11
Como os objetos do modelo possuem os mesmo nomes que os seus correspondentes campos, a lista de nomes pode ser omitida na funo @OLE, gerando uma nova verso simplicada para o ca a modelo: DATA: fabricas, armazens, capacidade, demanda, custo = @OLE(Transporte.xls); ENDDATA De forma alternativa, @OLE ainda pode ser usada na seo sets para importar membros de ca um conjunto. Sendo assim, para o exemplo em questo, ter a amos:
25 SETS: fabricas / @OLE(Transporte.xls, fabricas) /: capacidade; armazens / @OLE(Transporte.xls, armazens) /: demanda; rotas(fabricas,armazens): custo, qtdEnviada; ENDSETS
10.3
Existem duas maneiras de denir um nome para um campo no EXCEL. Para denir um nome pela primeira maneira, siga os seguintes passos: 1. pressionando o boto esquerdo do mouse, arraste o cursor sobre o conjunto de clulas que a e compem o campo; o 2. solte o boto esquerdo do mouse; a 3. selecione o menu Inserir|Nome|Denir; 4. digite o nome desejado; e 5. clique no boto OK. a
26
Pela segunda maneira, mais simples, os passos so os seguintes: a 1. pressionando o boto esquerdo do mouse, arraste o cursor sobre o conjunto de clulas que a e compem o campo; o 2. solte o boto esquerdo do mouse; a 3. clique na caixa de nomes localizada no canto superior esquerdo do EXCEL; 4. digite o nome desejado; e 5. pressione ENTER.
27
10.4
Para excluir um nome anteriormente denido no EXCEL, siga os seguintes passos: 1. selecione o menu Inserir|Nome|Denir; 2. selecione o nome desejado; 3. clique no boto Excluir; e a 4. clique no boto Fechar. a
10.5
A funo de interface @OLE tambm pode ser usada na seo DATA com o intuito de exportar ca e ca dados para o EXCEL. A sintaxe da funo @OLE, quando utilizada para exportar dados, : ca e @OLE(nome do arquivo xls [, lista de nomes]) = lista de objetos; A lista de objetos uma lista de nomes de conjuntos, atributos e variveis escalares, separados e a por v rgulas. A lista de nomes composta por nomes de campos denidos na planilha do Excel, que compem e o as clulas para as quais os dados sero exportados. Cada nome da lista deve possuir um elemento e a corresponde na lista de objetos. Existem trs opes dispon e co veis de denir a lista de nomes, exemplicadas a seguir. @OLE(Transporte.xls) = x, fo; Quando a lista de nomes omitida, o LINGO utiliza os nomes contidos na lista de objetos. e Deste modo, o campo x ir receber os dados da varivel x e o campo fo, o valor de fo. a a @OLE(Transporte.xls, solucao) = x, y; Neste exemplo, um unico campo, rotulado com o nome de solucao no arquivo Transporte.xls, utilizado para receber os valores das variveis x e y. Assumindo que o campo solucao possui e a duas colunas, o LINGO utiliza a primeira para receber x e a segunda para receber y. Para que este mtodo funcione necessrio que ambos x e y sejam denidos pelo mesmo conjunto, ou conjuntos e e a de mesmo tamanho. Alm disso, ambos devem ser conjuntos ou atributos - tipos diferentes no e a so permitidos. a
28 @OLE(Transporte.xls, qtdEnviada, custoTotal) = x, fo; Neste caso, cada campo denido em Transporte.xls recebe os dados de um objeto correspondente. O campo qtdEnviada ir receber os valores da varivel x enquanto que custoTotal, o a a valor de fo. Para elucidar como a funo @OLE utilizada para enviar dados ao EXCEL, o modelo Proca e blema de Transportecom 6 fbricas e 8 armazens ser modicado de modo a imprimir os resula a tados no arquivo Transporte.xls. As modicaes so apresentadas abaixo. co a SETS: fabricas / @OLE(Transporte.xls, fabricas) /: capacidade; armazens / @OLE(Transporte.xls, armazens) /: demanda; rotas(fabricas,armazens): custo, qtdEnviada; ENDSETS DATA: capacidade, demanda, custo = @OLE(Transporte.xls, capacidade, demanda,custo); ENDDATA DATA: @OLE(Transporte.xls, qtdEnviada, cTotal) = qtdEnviada, fo; ENDDATA
Os campos qtdEnviada e cTotal devem ser denidos no arquivo Transporte.xls da seguinte maneira: Nome qtdEnviada cTotal Campo C21:J26 I28
29 Quando o modelo for resolvido, o LINGO ir ler os dados do arquivo Excel Transporte.xlspara a as variveis fabricas, armazens, capacidade, demanda e custo. Uma vez que a soluo tima tenha a ca o sido encontrada, o LINGO enviar os resultados para o mesmo arquivo Excel, atravs dos campos a e qtdEnviada e cTotal, como mostra a gura a seguir.
10.6
Ao utilizar a funo @OLE, algumas consideraes devem ser observadas: ca co 1. Para que @OLE funcione corretamente necessrio que o arquivo .xls utilizado esteja e a aberto, a no ser quando objetos embutidos so utilizados (objetos embutidos so explicados a a a na prxima seo); o ca 2. A funo @OLE no trabalha com conjuntos derivados tri-dimensonais; e ca a 3. @OLE l os campos denidos no Excel, de acordo com a seguinte ordem: da esquerda para e direita e de cima para baixo.
30
11
Assim como poss embutir um modelo LINGO no EXCEL, o processo pode ser invertido de e vel modo que uma planilha seja embutida no LINGO. Para embutir um arquivo .xls no LINGO, siga os seguintes passos: 1. selecione o menu Edit|Insert New Object; 2. selecione a opo Criar do Arquivo na caixa de dialogo Inserir Objeto; ca 3. digite o caminho e o nome do arquivo a ser embutido; 4. marque a caixa Vincular; e 5. clique no boto OK. a
Para ilustrar este processo, o modelo Problema de Transporte apresentado na seo 6 ser ca a utilizado como exemplo. Aps inserir o novo objeto contendo o arquivo Transporte.xls, temos: o
31
A planilha de dados est agora embutida no LINGO, exibida ao topo do modelo Problema a de Transporte. Para edit-la, basta dar um duplo-clique sobre o objeto. a
32 Quando o modelo for resolvido, o LINGO enviar os resultados para o arquivo Transporte.xls a atualizando a planilha embutida, como exibido a seguir.
12
O LINGO capaz de funcionar como um servidor OLE. Isto signica que um modelo do LINGO e pode ser embutido em qualquer aplicao que funcione como cliente OLE como, por exemplo, o ca EXCEL. Embutir um modelo no EXCEL conveniente, pois o modelo estar sempre dispon e a vel sempre que o arquivo .xls for aberto, no sendo necessrio abrir o otimizador LINGO. a a Para embutir um documento do LINGO em um arquivo do EXCEL, siga os seguintes passos: 1. selecione o menu Inserir|Objeto; 2. selecione o objeto LINGO Document na lista Tipo de objeto; e 3. clique no boto OK; a
33
Aps concluir os passos citados acima, um documento em branco do LINGO surgir na planilha o a corrente. O modelo pode ser digitado no documento diretamente, ou copiado de uma outra aplicao (copiar/colar). ca Para ilustrar este recurso, ser utilizado o modelo Problema de Transporte descrito na seo a ca 6. Embutindo este modelo em um arquivo nomeado como Transporte.xls, ter amos:
Ao dar um duplo-clique sobre o objeto contendo o modelo embutido, uma barra de comandos do LINGO aparecer no canto superior da tela. Para resolver o modelo, basta clicar no boto a a Solve da barra de comandos. Depois de otimizar o modelo, o LINGO enviar os resultados para a o arquivo Transporte.xls, como exibido a seguir.
34
13
O LINGO disponibiliza um comando script, prprio para ser usado pelo EXCEL, que permite a o criao de um link OLE automatizado. Este link estabelece uma relao cliente-servidor entre o ca ca EXCEL e o LINGO. Com isto, torna-se poss resolver um modelo escrito na prpria planilha vel o do EXCEL, sem a necessidade de utilizar o aplicativo do LINGO, de forma transparente para o usurio. a Para ilustrar esse recurso ser utilizado o modelo Problema de Transporte mostrado na seo a ca 6. Esta ilustrao assume que o leitor esteja razoavelmente familiarizado com o uso de macros do ca Visual Basic. Considere a seguinte planilha do EXCEL:
35
Nesta planilha, intitulada Dados, esto denidos os seguintes campos: a Nome fabricas armazens capacidade demanda custo solucao cTotal Campo B6:B11 C5:J5 K6:K11 C12:J12 C6:J11 C21:J26 I28
Existe ainda uma segunda planilha, chamada Modelo, contendo o modelo do Problema de Transporte descrito em cdigo script. Um script deve possuir o seguinte esquema: o
36 SET ECHOIN 1 Outras funes SET co MODEL: modelo LINGO END GO SET ECHOIN 0 QUIT O comando SET ECHOIN 1 ativa o terminal do LINGO, permitindo que o script seja lido. J o comando GO usado para resolver o modelo, descrito entre as palavras-chave MODEL e a e END. A planilha Modelo exibida abaixo: e
Para que este script seja enviado ao LINGO necessrio que ele esteja denido atravs do e a e seguinte campo: Nome Campo modelo A1:A31
37 Denido os campos e o modelo LINGO, ser necessrio adicionar ao boto Solve, criado na a a a planilha Dados, o seguinte cdigo: o Private Sub Solve Click() Dim iErr As Integer Dim LINGO As Object Set LINGO = CreateObject(LINGO.Document.4) iErr = LINGO.RunScriptRange(modelo) If (iErr > 0) Then MsgBox (O modelo no pode ser Resolvido) a End If End Sub A automao OLE utilizada para chamar o mtodo RunScriptRange, passando o campo ca e e modelo como parmetro. A rotina RunScriptRange ento, solicita ao EXCEL que obtenha o a a contedo deste campo e, inicia o processo de execuo do script. Esse processo continua at que a u ca e palavra-chave QUIT seja encontrada ou no haja mais nenhum comando a ser lido. A instruo a ca RunScriptRange retornar um valor 0 caso o script esteja pronto para ser processado. a Voltando ` planilha Dados, para que o modelo seja resolvido basta apenas que o boto Solve a a seja pressionado. Aps uma breve pausa, a soluo encontrada pelo LINGO enviada a planilha, o ca e como mostra a gura abaixo.
38
13.1
Comando SET
O comando SET permite alterar conguraes padres do LINGO. Todas as opes congurveis co o co a pelo usurio esto dispon a a veis atravs do comando SET. A sintaxe para este comando : e e SET nome do parametro | ndice do parametro [valor do parametro] Caso o valor do parmetro seja omitido, o LINGO utilizar o valor padro para o parmetro a a a a especicado. Alguns dos parmetros acess a veis atravs do comando SET so apresentados a seguir. e a Indice 10 23 24 33 34 46 51 Nome TIMLIM TERSEO STAWIN ECHOIN ERRDLG DUALCO CUTOFF Padro a 0 0 1 0 1 1 1 108 Descrio ca Tempo limite de execuo em segundos ca (0: sem limite) Omite o relatrio gerado aps a resoluo do modelo o o ca (0: no, 1: sim) a Exibe a janela de status do processo de busca (1: sim, 0: no) a Envia comandos script para o terminal (0: no, 1: sim) a Exibe mensagens de erro em uma caixa de dilogo a (1: sim, 0: no) a Calcula os valores duais (0: nenhum, 1: preos, 2: preos e range) c c Descarta valores de solues menores que 1 108 co
39
Parte II
Determine a estratgia tima para o investidor de forma que a rentabilidade de sua aplicao e o ca seja mxima. a Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: titulos retornoj maturidadej riscoj : : : : Conjunto de t tulos; Retorno anual do t tulo j (%); Maturidade do t tulo j (anos); Risco associado ao t tulo j.
retornoj xj
s.a: xj xj
jtitulos
25 50 45 = 100
xj
jtitulos
xj
jtitulos
Modelo Lingo
@ole(Investimentos(R).xls,solucao,retmax) = x, fo; enddata (2) Mistura de Minrios com Custos Uma mineradora recebe uma encomenda para produzir e 6000 toneladas de minrio atendendo a especicao abaixo. e ca Elemento qu mico Fe Al2 O3 P PPC He Teor M nimo permitido (%) 44,5 0,27 0,035 2,05 38 Teor Mximo a permitido (%) 49,5 0,37 0,043 2,65 50
Sabe-se que esta encomenda pode ser atendida a partir de um conjunto de pilhas de minrios, e cuja composio, disponibilidade e custo so relacionados a seguir. ca a
42
Pilha 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
Fe (%) 52,64 39,92 47,19 49,36 43,94 48,97 47,46 46,52 56,09 46,00 49,09 49,77 53,03 52,96 42,09
Al2 O3 (%) 0,52 0,18 0,50 0,22 0,46 0,54 0,20 0,32 0,95 0,26 0,22 0,20 0,24 0,29 0,17
P (%) 0,084 0,029 0,050 0,039 0,032 0,057 0,047 0,039 0,059 0,031 0,040 0,047 0,047 0,052 0,031
PPC (%) 4,48 0,65 2,52 1,74 2,36 4,34 5,07 3,51 4,10 2,51 4,20 4,81 4,17 4,81 1,38
He (%) 45 97 52 78 41 90 9 4 80 21 12 12 1 1 47
Massa (ton) 1500 2000 1700 1450 1250 1890 1640 1124 1990 900 1540 1630 1320 1245 1859
Custo ($/ton) 10,50 12,50 12,00 10,00 11,50 11,00 10,80 11,20 10,40 12,00 10,30 11,90 12,30 11,10 12,10
Qual a estratgia da mineradora para atender ao pedido de forma que o custo seja m e nimo? Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: parametros pilhas tlj tuj Qui ci tij p : : : : : : : : Conjunto de parmetros ; a Conjunto de pilhas; Teor m nimo admiss para o parmetro j no produto nal (%); vel a Teor mximo admiss para o parmetro j no produto nal (%); a vel a Quantidade mxima dispon na pilha i (t); a vel Custo de utilizao de uma tonelada de minrio da pilha i; ca e Teor do parmetro j na pilha i(%); a Produo total requerida, em toneladas (t). ca
e a seguinte varivel de deciso: a a xi : Quantidade de minrio a ser retirada da pilha i, em toneladas (t). e
ci xi
0 0 = p
j parametros j parametros
xi
ipilhas
xi xi Modelo Lingo
Qui Z+
i pilhas i pilhas
44 Title: Mistura(R).lg4; sets: parametros/@ole(Mistura(R).xls,parametros)/: tl, tu; pilhas/@ole(Mistura(R).xls,pilhas)/: c, Qu, x; matriz(pilhas,parametros): t; endsets data:
! Importa os dados do Excel;
@sum(pilhas(i): x(i)) = p;
! A varivel x(i) inteira; a e
45 (3) Relativamente ao problema anterior, suponha que se possa retomar apenas mltiplos de 10 u toneladas e que para cada pilha s se pode retomar um m o nimo de 500 toneladas. Qual a nova estratgia a ser adotada? e Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: parametros pilhas tlj trj Qui nunidreti retmin ci tij p : : : : : : : : : : Conjunto de parmetros ; a Conjunto de pilhas; Teor m nimo admiss para o parmetro j no produto nal (%); vel a Teor desejvel para o parmetro j no produto nal (%); a a Quantidade mxima dispon na pilha i (t); a vel Nmero de unidades de retomada na pilha i; u Retomada m nima, em toneladas (t); Custo de utilizao de uma tonelada de minrio da pilha i; ca e Teor do parmetro j na pilha i (%); a Produo total requerida, em toneladas (t). ca
e as seguintes variveis de deciso: a a xi yi : Quantidade de minrio a ser retirado da pilha i (t); e 1 se a pilha i for usada; : 0 caso contrrio. a
(ci xi )
0 0 Qui = = p xi /unidret
xi xi
ipilhas
nunidreti yi xi nunidreti yi
46 Modelo Lingo
Title: Mistura(R).lg4; sets: parametros/@ole(Mistura(R).xls,parametros)/: tl, tu; pilhas/@ole(Mistura(R).xls,pilhas)/: c, Qu, x, y, nunidret; matriz(pilhas,parametros): t; endsets data:
! Importa os dados do Excel;
47
! A quantidade a ser retomada em cada pilha i deve ser inferior ou igual a Qu(i);
@sum(pilhas(i): x(i)) = p;
! A quantidade x(i) a ser retomada na pilha i deve ser mltipla de unidret; u
@ole(Mistura(R).xls,solucao) = x; enddata (4) Mistura de Minrios com Metas Uma mineradora recebe uma encomenda para produzir e 6000 toneladas de minrio atendendo a especicao abaixo. e ca Elemento qu mico F e (%) Al2 O3 (%) P (%) P P C (%) He (%) Teor M nimo permitido 44,5 0,27 0,035 2,05 38 Meta 47,0 0,32 0,040 2,35 40 Teor Mximo a permitido 49,5 0,37 0,043 2,65 50
Sabe-se que esta encomenda pode ser atendida a partir de um conjunto de pilhas de minrios, e cuja composio e disponibilidade so relacionadas a seguir. ca a
48
Pilha 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
Fe (%) 52,64 39,92 47,19 49,36 43,94 48,97 47,46 46,52 56,09 46,00 49,09 49,77 53,03 52,96 42,09
Al2 O3 (%) 0,52 0,18 0,50 0,22 0,46 0,54 0,20 0,32 0,95 0,26 0,22 0,20 0,24 0,29 0,17
P (%) 0,084 0,029 0,050 0,039 0,032 0,057 0,047 0,039 0,059 0,031 0,040 0,047 0,047 0,052 0,031
PPC (%) 4,48 0,65 2,52 1,74 2,36 4,34 5,07 3,51 4,10 2,51 4,20 4,81 4,17 4,81 1,38
He (%) 45 97 52 78 41 90 9 4 80 21 12 12 1 1 47
Massa (ton) 1500 2000 1700 1450 1250 1890 1640 1124 1990 900 1540 1630 1320 1245 1859
Custo ($/ton) 10,50 12,50 12,00 10,00 11,50 11,00 10,80 11,20 10,40 12,00 10,30 11,90 12,30 11,10 12,10
A tabela a seguir classica os parmetros de controle em 5 critrios: Irrelevante (-), Impora e tante (I), Muito Importante (MI), Cr tico (C) e Muito Cr tico (MC), cujos pesos so tambm a e apresentados. Critrio e Peso do Critrio e Parmetro a Critrio e 0 Fe MI I 1 Al2 O3 MI 5 P MC C 10 PPC C MC 100 He -
Considere, ainda, os seguintes pesos para comparar os diversos parmetros de controle entre a si: Parmetro a Peso de comparao ca Fe 1 Al2 O3 100 P 1000 PPC 10 He 1
Qual a estratgia da mineradora para atender ao pedido, de forma que as especicaes de e co qualidade estejam mais prximas das metas especicadas? Observao: considere que a peo ca nalidade pelo desvio de atendimento ` meta igual ao produto do peso de comparao pelo a e ca peso do critrio. e Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: parametros pilhas tlj trj : : : : Conjunto de parmetros ; a Conjunto de pilhas; Teor m nimo admiss para o parmetro j no produto nal (%); vel a Teor desejvel para o parmetro j no produto nal (%); a a
49 wdtj dtnj dtpj Qui nunidreti tij p : : : : : : : Peso do desvio da meta para o parmetro j; a Desvio negativo da meta para o parmetro j, em toneladas; a Desvio positivo da meta para o parmetro j, em toneladas; a Quantidade mxima dispon na pilha i, em toneladas; a vel Nmero de unidades de retomada; u Teor do parmetro j na pilha i (%); a Produo total requerida, em toneladas. ca
e as seguintes variveis de deciso: a a xi yi : Quantidade de minrio a ser retirada da pilha i (t); e 1 se a pilha i for usada; : 0 caso contrrio. a
O modelo de programao matemtica para o Exerc 4 : ca a cio e min (wdtj dtnj + wdtj dtpj )
jparametros
0 0 = 0
xi xi
ipilhas
Qui = = p xi /unidret
nunidreti yi xi nunidreti yi
50 Modelo Lingo
title: MisturaMetas(R).lg4; sets: parametros /@ole(MisturaMetas(R).xls,parametros)/: tl, tu, tr, wdt, dtn, dtp; pilhas /@ole(MisturaMetas(R).xls,pilhas)/: Qu, nunidret, x, y; matriz(pilhas,parametros): t; endsets data:
! Importa os dados do Excel;
51
! A meta de qualidade deve ser buscada para cada parmetro j; a
@sum(pilhas(i): x(i)) = p;
! A quantidade x(i) a ser retomada na pilha i deve ser mltipla de unidret; u
@ole(MisturaMetas(R).xls,dtn,dtp,solucao) = dtn, dtp, x; enddata (5) Problema das usinas Uma empresa siderrgica possui 3 usinas e cada uma delas requer u uma quantidade mensal m nima de minrio para operar. A empresa adquire minrio de 4 e e minas diferentes. Cada uma das minas tem uma capacidade mxima de produo mensal a ca estabelecida. Por imposies contratuais, o custo do minrio para a empresa composto por co e e um custo xo mensal para cada mina (este valor pago em caso de haver produo na mina), e ca mais um custo de transporte ($/t) que varia de acordo com a distncia entre as minas e usinas a (cada par mina/usina tem um custo diferente). Os dados so mostrados na tabela a seguir: a Cap. mx. das a minas (t/ms) e 11500 14500 13000 12300 Custo Fixo ($) 50000 40000 30000 25500 -
MINAS Mina 1 ($/t) Mina 2 ($/t) Mina 3 ($/t) Mina 4 ($/t) Quant. req. (t/ms) e
52 Construir um modelo de otimizao para determinar a quantidade de minrio a ser comprada ca e de cada mina e levada a cada usina de forma a minimizar o custo total de compra de minrio. e Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: minas usinas capi cf ixoi demandaj custoij : : : : : : Conjunto de Minas ; Conjunto de usinas; Capacidade de produo da mina i; ca Custo xo de utilizao da mina i; ca Demanda requerida pela usina j; Custo de transporte de minrio da mina i para a usina j. e
e as seguintes variveis de deciso: a a xij : Quantidade de minrio a ser transportado da mina i para a usina (j); e 1 se a mina i for usada; yi : 0 caso contrrio. a O modelo de programao matemtica para o Exerc 5 : ca a cio e min
iminas jusinas
(custoij xij )
+
iminas
(cf ixoi yi )
s.a: xij
jusinas
xij
iminas
yi xij yi
(
jusinas
0 {0, 1}
53 Modelo Lingo
Title: Usinas(R).lg4; sets: minas/@ole(Usinas(R).xls,minas)/: cap, cxo, y; usinas/@ole(Usinas(R).xls,usinas)/: demanda; matriz(minas,usinas): custo, x; endsets data:
! Importa os dados do Excel;
54
! A varivel y(i) deve ser inteira; a
@ole(Usinas(R).xls,solucao,ctotal) = x, fo; enddata (6) Planejamento da ProduoA LCL Motores recebeu recentemente uma encomenda para ca entregar 3 modelos diferentes de motores. Cada motor necessita de um determinado nmero u de horas de trabalho no setor de montagem e de acabamento. Para atender a encomenda, a LCL pode tambm terceirizar parte de sua produo. A tabela a seguir resume as informaes e ca co sobre a demanda por cada modelo de motor, o tempo necessrio para montar uma unidade a de cada modelo, a quantidade de horas dispon veis no setor de montagem, o tempo necessrio a para dar acabamento a uma unidade de cada unidade, a quantidade de horas dispon veis no setor de acabamento, o custo de produo, bem como o custo de terceirizao de uma unidade ca ca de cada modelo: Modelo Demanda Montagem Acabamento Custo de produo ca Terceirizado 1 3000 unid. 1 h/unid. 2,5 h/unid. $50 $65 2 2500 unid. 2 h/unid. 1 h/unid. $90 $92 3 500 unid. 0,5 h/unid. 4 h/unid. $120 $140 Total 6000 unid. 6000 h 10000 h -
Qual a estratgia tima a ser adotada pela empresa de forma a atender aos pedidos? e o Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: modelos demi monti acabi cprodi cterci hM ont hAcab : : : : : : : : Conjunto de modelos de motores; Demanda por motores do modelo i (unid); Tempo gasto na montagem de um motor do modelo i (h/unid); Tempo gasto no acabamento de um motor do modelo i (h/unid); Custo de produo de um motor do modelo i; ca Custo de terceirizao de um motor do modelo i; ca Tempo total dispon para a montagem dos motores (h); vel Tempo total dispon para o acabamento dos motores (h); vel
e as seguintes variveis de deciso: a a xi yi : Quantidade de motores do modelo i produzidos; : Quantidade de motores do modelo i terceirizados.
(cprodi xi )
imodelos
(cterci yi )
imodelos
demi
i modelos
xi yi Modelo Lingo
Z+ Z+
i modelos i modelos
56 Title: Motores(R).lg4; sets: modelos/@ole(Motores(R).xls,modelos)/: dem, mont, acab, cprod, cterc, x, y; endsets data:
! Importa os dados do Excel;
57 (7) Planejamento da Produo Uma determinada empresa est interessada em maximizar o ca a lucro mensal proveniente de quatro de seus produtos, designados por I, II, III e IV. Para fabricar esses produtos, ela utiliza dois tipos de mquinas (M1 e M2) e dois tipos de mo-dea a obra (MO1 e MO2), que tm as seguintes disponibilidades: e Mquinas a M1 M2 Disponibilidades (mquina-hora/ms) a e 80 20 Mo-de-obra a MO1 MO2 Disponibilidade (homem-hora/ms) e 60 40
O setor tcnico da empresa fornece os seguintes coecientes, que especicam o total de horas e de mquina e horas de mo-de-obra necessrias para a produo de uma unidade de cada a a a ca produto: Mquinas a M1 M2 I 5 2 Produtos II 4 6 III 8 IV 9 8 Mo-de-obra a MO1 MO2 I 2 7 Produtos II 4 3 III 2 IV 8 7
O setor comercial da empresa fornece as seguintes informaes: co Produtos I II III IV Potencial de vendas (unidades/ms) e 70 60 40 20 Lucro Unitrio a (R$/ms) e 10,00 8,00 9,00 7,00
Deseja-se planejar a produo mensal da empresa que maximize o lucro. ca Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: produtos maquinas mObras demj lucroj dispM aqi dispM Obrak hM aqij hM Obrakj : : : : : : : : : Conjunto de produtos; Conjunto de mquinas; a Conjunto dos tipos de mo-de-obra; a Demanda por produtos do tipo j (unid); Lucro obtido com a venda de produtos do tipo j; Disponibilidade da mquina i (h/mes); a Disponibilidade de mo-de-obra do tipo k (h/mes); a Tempo dispon da mquina i para produo de produtos do tipo j (h); vel a ca Tempo de mo-de-obra do tipo k para produo de produtos do tipo j (h). a ca
(lucroj xj )
xj xj Modelo Lingo
demj Z+
59 Title: Produtos(R).lg4; sets: produtos/@ole(Produtos(R).xls,produtos)/: demanda, lucro, x; maquinas/@ole(Produtos(R).xls,maquinas)/: dispMaq; mObras/@ole(Produtos(R).xls,mObras)/: dispMObra; matriz1(maquinas,produtos): hMaq; matriz2(mObras,produtos): hMObra; endsets data:
! Importa dados do Excel;
60 (8) Alocao de Pessoal Sta Scheduling O administrador de um hospital deseja determinar ca o escalonamento dos enfermeiros. Para isso ele organiza um sistema de planto dividindo o a dia em 6 per odos de 4 horas. A tabela a seguir mostra o nmero m u nimo de enfermeiros que devem estar presentes em cada horrio. a Horrio a # enfermeiros 8-12 51 12-16 58 16-20 62 20-24 41 24-04 32 04-08 19
Cada enfermeiro cumpre um planto normal de 8 horas, que pode comear apenas no in a c cio de um destes per odos. No horrio de 8 `s 20 horas, o enfermeiro recebe R$100 por hora de a a trabalho e R$125 por hora no horrio noturno (20 horas `s 18 horas). Como o administrador a a deve escalar os enfermeiros de forma a minimizar o custo com a mo-de-obra? a Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: turnos reqj custosj : : : Conjunto de turnos; Nmero de enfermeiros requeridos no turno j; u Custo da jornada de trabalho no turno j;
e a seguinte varivel de deciso: a a xj : Quantidade de enfermeiros a serem escalados no in do turno j (unid); cio
(custosj xj )
61 Modelo Lingo
62 (9) O administrador de um hospital deseja determinar o escalonamento dos enfermeiros. Para isso ele organiza um sistema de planto dividindo o dia em 6 per a odos de 4 horas. A tabela a seguir mostra o nmero m u nimo de enfermeiros que devem estar presentes em cada horrio. a Horrio a # enfermeiros 08-12 51 12-16 58 16-20 62 20-24 41 24-04 32 04-08 19
Cada enfermeiro cumpre um planto normal de 8 horas, que pode comear apenas no in a c cio de um destes per odos. No horrio de 8 `s 20 horas, o enfermeiro recebe R$100 pela hora de a a trabalho e R$125 no horrio noturno (20 horas `s 18 horas). Alguns enfermeiros podem ser a a solicitados para estender o planto por mais 4 horas seguidas. A hora-extra custa 50% mais a caro e em cada planto, no mais que 40% dos enfermeiros podem estar cumprindo hora-extra. a a Como o administrador deve escalar os enfermeiros, minimizando o custo com a mo-de-obra? a Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: turnos reqj cSHEj cCHEj : : : : Conjunto de turnos; Nmero de enfermeiros requeridos no turno j; u Custo da jornada de trabalho sem hora extra no turnoj Custo da jornada de trabalho com hora extra no turnoj
e as seguintes variveis de deciso: a a xj yj : : Quantidade de enfermeiros que comeam sua jornada no in do turno j c cio e no fazem hora-extra a Quantidade de enfermeiros que comeam sua jornada no in do turno j c cio e fazem hora-extra
(cSHEj xj
cCHEj yj )
s.a: xj + yj + xj1 + yj1 + yj2 yj2 xj yj reqj j turnos 0.4 (xj + yj + xj1 + yj1 + yj2 ) j turnos Z+ Z+ j turnos j turnos
63 Modelo Lingo
64
! O total de enfermeiros com hora extra no deve ultrapassar 40% do total de enfermeiros em um turno; a
@ole(EnfermeirosHoraExtra(R).xls,excesso,folga,semHE,comHE,ctotal) = excesso, folga, x, y, fo; enddata (10) Deseja-se formar p ligas Ls a partir de q matrias-primas Rj . Sabe-se que: e (a) uma unidade da matria prima Rj contm aij unidades do metal Mi ; e e (b) uma unidade da liga Ls contm bis unidades do metal Mi ; e (c) uma unidade da matria-prima Rj custa cj unidades monetrias; e a (d) uma unidade da liga Ls vendida a vs unidades monetrias; e a (e) de cada matria-prima Rj s existem uj unidades dispon e o veis; Faa um modelo de programao linear que permita determinar a quantidade xj de matriac ca e prima Rj a ser comprada e a quantidade ys de liga Ls a ser vendida para que o lucro seja mximo. a Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: ligas metais materias vs pj kj aij bis : : : : : : : : : Conjunto de ligas; Conjunto de metais; Conjunto de matrias-primas; e Valor de venda de uma unidade da liga s; Custo de uma unidade da matria-prima j; e Nmero de unidades dispon u veis da matria-prima j; e Nmero de unidades do metal i encontrado em uma unidade u da matria-prima j ; e Nmero de unidades do metal i presente em uma unidade da liga s; u
65 xj ys : : Quantidade de matria-prima do tipo j a ser comprada e Quantidade de liga do tipo s a ser vendida
vs ys
jmaterias
pj xj
s.a: aij xj
jmaterias
sligas
bis ys
xj xj ys
kj Z+ Z+
(11) Problema de Corte de Estoque Unidimensional (Cutting Stock Problem) Certa empresa trabalha com a produo de etiquetas autocolantes. O papel usado para sua confeco ca ca encontra-se em bobinas de mesmo comprimento. A largura das bobinas de 50 cm. As e encomendas para a prxima semana impem a necessidade de se cortarem 32 bobinas de 15 o o cm de largura, 17 bobinas de 17,5 cm de largura e 21 bobinas de 20 cm de largura. E pol tica da empresa manter em estoque o excedente ao pedido em quantidade mxima de 10 bobinas a cortadas de acordo com a encomenda. Esta ao evita a imobilizao de capital, uma vez que ca ca so incertos os prximos pedidos. a o
A tabela abaixo relaciona as poss veis programaes de cortes, tendo em vista as encomendas. co Programaes de corte co 1 2 3 4 5 6 Largura da Faixa Cortada 15cm 3 2 1 2 0 0 17,5cm 0 1 2 0 1 0 20cm 0 0 0 1 1 2 Desperd cio 5 2,5 0 0 12,5 10
Qual a estratgia a ser seguida pela empresa de forma a minimizar os desperd e cios face ` a necessidade de produo? ca
66 Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: padroes bobinas despi demandaj aij estmax : : : : : : Conjunto de padres de corte; o Conjunto dos tipos de bobinas; Desperd relativo aos cortes realizados de acordo com o padro i; cio a Demanda por bobinas do tipo j; Quantidade de bobinas do tipo j produzidas no padro de corte i; a Estoque mximo de bobinas permitido; a
(despi xi )
s.a: aij xi
ipadroes
aij xi
ipadroes
xi Modelo Lingo
67
Title: CorteBobina(R).lg4; sets: padroes/@ole(CorteBobina(R).xls,padroes)/: desp, x; bobinas/@ole(CorteBobina(R).xls,bobinas)/: demanda; matriz(padroes,bobinas): a; endsets data:
! Importa dados do Excel;
@ole(CorteBobina(R).xls,excesso,solucao,ptotal) = excesso, x, fo; enddadta (12) Problema de Corte de Estoque Unidimensional Uma serralheria dispe de barras de 7 o metros de comprimento que devem ser cortadas para obter barras menores atendendo a uma encomenda. As seguintes quantidades e tamanhos so requeridos: 92 barras de 2 metros, 59 a barras de 3 metros e 89 barras de 4 metros. Elabore um modelo de programao linear inteira ca que minimize as perdas com os cortes.
68 Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: padroes barras perdai demandaj aij : : : : : Conjunto dos poss veis padres de corte; o Conjunto de barras; Perda com os cortes realizados de acordo com o padro i; a Demanda por barras do tipo j; Quantidade de barras do tipo j produzidas no padro de corte i; a
(perdai xi )
s.a: aij xi
ipadroes
demandaj Z+
j barras i padroes
xi Modelo Lingo
69 Title: Corte(R).lg4; sets: padroes/@ole(Corte(R).xls,padroes)/: perda, x; barras/@ole(Corte(R).xls,barras)/: demanda; matriz(padroes,barras): a; endsets data:
! Importa dados do Excel;
@ole(Corte(R).xls,excesso,solucao,ptotal) = excesso, x, fo; enddata (13) Problema de Corte de Estoque Unidimensional Relativamente ao problema anterior, considere que a serralheria no tem espao para reaproveitar as barras menores no usadas. a c a Elabore um modelo de programao linear inteira que minimize as perdas com os cortes e com ca o excesso de barras menores no aproveitadas. a
70 Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: padroes barras perdai demandaj dimenbarraj aij : : : : : : Conjunto de padres de corte; o Conjunto de barras; Perda com os cortes realizados de acordo com o padro i, em metros; a Demanda por barras do tipo j; Dimenso da barra do tipo j, em metros; a Quantidade de barras do tipo j produzidas no padro de corte i; a
(perdai xi )
+
jbarras
(dimenbarraj (
ipadroes
aij xi demandaj ))
s.a: aij xi
ipadroes
demandaj Z+
j barras i padroes
xi Modelo Lingo
71 Title: CorteExcesso(R).lg4; sets: padroes/@ole(CorteExcesso(R).xls,padroes)/: perda, x; barras/@ole(CorteExcesso(R).xls,barras)/: demanda, dimenbarra; matriz(padroes,barras): a; endsets data:
! Importando dados do Excel;
72 (14) Problema de Corte de Estoque Bidimensional Um fabricante de tiras metlicas recebeu a um pedido para produzir 2000 tiras de tamanho 2 cm 4 cm e 1000 tiras de 4 cm 7 cm. As tiras podem ser produzidas a partir de chapas maiores dispon veis nos tamanhos de 10 cm 3000 cm e 11 cm 2000 cm. O departamento tcnico encarregado de planejar o atendie mento ao pedido decidiu que os padres de corte mostrados na gura a seguir so adequados o a para produzir as tiras encomendadas. Formule um modelo de programao linear que permita ca minimizar a quantidade de material usado (ou, equivalentemente, minimizar as perdas) para o atendimento da encomenda.
73 (15) Problema da Mochila 0-1 H um conjunto de 10 itens e uma mochila com capacidade igual a a 100 u.m. Sabendo-se que existe uma unica unidade de cada item e, que a cada item est a associado um peso e um valor, conforme tabela abaixo, formule um modelo que maximize o valor total dos itens alocados ` mochila. a Item Peso (kg) Valor 1 15 5 2 18 7 3 13 6 4 23 10 5 9 8 6 10 3 7 11 4 8 5 1 9 14 7 10 5 3
Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: itens pesoj valorj cap : : : : Conjunto de itens; Peso associado ao item j; Valor associado ao item j; Capacidade da mochila;
(valorj xj )
s.a: pesoj xj
jitens
xj
74 Modelo Lingo
75 (16) Problema da Mochila 0-1 M ltipla Resolva o problema anterior, supondo que existem u vrias mochilas, cujas capacidades esto representadas nas tabelas a seguir. a a
1 15 5
2 18 7
3 13 6
4 23 10
5 9 8
6 10 3
7 11 4
8 5 1
9 14 7
10 5 3
Capacidade 47 28 42
Sejam os seguintes dados de entrada para o problema: itens mochilas pesoj valorj capi : : : : : Conjunto de itens; Conjunto de Mochilas; Peso associado ao item j; Valor associado ao item j; Capacidade da mochila i;
e a seguinte varivel de deciso: a a xij : 1 se o item j for alocado ` mochila i; a 0 caso contrrio. a
(valorj xij )
s.a: xij
imochilas
1 capi {0, 1}
pesoj xij
jitens
xij
76 Modelo Lingo
Title: Mochila0-1Multipla(R).lg4; sets: mochilas/@ole(Mochila0-1Multipla(R).xls,mochilas)/: cap; itens/@ole(Mochila0-1Multipla(R).xls,itens)/: peso, valor; matriz(mochilas,itens): x; endsets data:
! Importa dados do Excel;
77
! A varivel x(i,j) deve ser binria; a a
@for(matriz(i,j):@BIN(x(i,j))); data:
! Exporta dados para o Excel;
@ole(Mochila0-1Multipla(R).xls,solucao,valormax) = x, fo; enddata (17) Problema da Mochila Inteira Considere um conjunto de 10 itens e uma mochila de capacidade igual a 100 u.m. Sabendo-se que existem vrias unidades de cada item e que a cada a um deles est associado um determinado peso e valor, conforme tabela abaixo, formule um a modelo que maximize o valor total dos itens alocados ` mochila. a Item Peso (kg) Valor Unidades 1 15 5 2 2 18 7 3 3 13 6 2 4 23 10 3 5 9 8 2 6 10 3 2 7 11 4 2 8 5 1 2 9 14 7 1 10 5 3 2
Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: itens pesoj valorj quantj cap : : : : : Conjunto de itens; Peso associado ao item j; Valor associado ao item j; Quantidade dispon do item j; vel Capacidade da mochila;
(valorj xj )
s.a: xj pesoj xj
jitens
quantj cap Z+
j itens
xj
j itens
78 Modelo Lingo
79
! A varivel x(j) deve ser inteira; a
@for(itens(j):@GIN(x(j))); data:
! Exporta dados para o Excel;
@ole(MochilaInteira(R).xls,solucao,valormax) = x, fo; enddata (18) Problema da Mochila Inteira M ltipla Resolva o problema anterior, supondo que existem u vrios itens e vrias mochilas. Os dados para o problema esto indicados nas tabelas a seguir. a a a Item Peso (kg) Valor Unidades 1 15 5 2 2 18 7 3 3 13 6 2 4 23 10 3 5 9 8 2 6 10 3 2 7 11 4 2 8 5 1 2 9 14 7 1 10 5 3 2
Capacidade 47 28 42
Sejam os seguintes dados de entrada para o problema: itens mochilas pesoj valorj quantj capi : : : : : : Conjunto de itens; Conjunto de Mochilas; Peso associado ao item j; Valor associado ao item j; Quantidade dispon do item j; vel Capacidade da mochila i;
e a seguinte varivel de deciso: a a xij : Quantidade de itens do tipo j alocados ` mochila i a O modelo de programao matemtica para o Exerc 18 : ca a cio e max
imochilas jitens
(valorj xij )
s.a: xij
imochilas
quantj capi Z+
pesoj xij
jitens
xij
80 Modelo Lingo
Title: MochilaInteiraMultipla(R).lg4; sets: mochilas/@ole(MochilaInteiraMultipla(R).xls,mochilas)/: cap; itens/@ole(MochilaInteiraMultipla(R).xls,itens)/: peso, valor, quant; matriz(mochilas,itens): x; endsets data:
! Importa dados do Excel;
81
! A varivel x(i,j) deve ser inteira; a
@ole(MochilaInteiraMultipla(R).xls,solucao,valormax) = x, fo; enddata (19) Problema de Localizao H um conjunto de m poss ca a veis localidades para instalar uma fbrica. H tambm um conjunto de n clientes a serem atendidos pelas fbricas. Para cada a a e a poss fbrica i dado o custo xo de produo fi , sua capacidade de produo capi e o vel a e ca ca custo de transporte cij de uma unidade do produto da fbrica i para o cliente j. Para cada a cliente j dada a demanda dj . Em quais localidades deve-se instalar as fbricas de forma a e a atender a demanda requerida no menor custo? Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: clientes fabricas fi capi dj cij : : : : : : Conjunto de clientes; Conjunto de fbricas; a Custo xo de produo na fbrica i; ca a Capacidade de produo da fbrica i; ca a Demanda do cliente j; Custo de transporte de uma unidade do produto da fbrica i para o cliente j; a
e as seguintes variveis de deciso: a a xij : Quantidade de produtos a serem transportados da fbrica i para o cliente j a yi : 1 se a fbrica i for instalada e 0, caso contrrio a a O modelo de programao matemtica para o Exerc 19 : ca a cio e min
ifabricas jclientes
cij xij
+
ifabricas
fi yi
s.a: xij
ifabricas
dj capi yi Z+ {0, 1}
xij
jclientes
xij yi
82 (20) Caixeiro Viajante Considere um conjunto de cidades espalhadas geogracamente. Conhecendo-se as distncias dij entre cada par de cidades e sabendo-se que a matriz de distncias a a entre elas simtrica, determine a rota a ser seguida por um vendedor que saia da cidade e e origem (Atlanta), passe por todas as demais cidades uma unica vez e retorne ` cidade origem a ao nal do percurso percorrendo a menor distncia poss a vel. Cidade Atlanta Chicago Cincinatti Houston Los Angeles Atlanta 702 454 842 2396 Chicago 702 324 1093 2136 Cincinatti 454 324 1137 2180 Houston 842 1093 1137 1616 Los Angeles 2396 2136 2180 1616 -
Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: cidades distij : : Conjunto de cidades; Distncia entre as cidades i e j. a
e as seguintes variveis de deciso: a a xij : fij 1 se a aresta (i,j) for usada 0 caso contrrio. a : Fluxo de i para j.
distij xij
s.a: xij
icidades
= = =
1 1 1
xij
jcidades
fij
icidades icidades
83 Modelo Lingo
84
@ole(CaixeiroViajante(R).xls,solucao,ctotal) = x, fo; enddata (21) Roteamento de Ve culos Considere um centro de distribuio (depsito) e um conjunto ca o de clientes distribu dos geogracamente. So dadas as distncias entre o depsito e cada a a o cliente, bem como entre cada par de clientes. A cada cliente est associado uma demanda a a ser atendida. Considerando que no depsito h uma frota de ve o a culos de mesma capacidade, quais as rotas a serem seguidas pelos ve culos de forma a atender a demanda dos clientes percorrendo a menor distncia poss a vel? Cidade Depsito o A B C D E Demanda Depsito o 996 2162 1067 499 2054 0 A 996 1167 1019 596 1059 6 B 2162 1167 1747 1723 214 3 C 1067 1019 1747 710 1538 7 D 499 596 1723 710 1589 7 E 2054 1059 214 1538 1589 18
Modelo de Programao Matemtica ca a Sejam os seguintes dados de entrada para o problema: cidades distij demandaj capV eic : : : : Conjunto de cidades = { Depsito Clientes }; o Distncia entre as cidades i e j; a Demanda requerida pela cidade j; Capacidade de carga dos ve culos.
e as seguintes variveis de deciso: a a xij : fij 1 se a aresta (i,j) for usada 0 caso contrrio. a : Fluxo de i para j.
distij xij
s.a: xij
jcidades
= = = =
1 1 demandaj xj1
jcidades
xij
icidades
fij
icidades icidades
fji x1j
jcidades
86 Title: Roteamento de Ve culos(R).lg4; sets: cidades/@ole(RoteamentoVeiculos(R).xls,cidades)/: demanda; matriz(cidades, cidades): dist, x, f; endsets data:
! Importa dados do Excel;