Você está na página 1de 8

Universidade do Vale do Rio dos Sinos (UNISINOS)

Disciplina de Pesquisa Operacional

®
Lindo 6.1
Manual de apoio ao aluno

Professor Dr Luís Henrique Rodrigues

Mestrando Eduardo Rücker


1. Sobre o Lindo e o Manual

O Lindo (Linear Interactive and Discrete Optimizer) é um programa que pode ser usado
para resolver problemas de programação linear, inteira e quadrática.

A versão demo do sistema, a qual será utilizada em sala de aula, possui algumas
limitações:

• Número máximo de restrições: 150.


• Número máximo de variáveis: 300.
• Número máximo de variáveis inteiras: 50.

Em caso de dúvidas sobre o funcionamento do sistema, é possível utilizar o menu Ajuda


sob duas formas de visualização:

• Menu Help, Contents.


• Menu Help, Search for help on...

Este manual tem como objetivo servir de apoio ao estudo da ferramenta, apresentando
questões básicas inerentes ao funcionamento e à modelagem de dados.

2. Sintaxe e regras de modelagem

Para se modelar problemas no Lindo, deve se obedecer à sintaxe padrão e respeitar


algumas regras.

A sintaxe padrão para um modelo desenvolvido no Lindo deve possuir os três elementos
abaixo, na ordem em que aparecem:

• Indicar se o problema é de maximização ou de minimização: toda modelagem no


Lindo deve iniciar por MAX ou MIN.

• ST: entre o final da modelagem da função objetivo e o início da modelagem das


restrições, deve-se digitar a expressão “ST” (subject to = sujeito a).

• Ao final do modelo, deve-se utilizar a expressão “END”.

Regras e dicas importantes para a modelagem:

• Uma mesma variável não pode ter dois ou mais nomes em um mesmo modelo.
Exemplo: se a variável para a quantidade de peças em um problema qualquer
aparecer na função objetivo como Xa, ela não poderá aparecer como Xab na
modelagem das restrições. O Lindo interpretará esta situação como duas variáveis
distintas, mesmo que tenha sido feito um pequeno erro de digitação.

• As variáveis devem possuir no máximo 8 caracteres e iniciar por uma letra. Caso seja
necessário utilizar um espaço no nome da variável, deve-se usar o underline.

• O Lindo não diferencia letras maiusculas e minúsculas.

• O Lindo não reconhece vírgula, e sim ponto. Logo, todo número decimal deve utilizar
ponto. Exemplos:

Errado: 2,5 xab + 3,33 xcd


Correto: 2.5 xab + 3.33 xcd

• Os coeficientes podem tanto estar separados quanto juntos das variáveis, não sendo
necessário digitar o sinal de multiplicação. Exemplos:

2 xab + 4 xbd >= 6

3xab + 5xbd >= 8

• Maior ou igual e menor ou igual devem ser escritos da seguinte maneira: >= e <=.

• A constante das restrições deve estar sempre isolada do lado direito da inequação. Já
as variáveis e os seus coeficientes devem estar no lado esquerdo. Exemplos:

O que NÃO pode ocorrer: 2 xab >= 6 – 4 xbd

O que deve ocorrer: 2 xab + 4 xbd >= 6

• Para se fazer comentários no modelo, basta utilizar um ponto de exclamação seguido


do comentário. Exemplos:

! exercício 1 do apêndice F

! Xi = quantidade de peças do tipo “i”

• Para se identificarem as restrições do modelo, é possível indicar o nome delas,


sempre na margem esquerda da tela, seguido de parênteses. Exemplos:

Maq1) 2Xac + 4Xbd <= 20

Demanda) Xac + Xbd >= 5

Obs.:
ü os nomes seguem a mesma regra das variáveis (máximo de 8 caracteres, etc).
ü a vantagem dessa identificação é o fato de ela aparecer nos relatórios que o
Lindo gera, facilitando a visualização e a interpretação dos resultados.

• Quando a modelagem for uma programação inteira de números reais, deve-se utilizar
a função GIN. Exemplos:

ü Se for modelada a produção de cadeiras, a solução ótima não poderá sugerir


quantidades decimais. Neste caso, a função GIN torna-se obrigatória.
ü Se for modelada a produção de ração animal, em toneladas, os números após a
vírgula talvez necessitem ser considerados. Neste caso, o uso da função GIN
pode não ser a melhor opção de modelagem.

Observações:

ü A utilização da função GIN acarreta na perda da análise de sensibilidade (ver


seção 4).
ü A modelagem da função GIN deve ser feita ao final do modelo, após a expressão
“END”, para cada variável. Exemplos:

END
GIN Xab
GIN Xbc
• Quando a modelagem for uma programação inteira de números binários (0 ou 1),
deve-se utilizar a função INT. Exemplos:

ü Fazer ou não fazer um produto.


ü Convidar ou não convidar um amigo para assistir ao jogo de futebol.

Observações:

ü A modelagem da função INT deve ser feita ao final do modelo, após a expressão
“END”, para cada variável. Exemplos:

END
INT Xab
INT Xbc

Com base em algumas das regras listadas acima, a figura abaixo apresenta um exemplo
de modelagem no Lindo que respeita essas regras:

! exercício 1 apêndice F

! xi = quantidade de peças do tipo “i”

MAX 0.03 xav + 0.05 xad + 0.02 xco

st

produtoA) 0.2 xav + 0.5 xad + 0.75 xco <= 10


produtoB) 0.3 xav + 0.3 xad + 0.05 xco <= 3
produtoC) 0.5 xav + 0.2 xad + 0.2 xco <= 7
demanda) xco >= 8

end

Figura 1 – Exemplo de modelagem no Lindo

3. Rodada

A rodada de um modelo no Lindo depende do respeito às regras detalhadas na seção 2.


Caso existam erros relacionados às regras ou à sintaxe, são geradas mensagens informando
sobre isso. Para que o modelo possa ser validado quanto a essas regras e à sintaxe, sugere-se
utilizar o comando Compile model. Já o processo de rodada é iniciado a partir do comando
Solve.

As funções e os botões para acesso rápido desses comandos estão listados no quadro
abaixo:
Botão para
Menu Comando Função
acesso rápido

Compile
Verifica erros no modelo
model
Solve
Solve Roda o modelo

4. Interpretação de resultados

Após rodar, o Lindo gera as soluções e ainda oferece a opção de visualizar a análise de
sensibilidade, a qual é gerada se for clicado em “Sim” na caixa de diálogo “DO RANGE
(SENSITIVITY) ANALYSIS?”.

A aparência dos resultados de uma rodada pode ser visualizada na figura 2:

Figura 2 – Exemplo dos resultados de um modelo rodado no Lindo


A seguir, descreve-se como se dá o processo de análise dos resultados gerados nos
relatórios de solução e de análise de sensibilidade.

Relatório de solução:

1. Valor da função objetivo (objective function value): apresenta a solução ótima do modelo, ou
seja, é o resultado da função objetivo. Este valor é obtido através da aplicação dos valores das
variáveis (ver item 2) na função objetivo.

No exemplo da figura 2, os valores das variáveis gerados na otimização foram: XAV = 1.1111;
XAD = 7.5555; e XCO = 8. Já a função objetivo do problema era 0.03 XAV + 0.05 XAD + 0.02
XCO. Com isso:

0.03 * 1.1111 + 0.05 * 7.5555 + 0.02 * 8 = 0.5711

2. Variáveis de decisão:

• Valor (Value): é o valor gerado para cada variável no processo de otimização.

• Custo reduzido (Reduced cost): somente válido quando a variável tem valor = 0. O reduced
cost pode ser interpretado de duas formas:

a) O quanto o coeficiente da variável na função objetivo teria que aumentar ou reduzir


para que a introdução da variável na solução ótima fosse rentável (viável).

Nos problemas de MINimização, é o valor que o coeficiente deveria reduzir.


Nos problemas de MAXimização, é o valor que o coeficiente deveria aumentar.

b) Qual seria a “penalidade” (redução da solução ótima) ao aumentar em uma unidade a


variável em questão para fazer com que ela fizesse parte da solução ótima. O termo
“unidade” aqui utilizado refere-se a um aumento qualquer, tanto de números inteiros
quanto decimais. Exemplos: de 10 para 11 ou de 10 para 10.1. Porém, se o aumento
for de 0.1, o custo reduzido resultante na solução ótima será igual a custo reduzido *
0.1.

3. Restrições:

• Linha (Row): indica em que posição (linha) do modelo estão cada uma das restrições. Como
no exemplo da figura 1 as restrições foram nomeadas, o que apareceu foi a própria
descrição da restrição, e não a identificação da linha do modelo.

• Folga ou excesso (slack or surplus): indica quão perto se está do limite do valor do lado
direito da inequação. No caso da figura 2, a restrição “PRODUTOC” possui folga. Se ela
fosse uma máquina, isso indicaria ociosidade do equipamento.

Para verificar se a restrição “PRODUTOC” realmente tem folga, basta substituir os valores
das variáveis na restrição.

Algumas observações:

a) Em inequações do tipo “menor ou igual a”, geralmente tem-se folga quando o número é
maior que zero.
b) Em inequações do tipo “maior ou igual a”, geralmente tem-se excesso quando o
número é maior que zero.
c) O valor pode ser negativo quando uma restrição é violada, situação em que a solução
ótima é inviável.

• Preço dual (Dual price): também chamado de preço sombra (shadow price), indica o quanto
a solução ótima melhoraria ou pioraria por meio da adição de uma unidade no lado direito
da restrição. Em outras palavras, o preço dual ajuda a responder à seguinte pergunta, por
exemplo: até que ponto se deve investir em mais recursos (máquinas, pessoas, etc)?

O termo “unidade” aqui utilizado refere-se a um aumento qualquer, tanto de números


inteiros quanto decimais. Exemplos: de 10 para 11 ou de 10 para 10.1. Porém, se o
aumento for de 0.1, o impacto sobre a solução ótima será igual a preço dual * 0.1.

No exemplo da figura 2, se a capacidade da restrição “PRODUTOA” fosse aumentada de 10


para 10.1, o aumento na solução ótima seria de $ 0.006667 (0.1 * 0.066667). No entanto, o
valor de $ 0.066667 para cada unidade acrescida nem sempre acontecerá, como mostrará a
análise de sensibilidade das restrições – por isso, o preço dual deve ser sempre analisado
conjutamente com o Relatório de Sensibilidade. No exemplo da figura 2, existem limites
mínimos e máximos para a variação do lado direito da restrição dentro dos quais o preço
dual ou a folga/sobra não se alteram. Isso está melhor detalhado na seção que versa sobre
o relatório de análise de sensibilidade.

Adiantando um pouco o tópico sobre análise de sensibilidade: ainda no exemplo da figura 2,


caso o aumento da capacidade da restrição “PRODUTOA” fosse de 0.4, e não 0.1, o
aumento da função objetivo não seria de 0.026667 (0,066667*0.4). A análise de
sensibilidade mostrará que aumentos superiores a 0.333333 na capacidade deste recurso
não garantem o mesmo aumento de 0.066667 na função objetivo para cada unidade do
recurso acrescida (dual price). Em outras palavras, se a capacidade da restrição
“PRODUTOA” fosse aumentada para um número maior ou igual a 10.34, o dual price
mudaria.

Obs.: em problemas de minimização, é preciso ter cuidado na análise. Caso um problema


de minimização de despesas com o escalonamento de mão-de-obra tenha uma restrição
para o domingo com preço dual -100, a inclusão deste dia na solução ótima acarretaria em
um aumento do custo de mão-de-obra. Logo, mesmo que o preço dual seja -100, neste
problema o objetivo seria minimizar as despesas de MO, as quais incluiriam um adicional de
$ 100 em função de disponibilizar-se 1 funcionário no domingo.

Relatório de análise de sensibilidade

A análise de sensibilidade apresenta as faixas de valores nas quais a solução ótima


(resultado das variáveis sugerido pelo Lindo) ou a folga/excesso e preço dual não são afetados.
Em outras palavras, trata-se de um auxílio para a análise do impacto dos coeficientes da função
objetivo e do valor da constante das restrições sobre a solução ótima e a folga/excesso e preço
dual, respectivamente.

1. Sensibilidade de variações nos coeficientes (Obj coefficient ranges):

• Coeficiente atual (Current coef): é o valor do coeficiente de cada variável na função objetivo.

• Aumento admissível (Allowable increase): indica até que ponto o coeficiente de cada
variável poderia, um de cada vez, ser aumentado sem que o valor da variável sofra
alterações.

No exemplo da figura 2, se o coeficiente da variável XAV fosse aumentado de 0.03 para


0.04475, o valor da variável manteria-se o mesmo em relação à solução inicial.
• Redução admissível (Allowable decrease): indica até que ponto o coeficiente de cada
variável poderia, um de cada vez, ser reduzido sem que o valor da variável sofra alterações.

2. Sensibilidade de variações no lado direito das inequações (Righthand side ranges):

• Valor atual (Current RHS): é o valor da constante (que deve estar sempre isolada no lado
direito da restrição).

• Aumento admissível (Allowable increase): indica até que ponto o valor da constante de cada
restrição poderia, um de cada vez, ser aumentado sem que a folga/sobra ou preço dual
sofram alterações.

No exemplo da figura 2, se a constante da constante “PRODUTOA” fosse aumentada de 10


para 10.3333, a folga/sobra e o preço dual manteriam-se os mesmos em relação à solução
inicial.

• Redução admissível (Allowable decrease): indica até que ponto o valor da constante de
cada restrição poderia, um de cada vez, ser reduzido sem que a folga/sobra ou preço dual
sofram alterações.

Obs.: uma análise pode ser feita comparando-se o preço dual com a sensibilidade das
restrições. Utilizando-se como exemplo a restrição “PRODUTOA”, verifica-se que o preço
dual indica aumento da solução ótima no caso de aumento de 1 unidade da restrição.
Porém, por meio da análise de sensibilidade verifica-se que aumentos maiores que
0.333333 nesta restrição alteram o preço dual, bem como aumentos menores que 0.333333
não influenciam o preço dual.

5. Referências

Lindo Systems Inc., Chicago. User´s help.

Você também pode gostar