Você está na página 1de 203

Pesquisa Operacional 1

Atualização: 22/02/2008

Unidade 1: Introdução à Modelagem Matemática


Tópicos 1 e 2: Introdução à Pesquisa Operacional
Prof. Daniel Caetano

Objetivo: Apresentar o que é Pesquisa Operacional e introduzí-la no âmbito dos


Sistemas de Informação.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. São Paulo: Ed.
Thomson-Pioneira, 2006.
- ARENALES, M; ARMENTANO, V; MORABITO, R; YANASSE, H. Pesquisa
Operacional. Rio de Janeiro: Editora Campus, 2006

Introdução

Embora o termo Pesquisa Operacional seja um termo novo para a maioria dos alunos
do curso de graduação, a maioria das pessoas já "aplicou" Pesquisa Operacional em suas
vidas, embora não de uma forma explícita ou exata.

Qualquer pessoa que se desloque por uma cidade qualquer, seja a pé, de transporte
público ou privado, já fez o cálculo mental para identificar o menor caminho para ir de um
determinado ponto ao outro da cidade. O objetivo deste "cálculo mental" foi o de minimizar a
distância percorrida, ou minimizar o tempo gasto, ou minimizar o combustível consumido, ou
ainda evitar grandes ladeiras... e este é exatamente o objetivo da Pesquisa Operacional:
estudar um problema ou atividade operacional (do dia a dia) e determinar uma forma de
resolver este problema ou realizar esta atividade de maneira a maximizar um ganho ou
minimizar uma perda, sejam elas quais forem.

É claro que o problema de deslocamento não é o único na Pesquisa Operacional: há


problemas relacionados a alocamentos de atividades a equipamentos ou equipamentos a
atividades, rotas de transporte, organização de estoque, definição de carteiras de investimento,
elaboração de cardápios equilibrados... e uma infinidade de outros problemas complexos.

Em geral são problemas de grande monta, como calcular a distribuição de todas as


cartas do correio o mais rápido possível e com o mínimo de carteiros ou ainda definir quais as
rotas que os caminhões devem seguir, pelo país todo, para entregar refrigerante consumindo o
mínimo de recursos. Pelo seu tamanho e número de possibilidades, torna-se impossível
resolver estes problemas manualmente e, freqüentemente as empresas contratam equipes para
produzir sistemas de informação que lhes calcule tais resultados.

Resumidamente, a Pesquisa Operacional é área do conhecimento que estuda


problemas de como melhorar a condução e coordenação de algumas operações dentro de uma
organização. Em outras palavras, Pesquisa Operacional (ou PO) é a aplicação de métodos

2008_SI_-_PesquisaOperacional_I_-_o2007 1
Pesquisa Operacional 2
Atualização: 22/02/2008

analíticos para auxiliar os executivos a tomar melhores decisões. Tanto quanto possível, a PO
busca obter a melhor solução possível, chamada "solução ótima" para um dado problema.
Chamamos isso de "otimizar" uma operação.

De forma simplificada, otimizar significa encontrar uma combinação de fatores de


operação que nos permite o melhor desempenho possível. Em outras palavras, se vamos
transportar carga e podemos fazer isso de diversas formas, otimizar é determinar todos as
características do transporte que nos trará um menor custo ou tempo, por exemplo. Da mesma
forma, se queremos transportar um certo conjunto de dados por uma rede como a internet,
onde temos diversos caminhos pelos quais uma informação pode ser transmitida, otimizar
significa determinar o modo de transmissão e o caminho da transmissão de forma que a
comunicação seja o mais rápida possível.

1. Breve Histórico da Pesquisa Operacional

O início da Pesquisa Operacional data do início do século XX, tendo o termo Pesquisa
Operacional sido cunhado no fim da década de 1930, para descrever a atuação de cientistas na
análise de problemas militares.

Seu uso foi muito mais intenso na Segunda Guerra Mundial, devido à necessidade de
alocar com urgência e da melhor forma possível diversos recursos escassos como munição e
alimento.

Terminadas as grandes guerras, os conhecimentos adquiridos acabaram por ser


estendidos para organizações civis, e o uso da Pesquisa Operacional cresceu muito até
meados da década de 1970. Nas guerras mais recentes, como as do Iraque, também a Pesquisa
Operacional se motrou presente nas estratégias de ocupação e ataque.

Figura 1 - Avanço das tropas americanas no Iraque (fonte: Reuters)

2008_SI_-_PesquisaOperacional_I_-_o2007 2
Pesquisa Operacional 3
Atualização: 22/02/2008

Ainda na época da Segunda Guerra, surgiram sociedades profissionais de cientistas da


área de Pesquisa Operacional. Uma delas é a Operational Research Society (
http://www.orsoc.org.uk ) e outra é o Institute for Operations Reasearch and the Management
Sciences - Informs ( http://www.informs.org/ ). No Brasil existe a Sociedade Brasileira de
Pesquisa Operacional - Sobrapo ( http://www.sobrapo.org.br/ ).

2. Conteúdo do Curso (Módulo 1)

O processo todo de solução de um problema por PO pode ser sintetizado em alguns


passos:

1) Definição da situação problema, ou seja, determinar quais são os objetivos


desejados, quais são as restrições às soluções, quanto tempo existe para que o problema seja
resolvido... e assim por diante. Neste passo informações genéricas e dispersas precisam ser
transformadas em informações estruturadas e precisas.

2) Formulação de um modelo quantitativo, ou seja, formalizar todas as informações


estruturadas no passo anterior em termos matemáticos, representando as relações entre
variáveis dos problemas através de símbolos matemáticos. Na Programação Linear, uma das
técnicas usadas pela PO, as relações são expressas por equações e inequações.

3) Resolução do Modelo, ou seja, manipular os valores das variáveis até que se


obtenha a melhor solução possível, em termos do objetivo identificado no primeiro passo. É
importante lembrar que algumas variáveis podem ser manipuladas livremente. Outras,
entretanto, serão calculadas como resultado do processo. Estas últimas são chamadas
variáveis de decisão.

4) Consideração de Fatores Imponderáveis, ou seja, analisar a solução encontrada e


verificar se ela precisa ser modificada para incorporar fatores externos que não tenham sido
considerados no modelo matemático.

5) Implementação da solução, ou seja, constatado que a solução é possível na


prática, parte-se para a implementação, que deve ter sido projetada para uma transição o mais
suave possível.

Neste curso, serão apresentados alguns problemas clássicos de PO e seus modelos


decorrentes, apresentando uma introdução aos 3 primeiros destes passos, ficando um
aprofundamento a cargo do aluno. Os passos 4 e 5 são deixados para um curso de pós
graduação.

Apesar da ênfase às modelagens e aos métodos analíticos de solução, isso não deve
ocultar, de forma alguma, o objetivo fundamental de se estudar Pesquisa Operacional, que é o
de encontrar as melhors soluções possíveis para problemas práticos.

2008_SI_-_PesquisaOperacional_I_-_o2007 3
Pesquisa Operacional 4
Atualização: 22/02/2008

2.1. Etapa 1 - Elaboração de Modelos Matemáticos

Como dito anteriormente, na Pesquisa Operacional buscamos a configuração ótima de


um sistema. Entretanto, este ótimo só pode ser obtido a partir de um modelo matemático e, se
o modelo não for corretamente desenvolvido, a solução encontrada pode não ser viável na
realidade. Quanto melhor o modelo matemático, menor é a chance da solução ótima ser
inviável na prática.

Por esta razão, pelo fato de a modelagem ser a parte que requer maior raciocínio e por
ser a única etapa da resolução de um problema de PO que não pode ser feita com o auxílio de
um computador, este curso dará uma grande ênfase na modelagem matemática. Trataremos
apenas de problemas lineares.

2.2. Etapa 2 - Método Simplex

O Método Simplex é a forma mais geral de se resolver um problema de Programação


Linear, que são os problemas mais clássicos e básicos da Pesquisa Operacional. O Método
Simplex consiste de uma seqüência de operações sistemáticas que, após o número suficiente
de iterações, nos apresenta a solução ótima de um problema de Programação Linear.

Problemas deste tipo podem ser "qual é o caminho mais curto de um ponto a outro?"
ou "De qual maneira eu posso aplicar este meu recurso para obter maior lucro?". Pode ainda
ser "Quantas unidades de cada tipo de produto eu produzo para maior lucro?" ou "Quais
seriam os cardápios não repetidos que satisfariam todas as necessidades diárias de nutrientes
e agradassem ao meu paladar?" e uma infinidade de outros.

2.3. Etapa 3 - O Algoritmo Húngaro

Como será possível observar pelo método, em alguns tipos de problemas (grandes) o
método Simplex pode ter desempenho pouco satisfatório; Isso ocorre porque o Simplex é um
método genérico, que não tira proveito de nenhuma característica específica de um dado tipo
de problema. Assim, para estes casos em que mesmo um computador rápido pode levar dias,
meses ou até anos (...) para encontrar uma solução ótima pelo Simplex, muitas vezes são
propostas metodologias de cálculo específicas para encontrar uma solução ótima mais
rapidamente.

Como um exemplo deste tipo de algoritmo, será apresentado o Algoritmo Húngaro,


usado em problemas de atribuição e designação, que classicamente é apresentado como um
problema de atribuição de equipes diferentes a projetos distintos, para minimizar o tempo
total de conclusão dos projetos (horas pagas).

2008_SI_-_PesquisaOperacional_I_-_o2007 4
Pesquisa Operacional 5
Atualização: 22/02/2008

Entretanto, o Problema de Atribuição é muito comum além desta esfera mais clássica.
Em computação distribuída, por exemplo, o computador responsável pelo controle de
execução das aplicações deve decidir qual é o outro computador que irá processar uma
informação ou executar um dado software. Como cada equipamento pode ter recursos
distintos (velocidade de processamento, memória, dispositivos, etc), trata-se de um problema
de atribuição que o Sistema Operacional terá de resolver.

Figura 2 - Qual programa será executado em qual computador?

Hoje também estão se tornando comuns os computadores com dois processadores ou


mais (Dual Core, como Core2 Duo, Athlon X2, etc) e isso traz uma tarefa ao Sistema
Operacional, antes desnecessária: escolher qual dos processadores (neste caso, todos iguais)
irá executar um dado thread (parte de um programa). Essa atribuição vai levar em conta qual
a carga de cada processador, quais recursos cada um deles está usando, e assim por diante.

Figura 3 - Qual tarefa será atribuída a cada processador?

3. Bibliografia

ARENALES, M; ARMENTANO, V; MORABITO, R; YANASSE, H. Pesquisa Operacional.


Rio de Janeiro: Editora Campus, 2006

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. São Paulo: Ed.


Thomson-Pioneira, 2006.

2008_SI_-_PesquisaOperacional_I_-_o2007 5
Pesquisa Operacional 1
Atualização: 22/02/2008

Unidade 1: Introdução à Modelagem Matemática


Tópico 3a a 3e: Técnicas de Modelagem Matemática
Prof. Daniel Caetano

Objetivo: Introduzir os conceitos de modelagem matemática.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.

Introdução

Como visto na aula anteior, a solução de problemas de Pesquisa Operacional, em


específico os problemas da Programação Linear, podem ser resolvidos por um processo que
pode ser sintetizado da seguinte forma:

1) Definição da situação problema, ou seja, determinar quais são os objetivos


desejados, quais são as restrições às soluções, quanto tempo existe para que o problema seja
resolvido... e assim por diante. Neste passo informações genéricas e dispersas precisam ser
transformadas em informações estruturadas e precisas.
2) Formulação de um modelo quantitativo, ou seja, formalizar todas as informações
estruturadas no passo anterior em termos matemáticos, representando as relações entre
variáveis dos problemas através de símbolos matemáticos. Na Programação Linear, uma das
técnicas usadas pela PO, as relações são expressas por equações e inequações.
3) Resolução do Modelo, ou seja, manipular os valores das variáveis até que se
obtenha a melhor solução possível, em termos do objetivo identificado no primeiro passo. É
importante lembrar que algumas variáveis podem ser manipuladas livremente. Outras,
entretanto, serão calculadas como resultado do processo. Estas últimas são chamadas
variáveis de decisão.
4) Consideração de Fatores Imponderáveis, ou seja, analisar a solução encontrada e
verificar se ela precisa ser modificada para incorporar fatores externos que não tenham sido
considerados no modelo matemático.
5) Implementação da solução, ou seja, constatado que a solução é possível na
prática, parte-se para a implementação, que deve ter sido projetada para uma transição o mais
suave possível.

Nestas aulas e nas seguintes serão focados os passos 1 e 2.

2008_SI_-_PesquisaOperacional_I_-_o2007 6
Pesquisa Operacional 2
Atualização: 22/02/2008

1. O Uso de Modelos na Pesquisa Operacional

Tanto quanto possível, a PO busca obter a melhor solução possível, chamada "solução
ótima" para um dado problema. Este tipo de resultado perfeito só é possível através do uso da
matemática e, portanto, existe a necessidade de transformar um problema real em um modelo
matemático teórico que possa ser resolvido.

A solução ótima do modelo matemático teórico será aplicável à realidade se e


somente se o modelo matemático descrever adequadamente o problema real. Se o modelo
matemático não descrever o problema corretamente, haverá grandes chances de que a solução
encontrada não seja possível na realidade ou, mais freqüentemente, que ela não seja, de fato, a
melhor solução.

Por esta razão, a modelagem matemática tem uma grande importância no contexto da
Pesquisa Operacional e seu aprendizado é baseado na prática. Neste curso serão apresentados
problemas clássicos de PO e seus modelos decorrentes, os quais serão enfatizados.

Ainda que uma parte do curso seja voltada a métodos analíticos de solução, isso não
pode, de forma alguma, ocultar o objetivo fundamental de se estudar PO, que é o de descobrir
soluções para problemas práticos.

1.1. Modelagem Matemática para Programação Linear

Os modelos matemáticos mais populares são aqueles, provavelmente, denominados


Modelos de Programação Linear. Estes modelos servem para representar problemas em que a
relação entre as variáveis destes problemas possam ser expressas na forma de equações ou
inequações lineares. As características fundamentais de um modelo deste tipo são:

1) Existe uma combinação de variáveis que deve ser maximizada ou minimizada,


como por exemplo o custo de uma operação industrial ou rentabilidade média de ações. A
esta combinação de variáveis dá-se o nome de função objetivo. Por exemplo: 7x + 2y, onde x
e y são variáveis de interesse. As variáveis que aparecem na função objetivo são as chamadas
variáveis de decisão.

2) A estrutura do problema é tal que existe uma limitação de recursos, não sendo
possível ter um lucro tão grande quanto se queira nem um custo tão pequeno quanto se
queira. Estas limitações de recursos são expressas como equações ou inequações matemáticas
e são chamadas restrições.

Assim, sempre que existir um problema em que se deseja definir qual é a melhor
configuração de operação, ou seja, aquela que traz maior lucro ou reduz os custos, e for
possível representar estes objetivo e restrições através de equações ou inequações lineares, é
possível modelá-lo como um problema de Programação Linear para posterior resolução.

2008_SI_-_PesquisaOperacional_I_-_o2007 7
Pesquisa Operacional 3
Atualização: 22/02/2008

1.2. Primeiro Exemplo de Modelagem

A primeira modelagem que será vista é absolutamente simples, não representado


sequer um problema real, mas será a base para a introdução de alguns conceitos-chave. Será
apresentado um problema e em seguida a modelagem do mesmo, em passos.

Problema:
A esteira de uma seção de uma fábrica possui 70 metros. Sabendo que cada peça
ocupa um espaço de 3,5 metros, maximize o número de peças que serão colocadas na esteira.

Modelagem:
O primeiro passo, que auxilia muito na solução, é fazer um pequeno quadro que
resuma as informações do problema. Por exemplo:

Tamanho Esteira Tamanho Peça


70 3.5

Passo 1: Identificar as Variáveis

Neste problema, o objetivo é claro: colocar o máximo possível de peças na esteira.


Defina-se, então, como x o número de peças a serem colocadas na esteira.

Passo 2: Identificar a Função Objetivo

Pelo enunciado, o que se pede busca é maximizar o número de peças na esteira, não é?
Então pode-se dizer que a função objetivo do problema é "maximizar o número de peças na
esteira", o que pode ser escrito da seguinte forma:

F.O.: [MAX] x

Entretanto, é possível colocar quantas peças se desejar na esteira? NÃO! E para tornar
isso claro matematicamente, é preciso indicar as restrições, que nada mais são que as
limitações da solução do problema.

Passo 3: Identificar as Restrições

A principal restrição neste problema refere-se ao comprimento da esteira. É possível


dizer que o comprimento total das peças colocadas em fila não deve ser maior que 70 metros
(que é o tamanho da esteira). É possível indicar isto da seguinte forma:

Comprimento Total das Peças ü 70

Ou, abreviadamente:

CTP ü 70

2008_SI_-_PesquisaOperacional_I_-_o2007 8
Pesquisa Operacional 4
Atualização: 22/02/2008

Entretanto, CTP é um valor que precisa estar relacionado com x, que representa o
número de peças. É necessário encontrar esta relação, e neste caso isso é possível. O
raciocínio é bastante simples. Como cada peça mede 3,5 metros, pode-se escrever uma
equação que diga "o comprimento total de x peças" que, em outras palavras, será exatamente
o CTP. Obter essa equação é fácil. Observe:

- Se tivermos 1 peça, o comprimento total será 1 * 3,5;


- Se tivermos 2 peças, o comprimento total será 2 * 3,5;
- Se tivermos 3 peças, o comprimento total será 3 * 3,5;
Assim...
- Se tivermos x peças, o comprimento total será x * 3,5;

Pode-se escrever, então:

Comprimento total ocupado pelas peças = 3,5 * x

Ou ainda...

CTP = 3,5 * x

Como se sabe que CTP ü 70, é possível escrever:

3,5*x ü 70

E esta é a restrição do problema. Assim, é possível apresentar este modelo matemático


completo da seguinte forma:

F.O.: [MAX] x
S.A.: 3,5*x ü 70

Note que "F.O." significa "Função Objetivo" e "S.A." significa "Sujeito À". A sigla
"F.O." normalmente precede a função objetivo e a sigla "S.A." é indicada na linha em que
começam as restrições (que podem ser várias).

Uma vez que o modelo matemático esteja feito, o passo seguinte é encontrar sua
solução. Para a maioria dos problemas, a solução não é simples. Mas para um problema tão
pequeno, é possível encontrá-la apenas por inspeção. Qual é o valor máximo que x pode
receber e que a restrição apresentada não será ferida? Pense!

1.3. Parâmetros x Variáveis de Decisão: Uma Primeira Noção

Independente do problema, antes de partir para a geração de um modelo, é importante


ressaltar a diferença entre Parâmetros e Variáveis de Decisão. Parâmetros são valores que
são fornecidos e nos quais não se pode mexer; devem permanecer como estão. Variáveis de
decisão são valores que podem ser alterados e, em geral, são valores que se deseja

2008_SI_-_PesquisaOperacional_I_-_o2007 9
Pesquisa Operacional 5
Atualização: 22/02/2008

determinar. As variáveis de decisão normalmente são expressas algebricamente, como x1, x2,
x3... observe que é comum o uso de índices (os pequenos números ao lado da letra).

Estes índices são usados para indicar diferentes instâncias de um mesmo tipo de
variável. Por exemplo: pode-se dizer que x é uma variável que indica quanto combustível foi
abastecido e o índice indica em que posto este abastecimento ocorreu.

Assim, segundo o exemplo acima, é possível dizer que x1 é a quantidade de


combustível que foi abastecida no posto 1, x2 é a quantidade que foi abastecida no posto 2, x3
é a quantidade que foi abastecida no posto 3... e assim por diante. É importante ressaltar que
os índices têm um papel importante na especificação do modelo e não há um significado
pré-definido para os mesmos. É tarefa do pesquisador descrever o que os índices significam.

1.4. Uma Modelagem mais Completa?

Observando o exemplo acima, uma relação direta pode ser feita com o problema
clássico de minimizar o gasto com combustível em uma dada viagem. Considere que o
caminho a percorrer consome em torno de 50 litros de combustível e na estrada existem três
postos de combustível: p1, p2 e p3. Adicionalmente, é sabido que cada um dos postos tem um
custo (preço) de combustível diferente: c1, c2 e c3. O que se deseja saber então é:

Quanto se deve abastecer no posto 1 (p1), quanto no posto 2 (p2) e quanto no posto 3
(p3) para gastar o mínimo possível? Bem, se o desejo é saber quanto será abastecido em cada
posto, é porque pretende-se tomar uma decisão que envolve estes valores. Por esta razão
estas são chamadas de variávies de decisão. Seguindo a definição feita anteriormente, em
que x é uma variável que indica quanto combustível foi abastecido e o índice indica em que
posto este abastecimento ocorreu, é possível dizer que x1 indica o quanto será abastecido no
posto 1, x2 indica o quanto será abastecido no posto 2 e x3 indica o quanto será abastecido no
posto 3.

Assim, x1, x2 e x3 são as variáveis de decisão deste problema e os valores de x1, x2 e x3


vão expressar o número de litros de combustível abastecido em cada posto. Se não houver a
necessidade de abastecer em um dado posto, a variável de decisão que se refere à quantida de
combustível abastecida naquele posto terá valor igual a zero. Por exemplo: se a melhor opção
for não abastecer no posto 2, o valor de x2 será 0 (x2 = 0).

Com isto em mente, é possível dizer que o valor gasto no posto 1 será o quanto foi
abastecido no posto 1, multiplicado pelo preço do litro de combustível no posto 1, ou seja:

x1 * p1

Afinal, se for abastecido 1 litro, será pago 1 vez o preço de um litro. Se for abastecido
2 litros, será pago 2 vezes o preço do litro e assim por diante. Da mesma forma, se nada for
abastecido, x1 valerá zero e nada será pago no posto 1.

2008_SI_-_PesquisaOperacional_I_-_o2007 10
Pesquisa Operacional 6
Atualização: 22/02/2008

Seguindo o mesmo raciocínio, é possível dizer que o custo no posto 2 será x2 * p2 e


que no posto 3 o custo será x3 * p3. Chamando os custos em cada posto de c1, c2 e c3, é
possível reescrever os custos da seguinte forma:

c1 = x1 * p1
c2 = x2 * p2
c3 = x3 * p3

O custo total de abastecimento será c = c1 + c2 + c3, o que pode ser descrito da


seguinte forma:

c = x1 * p1 + x2 * p2 + x3 * p3

...

Como o desejo é gastar o mínimo possível, ou seja, ter o menor custo possível, é
possível dizer que se deseja minimizar este custo. A maneira formal de dizer isso é:

[MIN] x1 * p1 + x2 * p2 + x3 * p3

Esta função, que descreve o que se deseja do problema é, como dito anteriormente,
chamada de função objetivo e, neste caso, x1, x2 e x3 são variáveis de decisão e p1, p2 e p3
são os parâmetros.

...

1.5. Restrições

Na seção anterior, foi representado o desejo de gastar o mínimo possível. Entretanto, a


solução para o problema apresentado é "fique em casa, não abasteça nada e não gaste nada",
já que em lugar algum foi descrito que sair de casa é obrigatório.

Para que o problema representado se assemelhe mais com as necessidades, é preciso


adicionar mais informações ao problema. Tais informações são acrescentadas na forma de
restrições. Uma destas restrições poderia ser, por exemplo: "Não é possível 'ficar em casa'".

Entretanto, é preciso indicar este tipo de restrição usando as variáveis de decisão que
já estão sendo usadas. No caso, a informação que pode ser usada é um consumo conhecido da
viagem, que seria, por exemplo, de 50 litros de combustível.

Como acrescentar esta informação? Bem, se vai ser abastecido x1 litros no posto 1, x2
litros no posto 2 e x3 litros no posto 3, é possível dizer que o total de litros abastecido é:

total abastecido = x1 + x2 + x3

...

2008_SI_-_PesquisaOperacional_I_-_o2007 11
Pesquisa Operacional 7
Atualização: 22/02/2008

Ora, o total abastecido precisa ser um valor maior ou igual aos 50 litros necessários
para a viagem; ou seja, formalmente:

x1 + x2 + x3 ¶ 50

...

Com isso, é possível apresentar um primeiro modelo matemático muito simplificado:

[MIN] x1 * p1 + x2 * p2 + x3 * p3
Sujeito à: x1 + x2 + x3 ¶ 50

Ou ainda:

[MIN] x1 * p1 + x2 * p2 + x3 * p3
S.A. x1 + x2 + x3 ¶ 50

...

1.6. Condição de Não-Negatividade

Em programação linear, uma restrição sempre existente (mas implícita) é a de que as


variáveis de decisão não podem assumir valores negativos. Isso faz todo o sentido do mundo,
uma vez que as variáveis de decisão praticamente sempre indicam quantidades... e
quantidades negativas não fazem sentido. Por esta razão, sempre é posível incluir ao modelo
restrições deste tipo:

x1 ¶ 0
x2 ¶ 0
x3 ¶ 0

Ficando assim, o modelo final:

[MIN] x1 * p1 + x2 * p2 + x3 * p3
S.A. x1 + x2 + x3 ¶ 50
x1 ¶ 0
x2 ¶ 0
x3 ¶ 0

2008_SI_-_PesquisaOperacional_I_-_o2007 12
Pesquisa Operacional 8
Atualização: 22/02/2008

2. Modelagem Exemplo

Problema (extraído de MOREIRA, 2006):

Uma fábrica produz dois produtos, A e B. Cada um deve ser processado por duas
máquinas, M1 e M2. Devido à programação de outros produtos que também usam estas
máquinas, estão disponíveis para os produtos A e B apenas 24 horas da máquina M1 e 16
horas da máquina M2.
Para produzir uma unidade do produto A, são necessárias 4 horas em cada uma das
máquinas e para produzir uma unidade do produto B, são necessárias 6 horas em M1 e 2 horas
em M2. Cada unidade de A vendida gera um lucro de R$ 80,00 e cada unidade de B vendida
gera um lucro de R$ 60,00.
Existe uma previsão de demanda máxima de 3 unidades para B, mas nenhuma
restrição de demanda para A. Deseja-se saber: quanto produzir de cada produto para
maximizar o lucro?

Solução

O primeiro passo que auxilia muito na solução, é fazer um pequeno quadro de


informações. Por exemplo:

Produto Horas de M1 Horas deM2 Demanda Max Lucro Unitário


A 4 4 - 80
B 6 2 3 60
Horas Disp. 24 16 - -

Neste problema, o objetivo é claro: maximizar o lucro. Assim, a função objetivo será
de maximização. Mas como se pode descrever esta função objetivo em termos dos dados
apresentados?

Ora, é sabido o lucro gerado por cada unidade de A e B: se uma unidade de A for
vendida, o lucro será de R$ 80,00. Se uma unidade de B for vendida, o lucro será de R$
60,00. Consideradno o número de unidades de A vendidas como xA e o número de unidades
de B vendidas como xB, é possível dizer que:

Lucro pelas vendas de A = 80 * xA


Lucro pelas vendas de B = 60 * xB

Lucro Total = 80 * xA + 60 * xB

Ora, então essa é a função objetivo, já que se deseja maximizar este lucro... E xA e xB
são as variáveis de decisão. A função objetivo pode ser formalizada como:

Função Objetivo:
[MAX] 80 * xA + 60 * xB

2008_SI_-_PesquisaOperacional_I_-_o2007 13
Pesquisa Operacional 9
Atualização: 22/02/2008

Esta é a primeira parte do modelo, mas ele ainda está longe de estar completo...
Afinal, na forma com que foi representado, pode-se definir um lucro infinito... e na prática
isso não ocorre! Como contornar isso? Impondo as limitações que o próprio problema
apresenta:

- Limitação de Horas de M1 : 24
- Limitação de Horas de M2 : 16
- Limitação de Demanda para B : 3

Como escrever isso matematicamente? Deve-se estudar caso a caso.

Limitação de Horas de M1 : 24

A máquina M1 terá de ser compartilhada pela produção de A e B, uma vez que ambos
a utilizam. Sabe-se que cada unidade de A produzida consome 4 horas de M1 e cada unidade
de B produzida consome 6 horas de M1. Ora, se o número de unidades produzidas de A (xA)
for multiplicado por 4, o resultado será o número de horas de M1 que é gasto com produção
de A e multiplicando o número de unidades produzidas de B (xB) por 6, o resultado será o
número de horas de M1 que é gasto com a produção de B:

Tempo de M1 gasto com produção de A : 4 * xA


Tempo de M1 gasto com produção de B : 6 * xB
Tempo total de M1 : 4 * xA + 6 * xB

Mas a limitação de horas de M1 é 24 horas, ou seja, é possível usar M1 por qualquer


número de horas, desde que ele não exceda 24 horas. Isso pode ser escrito da seguinte forma:

Tempo total de M1 = 4 * xA + 6 * xB
Tempo total de M1 ü 24

Juntando ambos...

4 * xA + 6 * xB ü 24 <= Restrição do número de horas de M1

Limitação de Horas de M2 : 16

A máquina M2 também terá de ser compartilhada pela produção de A e B. Sabe-se que


cada unidade de A produzida consome 4 horas de M2 e cada unidade de B produzida consome
2 horas de M2. Ora, se o número de unidades produzidas de A (xA) for multiplicado por 4, o
resultado será o número de horas de M2 que é gasto com produção de A e multiplicando o
número de unidades produzidas de B (xB) por 2, o resultado será o número de horas de M2
que é gasto com a produção de B:

2008_SI_-_PesquisaOperacional_I_-_o2007 14
Pesquisa Operacional 10
Atualização: 22/02/2008

Tempo de M2 gasto com produção de A : 4 * xA


Tempo de M2 gasto com produção de B : 2 * xB
Tempo total de M2 : 4 * xA + 2 * xB

Mas a limitação de horas de M2 é 16 horas, ou seja, é possível usar M2 por qualquer


número de horas, desde que ele não exceda 16 horas. Isto pode ser escrito da seguinte forma:

Tempo total de M2 = 4 * xA + 2 * xB
Tempo total de M2 ü 16

Juntando ambos...

4 * xA + 2 * xB ü 16 <= Restrição do número de horas de M2

Limitação de Demanda para B : 3

Em tese, pode-se produzir qualquer número de unidades de A e B, desde que sejam


respeitados os limites de horas disponíveis em cada máquina. Entretanto, foi fornecida uma
informação adicional: a de que caso sejam produzidos mais do que 3 unidades de B, as que
excederem este valor não serão vendidas. Unidades não vendidas significam custo para
produzir e nenhum lucro. Assim, não é adequado permitir que isso ocorra, pois isso faria com
que o lucro da empresa fosse menor.

Para evitar este problema, basta adicionar uma limitação a mais, indicando que
qualquer número de unidades produzidas de B (xB) é adequado, desde que não exceda 3.
Matematicamente:

xB ü 3 <= Restrição de Demanda para B

Condição de Não-Negatividade

Em programação linear, uma restrição sempre implícita é a de que as variáveis de


decisão não podem assumir valores negativos. Isso faz todo o sentido do mundo, uma vez que
as variáveis de decisão praticamente sempre indicam quantidades... e quantidades negativas
não fazem sentido. Por esta razão, serão incluídas duas restrições ao modelo:

xA ¶ 0; xB ¶ 0 <= Restrições de não-negatividade

2008_SI_-_PesquisaOperacional_I_-_o2007 15
Pesquisa Operacional 11
Atualização: 22/02/2008

Modelo Final

O resultado da junção da função objetivo com todas as restrições é o modelo


matemático final para o problema:

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Restrições:
4 * xA + 6 * xB ü 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB ü 16 <= Restrição do número de horas de M2
xB ü 3 <= Restrição de Demanda para B
xA ¶ 0; xB ¶ 0 <= Restrições de não-negatividade

Onde as variáveis de decisão são xA e xB.

3. Exercícios L1

1) Um navio tem um limite de transporte de 300m3 de carga ou 50t de carga. Ele será
usado para transportar dois tipos de carga: a carga A é transportada em unidades de 60m3,
que pesam 1t. A carga B é transportada em unidades de 25m3, e pesam 8t. O lucro pelo
transporte de cada unidade de A é R$ 150,00, e o lucro pelo transporte de cada unidade de B é
de R$ 72,00. Deseja-se o modelo de programação linear com que se possa obter qual é a
melhor composição de carga para a obtenção de máximo lucro.

2) Um computador (1) tem um limite de 4GB (considerado 1GB = 1000MB) de


memória e seu usuário pode exectuar até executar até 72 horas de processamento por semana.
Todos os dados que serão processados nestas 72 horas da semana precisam ser carregados ao
mesmo tempo. Isso significa que tudo tem que caber nos 4GB de memória. Um cliente lhe
muitos pacotes de dados, de quatro tipos diferentes:
a) 10 pacotes que exigem 150 MB, 1 hora de processamento cada um, pagando R$
100,00 por unidade processada.
b) 25 pacotes que exigem 100 MB, 7 horas de processamento cada um, pagando R$
500,00 por unidade processada.
c) 3 pacotes que exigem 500 MB, 4 horas de processamento cada um, pagando R$
350,00 por unidade processada.
d) 7 pacotes que exigem 350 MB, 10 horas de processamento cada um, pagando R$
650,00 por unidade processada.
Deseja-e o modelo de programação linear para definir quais pacotes serão processados
para que o maior lucro seja obtido.

3) (livro) Uma empresa do ramo de confecções está considerando quanto deve


produzir de seus dois modelos de terno, denominados Executivo Master e Caibem, de forma a
maximizar o lucro. É impossível produzir quanto se queira de cada um, pois existem

2008_SI_-_PesquisaOperacional_I_-_o2007 16
Pesquisa Operacional 12
Atualização: 22/02/2008

limitações nas horas disponíveis para costura em máquina e acabamento manual. Para a
costura, existe um máximo de 180 horas-máquina disponíveis e para o acabamento existe um
máximo de 240 homens-hora. Em termos de lucro unitário e produção, os dois modelos de
terno apresentam as seguintes características:

a) Executivo Master
- Lucro unitário: R$ 120,00
- horas-máquina de costura por unidade: 2
- homens-hora de acabamento por unidade: 2
b) Caibem
- Lucro unitário: R$ 70,00
- horas-máquina de costura por unidade: 1
- homens-hora de acabamento por unidade: 4

Formule o problema como um modelo de programação linear.

4. Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 17
Pesquisa Operacional 1
Atualização: 07/03/2008

Unidade 1: Introdução à Modelagem Matemática


Tópico 4: Solução Gráfica de Problemas
Prof. Daniel Caetano

Objetivo: Apresentar graficamente a solução de um problema de programação linear


e a análise dos resultados gráficos.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. Ed. Pioneira, 2007.

Introdução

Apesar de não ser qualquer tipo de problema de programação linear que permite uma
solução gráfica, alguns deles permitem e a apresentação deste tipo de solução pode ser
bastante positivo para a compreensão dos problemas em si, da modelagem matemática e até
mesmo o funcionamento do algoritmo Simplex que, será apresentado nas próximas aulas.

Com este objetivo, esta aula será devotada à resolução gráfica de um dos problemas
apresentados anteriormente. Adicionalmente serão feitos alguns comentários com relação à
análise dos resultados obtidos.

1. A Modelagem e Solução

Problema (extraído de MOREIRA, 2006):

Uma fábrica produz dois produtos, A e B. Cada um deve ser processado por duas
máquinas, M1 e M2. Devido à programação de outros produtos que também usam estas
máquinas, estão disponíveis para os produtos A e B apenas 24 horas da máquina M1 e 16
horas da máquina M2.
Para produzir uma unidade do produto A, são necessárias 4 horas em cada uma das
máquinas e para produzir uma unidade do produto B, são necessárias 6 horas em M1 e 2 horas
em M2. Cada unidade de A vendida gera um lucro de R$ 80,00 e cada unidade de B vendida
gera um lucro de R$ 60,00.
Existe uma previsão de demanda máxima de 3 unidades para B, mas nenhuma
restrição de demanda para A. Deseja-se saber: quanto produzir de cada produto para
maximizar o lucro?

2008_SI_-_PesquisaOperacional_I_-_o2007 18
Pesquisa Operacional 2
Atualização: 07/03/2008

Modelo Final

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Sujeito a:
4 * xA + 6 * xB ü 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB ü 16 <= Restrição do número de horas de M2
xB ü 3 <= Restrição de Demanda para B
xA ¶ 0; xB ¶ 0 <= Restrições de não-negatividade

Onde as variáveis de decisão são xA e xB.

1.1. Solução Gráfica

Sempre que um problema de programação linear tiver apenas duas variáveis de


decisão, será possível resolvê-lo graficamente. Embora seja um tanto limitada e também não
seja a forma mais rápida de resolver um problema, é uma maneira interessante de entender o
mecanismo de solução de problemas de programação linear.

A idéia por trás da solução gráfica é delimitar a área em que todas as soluções
possíveis se encontram e então buscar, neste espaço - chamado Espaço de Soluções - a
melhor solução possível.

Bem, se o desejo é encontrar as soluções possíveis e tem-se o conhecimento de que


elas são limitadas pelas restrições, então são estas que serão usadas para delimitar o espaço
de soluções possíveis. Observe as restrições com atenção:

4 * xA + 6 * xB ü 24 <= Restrição do número de horas de M1


4 * xA + 2 * xB ü 16 <= Restrição do número de horas de M2
xB ü 3 <= Restrição de Demanda para B
xA ¶ 0; xB ¶ 0 <= Restrições de não-negatividade

O primeiro passo é desenhar um plano cartesiano, onde serão traçadas, uma a uma, as
áreas representadas pelas inequações:

2008_SI_-_PesquisaOperacional_I_-_o2007 19
Pesquisa Operacional 3
Atualização: 07/03/2008

Deve ser traçada, então, a reta equivalente à primeira restrição, 4 * xA + 6 * xB ü 24,


que é a reta 4 * xA + 6 * xB = 24. A tabela para esta construção é apresentada a seguir:

X (xA) Y (xB)
0 4
6 0

Marcando os pontos e ligando-os, tem-se a seguinte reta:

Entretanto, esta reta representa apenas a borda de um plano, afinal, a restrição


original era uma inequação e não uma equação (que foi utilizada para desenhar a reta). A
representação para a inequação deve incluir não apenas os pontos como (0,4) e (6,0) que
satisfazem à igualdade, mas também aqueles que satisfazem a 4 * xA + 6 * xB < 24.

É possível testar um ponto claramente de um lado e de outro da reta, de forma a


identificar qual dos lados representa a desigualdade. Pelo gráfico acima, o ponto (0,0)
claramente está do lado de baixo da reta; substituindo-o na equação, tem-se que 4 * 0 + 6 * 0
< 24 => 0 < 24, o que é correto. Logo, a área abaixo da reta também faz parte da
representação da área da inequação:

2008_SI_-_PesquisaOperacional_I_-_o2007 20
Pesquisa Operacional 4
Atualização: 07/03/2008

Agora, deve-se traçar a reta que representa a equação relacionada à segunda restrição,
4 * xA + 2 * xB ü 16, no mesmo gráfico em que foi traçada a reta anterior. Para facilitar a
visualização, foi eliminado temporariamente o preenchimento da área na próxima figura.

Entretanto, mais uma vez não se trata de uma equação e sim de uma inequação, que
delimita um plano. Com o mesmo teste de lado pode-se verificar que a área delimitada pela
inequação 4 * xA + 2 * xB ü 16 é a seguinte:

Entretanto, note que uma parte da área permitida pela Restrição 2 não é permitira pela
Restrição 1 (área acima da reta da restrição 1 e abaixo da restrição 2, onde está o ponto (0,5),
por exemplo). Assim, a área permissível pelas duas restrições será representada na próxima
figura, mostrando como acrescentar a restrição 2 reduziu o espaço de soluções:

2008_SI_-_PesquisaOperacional_I_-_o2007 21
Pesquisa Operacional 5
Atualização: 07/03/2008

A terceira restrição é mais simples: xB ü 3. A equação associada é x = 3, que será


representada na próxima figura:

E na próxima figura, será marcada a área permissível apenas pela restrição 3,


ignorando as outras duas restrições:

E agora, marcando apenas a área permissível ao mesmo tempo por todas as três
restrições:

2008_SI_-_PesquisaOperacional_I_-_o2007 22
Pesquisa Operacional 6
Atualização: 07/03/2008

Entretanto, é possível observar que a área está se estendendo por regiões negativas
tanto no eixo X (xA) quanto no eixo Y (xB). Isto está incorreto pois, como já comentado,
existem sempre as duas restrições de não negatividade: xA ¶ 0; xB ¶ 0.

No próximo gráfico estão traçadas as restrições de não-negatividade e a área final já


está delimitada:

Com isso, temos a região de soluções possíveis delimitada. Todos os pontos internos
à área vermelha representam soluções possíveis (boas ou ruins) e todos os pontos externos
representam soluções inviáveis, ou seja, que ferem uma ou mais restrições. Mas, dentro desta
área, qual das soluções é a melhor? Antes de fornecer a resposta, convém apresentar uma
importante propriedade matemática:

"A solução ótima de um problema está em um dos pontos extremos da região


permissível"

Em outras palavras, a solução ótima está em um dos "cantos" do espaço de soluções


possíveis. A tabela abaixo apresenta os diversos pontos extremos do gráfico acima. Sua
determinação é feita através das equações das retas que se cruzam para formar cada um deles:

Ponto xA xB Função Objetivo:


Extremo 80*xA + 60*xB
1 0 0 0
2 4 0 320
3 3 2 360
4 1.5 3 300
5 0 3 180

Pelos valores calculados para a função objetivo, é possível ver que o ponto extremo 3
(xA = 3 e xB = 2) tem a melhor solução pois maximiza o lucro. Entretanto, esta não é a única
forma de verificar a melhor solução. Pelo próprio gráfico é possível avaliar qual é o ponto
extremo da melhor solução, se desenharmos a família de retas representada pela função

2008_SI_-_PesquisaOperacional_I_-_o2007 23
Pesquisa Operacional 7
Atualização: 07/03/2008

objetivo. Por exemplo: 80*xA + 60*xB = 0, 80*xA + 60*xB = 180... e assim por diante, até
encontrarmos o último ponto da figura que a reta da função objetivo toca, como indicado na
figura a seguir.

2. Análises Possíveis

Através da representação gráfica dos problemas, é possível verificar porque algumas


soluções indesejadas podem ocorrer. A seguir serão analisadas algumas destas situações e
também será visto um pouco sobre o que é uma "análise de sensibilidade".

2.1. Restrições Incompatíveis

É possível que alguns problemas não possuam solução alguma (solução impossível),
fato este causado por incompatibilidade entre as restrições. Por exemplo:

[MAX] 1*x + 2*y

Sujeito a: x¶4
y¶5
yü3

Certamente há um problema aqui: y não pode ser, ao mesmo tempo, maior ou igual a
cinco E menor ou igual a três. Entretanto, a incompatibilidade nem sempre é tão óbvia. É
possível observar no gráfico a seguir como esta incompatibilidade de fato existe. Estão
pintadas as áreas permissíveis a partir de cada restrição: note como não há nenhuma área que
atenda simultaneamente às três restrições.

2008_SI_-_PesquisaOperacional_I_-_o2007 24
Pesquisa Operacional 8
Atualização: 07/03/2008

Como não há nenhum ponto extremo que obedeça às três restrições, este problema é
de solução impossível.

2.2. Solução sem Fronteiras

Considere um problema como este:

[MAX] 1*x + 2*y

Sujeito a: x¶4
y¶5

Isto representa um problema não limitado, o que normalmente é chamado de


"Solução sem Fronteiras". O que isto significa? Significa que não há um máximo definido
para a função objetivo: ela pode ser tão grande quanto se deseje, já que seu valor aumenta
com o crescimento de X e Y e nenhuma destas variáveis tem seu valor máximo limitado.

No gráfico a seguir, esta situação é representada, valendo a pena notar que as regiões
sombreadas não se limitam à área apresentada, estendendo-se infinitamente para cima e para
a direita. Por esta razão, não é possível identificar o ponto extremo de máximo, que se daria
justamente quando X e Y tiverem o valor infinito. Note que este é um problema que fere um
dos princípios da programação linear, que não serve, obviamente, para resolver problemas
ilimitados, como o representado pelo modelo matemático apresentado acima.

2008_SI_-_PesquisaOperacional_I_-_o2007 25
Pesquisa Operacional 9
Atualização: 07/03/2008

2.3. Restrições Redundantes

Considere o seguinte problema:

[MAX] 1*x + 2*y

Sujeito a: xü4
yü5
yü3

Este problema possui o que são chamdas de "Restrições Redundantes", no caso, para
a variável Y. A restrição y ü 3 claramente já "inclui" a restrição y ü 5, uma vez que se y ü 3
for respeitada, y ü 5 também sempre o será, automaticamente.

A representação deste problema em gráfico pode ser visualizada na próxima figura.


Convém observar, entretanto, que este não é um "problema" em si, já que não atrapalha a
solução do problema de programação linear. É interessante, porém, eliminar as restrições
redundantes que se identifique, a fim de simplificar o problema matemático a ser resolvido.

2.4. Soluções Alternativas

Em alguns problemas é impossível determinar um único ponto de extremo que seja a


soluçao ótima. isso ocorre na situação em que a reta que representa a função objetivo é
paralela à uma das restrições. Por exemplo:

[MAX] 1*y

Sujeito a: xü4
yü5

A representação gráfica a seguir mostra que, quando a reta da função objetivo toca o
extremo da área de soluções possíveis, um segmento de reta inteiro fica marcado (e não

2008_SI_-_PesquisaOperacional_I_-_o2007 26
Pesquisa Operacional 10
Atualização: 07/03/2008

apenas um ponto). Por esta razão, existem infinitas soluções ótimas para este problema, sendo
qualquer uma delas aceitável de acordo com o modelo matemático apresentado.

2.5. Análise de Sensibilidade

Normalmente, quando se obtém uma solução ótima para um problema, ocorre uma
preocupação adicional: a solução encontrada deverá implementada na prática. Mas por que
razão isso pode ser um problema?

Ocorre que alguns parâmetros que foram especificados no modelo podem não ser
muito precisos. Por exemplo, no exercício apresentado, o número de horas disponíveis da
Máquina 1 foi apresentado com o valor de 24 horas. Mas o que ocorreria se, por alguma
razão, ficassem disponíveis apenas 23 horas da máquina M1? Isso mudaria muito a solução?
Qual seria esta mudança? Seria necessário reprogramar as operações para maximizar lucro?

Da mesma forma, uma empresa concorrente poderia colocar no mercado um produto


similar ao da empresa para qual o modelo foi desenvolvido, fazendo com que o preço de um
dos produtos dela caísse. Neste caso, será que a operação da fábrica precisaria ser reajustada?
Até que valor seria possível abaixar o preço de um produto sem a necessidade de alterar a
programação de produção?

Estas análises podem ser feitas também com análises gráficas. Entretanto, este tipo de
análise será deixada para cursos futuros.

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 27
Pesquisa Operacional 1
Atualização: 07/03/2008

Unidade 1: Introdução à Modelagem Matemática


Tópico 5: Modelagem na Forma Padrão
Prof. Daniel Caetano

Objetivo: Apresentar as modificações na modelagem matemática necessárias para a


especificação de um modelo na forma padrão em um problema simples.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. Ed. Pioneira, 2007.

Introdução

A solução gráfica para problemas de programação linear, vista nas aulas anteriores, é
bastante elucidativa. Entretanto, é uma forma desajeitada de resolver problemas, além de se
tornar complexa ou impossível de ser aplicada para problemas com mais de duas variáveis de
decisão.

Uma forma alternativa é o uso do Método Simplex para a resolução dos problemas de
programação linear. O Método Simplex é um método sistemático, baseado em um tableau,
onde são indicados todos os dados do problema e, realizando algumas operações, encontra-se
a solução ótima.

Porém, apesar de ter sido apresenada, nas aulas anteriores, a maneira de converter um
problema real em um modelo matemático, tais modelos ainda não estão corrretamente
preparados para sua resolução pelo Simplex. Para que o modelo mamtemático se adapte às
necessidades do Simplex, ainda são necessárias algumas modificações em sua forma, sem
alterar o seu significado matemático. A forma final, pronta para o Simplex, é chamada de
Forma Padrão.

1. Requisitos do Simplex para a Modelagem

Antes de mais nada, é interessante comentar a lógica por trás do Método Simplex. Na
aula anterior, foi desenhado um gráfico que representava a região de soluções viáveis para o
problema então modelado:

2008_SI_-_PesquisaOperacional_I_-_o2007 28
Pesquisa Operacional 2
Atualização: 07/03/2008

Também foi dito que as soluções ótimas estariam sempre nas regiões extremas desta
área; em geral, nos vértices. O Simplex é um método matemático que explora estas
características.

A idéia é a seguinte: dada uma solução inicial (um dos pontos de vértice), ele utiliza
as inequações das restrições para determinar o próximo vértices e, escolhendo o melhor
vértice encontrado, repete o processo. Resumidamente, se na figura anterior fosse iniciado o
processo pelo vértice (0,0), o método calcularia o valor da função objetivo nos vértices (0,3) e
(4,0) (que são os vértices vizinhos ao vértice (0,0)) e escolheria aquele que a função objetivo
tivesse o maior valor (é um problema de maximização).

Supondo que este vértice seja o vértice (4,0), o método calcularia o valor dos vértices
(0,0) e (3,2), que são os vértices vizinhos e, mais uma vez, escolheria aquele que tem o maior
valor na função objetivo... repetindo este processo até que não fosse possível melhorar a
solução.

Ora, como pode ser observado, para que esse processo seja iniciado, antes de mais
nada é preciso encontrar uma solução inicial viável; garantindo isso, o método pressupõe que
todas as soluções calculadas serão viáveis (mas nada pode ser garantido se o método for
iniciado com uma solução inviável). Note que uma solução inicial viável não significa que
ela precisa ser ótima... nem mesmo boa!

Ocorre que nem sempre é simples encontrar essa solução inicial viável na forma com
que determinamos o modelo anteriormente. Assim, serão feitas algumas modificações no
modelo com o objetivo de facilitar a determinação desta solução.

Adicionalmente, o Método Simplex age como a região viável fosse somente as


bordas da região viável. Para tanto, exige que as restrições sejam todas equações, ou seja,
expressas por igualdades. Claramente isso não é o caso comum e será necessário fazer uma
alteração no modelo que transforme as inequações (com sinais ü ou ¶), em equações (com
sinal =) sem modificar o significado do modelo. Neste ponto serão apresentados os truques
para lidar com restrições do tipo ü, ficando para aulas posteriores a análise de restrições do
tipo ü... e, como será visto, para faciliar a determinação da solução inicial, mesmo as
restrições que já são igualdades (=) precisarão de um pequeno ajuste.

Visando a solução por computador, é necessário que todas as variáveis estejam


presentes em todas as restrições e na função objetivo. Como isso nem sempre ocorre
"naturalmente", já que freqüentemente algumas restrições envolvem apenas uma ou duas
variáveis, será necessário adicionar as variáveis faltantes, mais uma vez sem modificar o
significado matemático das restrições. Também serão indicados coeficientes em todas as
variáveis, mesmo que este coeficiente seja "1".

2008_SI_-_PesquisaOperacional_I_-_o2007 29
Pesquisa Operacional 3
Atualização: 07/03/2008

2. A Modelagem

Voltando ao Problema extraído de MOREIRA (2006):

Uma fábrica produz dois produtos, A e B. Cada um deve ser processado por duas
máquinas, M1 e M2. Devido à programação de outros produtos que também usam estas
máquinas, estão disponíveis para os produtos A e B apenas 24 horas da máquina M1 e 16
horas da máquina M2.
Para produzir uma unidade do produto A, são necessárias 4 horas em cada uma das
máquinas e para produzir uma unidade do produto B, são necessárias 6 horas em M1 e 2 horas
em M2. Cada unidade de A vendida gera um lucro de R$ 80,00 e cada unidade de B vendida
gera um lucro de R$ 60,00.
Existe uma previsão de demanda máxima de 3 unidades para B, mas nenhuma
restrição de demanda para A. Deseja-se saber: quanto produzir de cada produto para
maximizar o lucro?

Modelo Final

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Sujeito a:
4 * xA + 6 * xB ü 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB ü 16 <= Restrição do número de horas de M2
xB ü 3 <= Restrição de Demanda para B

as variáveis de decisão são xA e xB e aqui não serão mais representadas as restrições de


não-negatividade, porque elas são implícitas pelo método Simplex.

2.1. Resolvendo o Problema das Inequações

O que fazer para eliminar as desigualdades, neste caso? Uma coisa é certa: não é
possível fazer isso:

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Sujeito a (RESTRIÇÕES INCORRETAS!):


4 * xA + 6 * xB = 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB = 16 <= Restrição do número de horas de M2
xB = 3 <= Restrição de Demanda para B

E isso não é possível simplesmente porque assim o modelo seria modificado de uma
maneira que modificaria o problema a ser resolvido. Em muitos casos, se isso fosse feito, o

2008_SI_-_PesquisaOperacional_I_-_o2007 30
Pesquisa Operacional 4
Atualização: 07/03/2008

problema seria até mesmo insolúvel. Suponha, por exemplo, que a solução ótima do
problema original fosse xA=2 e xB=2. Neste caso, pela restrição de hora de M1:

4 * xA + 6 * xB = 24 => 4*2 + 6*2 = 24 => 8+12 = 24 => 20 = 24 !?!

Não! 20 g 24! Como resolver a questão, então? A solução é usar um pequeno truque:
acrescentar uma variável a mais em cada restrição:

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Sujeito a:
4 * xA + 6 * xB + xS1 = 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB + xS2 = 16 <= Restrição do número de horas de M2
xB + xS3 = 3 <= Restrição de Demanda para B

Observe agora que, mesmo com o sinal de igual (=), as solução não estão mais sendo
restringidas além do modelo original. Por exemplo, suponha novamente que a solução ótima
do problema original fosse xA=2 e xB=2.

Agora, pela restrição de horas de M1, tem-se:

4 * xA + 6 * xB + xS1 = 24 <= Restrição do número de horas de M1


4 * 2 + 6 * 2 + xS1 = 24
8 + 12 + xS1 = 24
20 + xS1 = 24
xS1 = 24 - 20
xS1 = 4

Ou seja, a suposta solução ótima xA=2 e xB=2 implicou um xS1 = 4, mas a solução
voltou a ser possível e o objetivo de uma restrição com o sinal de igual foi atingido. De
qualquer forma, uma pergunta fica no ar: o que representa esta variável xS1?

Ora, neste caso, a variável xS1 representa o número de horas que sobraram da
máquina M1. xS1 é chamada uma variável de folga. Folga, em inglês, é Slack, daí o índice S
na variável.

Repare, também, que as variáveis de folga também precisam obedecer às restrições de


não-negatividade, já que não faz sentido sobrar "-10 horas" da máquina M1, por exemplo.
Note que o raciocínio todo acima pode ser repetido para as outras restrições, envolvendo xS2 e
xS3.

2008_SI_-_PesquisaOperacional_I_-_o2007 31
Pesquisa Operacional 5
Atualização: 07/03/2008

2.2. Resolvendo o Problema das Variáveis Faltantes

Este problema é bem mais fácil de ser resolvido que o anterior: basta acrescentar todas
as variáveis faltantes em cada equação do modelo matemático, indicando-as com coeficiente
zero. As que já existem sem coeficiente devem receber um coeficiente 1. Assim, o modelo
que era:

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Sujeito a:
4 * xA + 6 * xB + xS1 = 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB + xS2 = 16 <= Restrição do número de horas de M2
xB + xS3 = 3 <= Restrição de Demanda para B

Se torna:

Função Objetivo:
[MAX] 80 * xA + 60 * xB + 0 * xS1 + 0 * xS2 + 0 * xS3

Sujeito a:
4 * xA + 6 * xB + 1 * xS1 + 0 * xS2 + 0 * xS3 = 24 <= Restrição M1
4 * xA + 2 * xB + 0 * xS1 + 1 * xS2 + 0 * xS3 = 16 <= Restrição M2
0 * xA + 1 * xB + 0 * xS1 + 0 * xS2 + 1 * xS3 = 3 <= Restrição B

Observe que com as variáveis alinhadas a leitura do modelo se torna bem mais fácil,
também.

3. Soluções Básicas e Não-Básicas: Encontrando uma Solução Inicial

Considere o modelo matemático apresentado anteriormente:

Função Objetivo:
[MAX] 80 * xA + 60 * xB + 0 * xS1 + 0 * xS2 + 0 * xS3
Sujeito a:
4 * xA + 6 * xB + 1 * xS1 + 0 * xS2 + 0 * xS3 = 24 <= Restrição M1
4 * xA + 2 * xB + 0 * xS1 + 1 * xS2 + 0 * xS3 = 16 <= Restrição M2
0 * xA + 1 * xB + 0 * xS1 + 0 * xS2 + 1 * xS3 = 3 <= Restrição B

Observando esta formaulação, é possível verificar que há 5 incógnitas (xA, xB, xS1, xS2,
xS3) e apenas 3 equações de restrição (M1, M2 e B). Como há mais incógnitas do que
equações, o problema é classificado como indeterminado, isto é, não é possível determinar
uma solução única para ele, o que corrobora a solução gráfica, onde havia um grande número
de soluções dentro da área de "soluções viáveis".

2008_SI_-_PesquisaOperacional_I_-_o2007 32
Pesquisa Operacional 6
Atualização: 07/03/2008

Entretanto, se duas variáveis quaisquer forem escolhidas e tiverem seus valores


fixados, o resultado será um sistema de 3 equações e 3 incógnitas, tornando-se um sistema
determinado, possibilitando o cálculo das variáveis restantes.

Por facilidade nas contas, os valores fixados para as variáveis em excesso é sempre 0
(zero). As variáveis escolhidas para terem seu valor definido como zero formam o que é
chamado de "solução não-básica". As variáveis restantes, cujos valores serão calculados,
formam a chamada "solução básica". Note que a solução básica definida desta forma, sem
nenhum cuidado, pode não ser viável. Em outras palavras, uma solução inicial criada
simplesmente impondo que duas variáveis valem zero, sem qualquer outro critério, pode
desrespeitar as restrições previamente impostas.

Na aula anterior foi visto que a área de soluções viáveis para este problema era esta:

Mais uma vez, foi visto que a solução ótima estava sempre num ponto extremo.
Assim, para verificar um resultado interessante, será feita uma análise dos valores das
variáveis nos pontos extremos. Os pontos serão nomeados da seguinte forma: o ponto A é o
ponto (0,0) e os pontos B, C, D e E são os seguintes, seqüenciais, no sentido horário:

Ponto XA XB XS1 XS2 XS3


A 0 0 24 16 3
B 0 3 6 10 0
C 1,5 3 0 4 0
D 3 2 0 0 1
E 4 0 8 0 3

Observe que em todos os pontos extremos há sempre duas variáveis iguais a zero!
E os pontos extremos também representam todas as soluções básicas possíveis.

Pode-se dizer, de forma genérica, que sempre que houver um problema de


programação linear com m incógnitas e n equações, em todos os extremos da região de
soluções possíveis teremos (m-n) incógnitas com valor igual a zero.

2008_SI_-_PesquisaOperacional_I_-_o2007 33
Pesquisa Operacional 7
Atualização: 07/03/2008

3.1. A Solução Inicial

Como futuramente será necessário determinar uma solução inicial, convém analisar
como encontrar tal solução inicial.

O primeiro aspecto importante é que deve ser simples encontrar a solução incial, ou
seja, seu cálculo deve ser simples. Adicionalmente, se o método para encontrar esta solução
inicial puder ser similar para todos os problemas, tanto melhor.

Curiosamente, existe uma solução inicial que se encaixa em todas estas


características. E é uma solução tão simples e comum que ela é chamada, na matemática, de
"solução trivial": basta definir que as variáveis de decisão originais valem ZERO,
tornando-as variáveis não-básicas (fora da solução), a solução inicial será de cálculo
imediato. Observe:

Função Objetivo:
[MAX] 80 * xA + 60 * xB + 0 * xS1 + 0 * xS2 + 0 * xS3

Sujeito a:
4 * xA + 6 * xB + 1 * xS1 + 0 * xS2 + 0 * xS3 = 24 <= Restrição M1
4 * xA + 2 * xB + 0 * xS1 + 1 * xS2 + 0 * xS3 = 16 <= Restrição M2
0 * xA + 1 * xB + 0 * xS1 + 0 * xS2 + 1 * xS3 = 3 <= Restrição B

As variáveis de decisão são xA e xB. Seus valores serão igualados a zero: xA = xB = 0.


Substituindo os valores de xA e xB nas restrições:

4 * 0 + 6 * 0 + 1 * xS1 + 0 * xS2 + 0 * xS3 = 24 <= Restrição M1


4 * 0 + 2 * 0 + 0 * xS1 + 1 * xS2 + 0 * xS3 = 16 <= Restrição M2
0 * 0 + 1 * 0 + 0 * xS1 + 0 * xS2 + 1 * xS3 = 3 <= Restrição B

Resolvendo os cálculos, isso pode ser reescrito da seguinte forma:

0 + 0 + xS1 + 0 + 0 = 24 <= Restrição M1


0 + 0 + 0 + xS2 + 0 = 16 <= Restrição M2
0 + 0 + 0 + 0 + xS3 = 3 <= Restrição B

Ora, limpando este monte de zeros, surge o resultado:

xS1 = 24 <= Restrição M1


xS2 = 16 <= Restrição M2
xS3 = 3 <= Restrição B

E, como foi definido, xA = xB = 0. Estes cinco valores compõem a solução inicial (que,
normalmente, não é uma solução ótima).

2008_SI_-_PesquisaOperacional_I_-_o2007 34
Pesquisa Operacional 8
Atualização: 07/03/2008

Exercício L2

1. Coloque os três problemas abaixo (já modelados na L1) na forma padrão.


2. Encontre as soluções iniciais, variáveis básicas e não básicas para cada um deles.

1) Um navio tem um limite de transporte de 300m3 de carga ou 50t de carga. Ele será usado para
transportar dois tipos de carga: a carga A é transportada em unidades de 60m3, que pesam 1t. A carga B é
transportada em unidades de 25m3, e pesam 8t. O lucro pelo transporte de cada unidade de A é R$ 150,00, e o
lucro pelo transporte de cada unidade de B é de R$ 72,00. Deseja-se o modelo de programação linear com que
se possa obter qual é a melhor composição de carga para a obtenção de máximo lucro.

2) Um computador (1) tem um limite de 4GB (considerado 1GB = 1000MB) de memória e seu usuário
pode exectuar até executar até 72 horas de processamento por semana. Todos os dados que serão processados
nestas 72 horas da semana precisam ser carregados ao mesmo tempo. Isso significa que tudo tem que caber nos
4GB de memória. Um cliente lhe muitos pacotes de dados, de quatro tipos diferentes:
a) 10 pacotes que exigem 150 MB, 1 hora de processamento cada um, pagando R$ 100,00 por unidade
processada.
b) 25 pacotes que exigem 100 MB, 7 horas de processamento cada um, pagando R$ 500,00 por
unidade processada.
c) 3 pacotes que exigem 500 MB, 4 horas de processamento cada um, pagando R$ 350,00 por unidade
processada.
d) 7 pacotes que exigem 350 MB, 10 horas de processamento cada um, pagando R$ 650,00 por
unidade processada.
Deseja-e o modelo de programação linear para definir quais pacotes serão processados para que o
maior lucro seja obtido.

3) (livro) Uma empresa do ramo de confecções está considerando quanto deve produzir de seus dois
modelos de terno, denominados Executivo Master e Caibem, de forma a maximizar o lucro. É impossível
produzir quanto se queira de cada um, pois existem limitações nas horas disponíveis para costura em máquina e
acabamento manual. Para a costura, existe um máximo de 180 horas-máquina disponíveis e para o acabamento
existe um máximo de 240 homens-hora. Em termos de lucro unitário e produção, os dois modelos de terno
apresentam as seguintes características:

a) Executivo Master
- Lucro unitário: R$ 120,00
- horas-máquina de costura por unidade: 2
- homens-hora de acabamento por unidade: 2
b) Caibem
- Lucro unitário: R$ 70,00
- horas-máquina de costura por unidade: 1
- homens-hora de acabamento por unidade: 4

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 35
Pesquisa Operacional 1
Atualização: 12/03/2008

Resolução das Listas 1 e 2


Prof. Daniel Caetano

1. Solução da Lista L1

1.1, Solução da Lista L1

Problema

1) Um navio tem um limite de transporte de 300m3 de carga ou 50t de carga. Ele será
usado para transportar dois tipos de carga: a carga A é transportada em unidades de 60m3,
que pesam 1t. A carga B é transportada em unidades de 25m3, e pesam 8t. O lucro pelo
transporte de cada unidade de A é R$ 150,00, e o lucro pelo transporte de cada unidade de B é
de R$ 72,00. Deseja-se o modelo de programação linear com que se possa obter qual é a
melhor composição de carga para a obtenção de máximo lucro.

Solução

O primeiro passo que auxilia muito na solução, é fazer um pequeno quadro de


informações. Por exemplo:

Carga Volume Peso Lucro Unitário


A 60 1 150
B 25 8 72
Disponível 300 50 -

Neste problema, o objetivo é claro: maximizar o lucro. Assim, haverá uma função
objetivo de maximização. Mas como descrever esta função objetivo em termos dos dados
fornecidos?

Ora, é sabido o lucro que o transporte cada unidade de A e B gera: se uma unidade de
A for transportada, o lucro será de R$ 150,00. Se uma unidade de B for transportada, o lucro
será de R$ 72,00. Se for considerado o número de unidades de A transportadas como xA e o
número de unidades de B transportadas como xB, pode-se dizer que:

Lucro pelo transporte de A = 150 * xA


Lucro pelo transporte de B = 72 * xB

Lucro Total = 150 * xA + 72 * xB

Ora, essa é, então, a função objetivo, já que se deseja maximizar este lucro... E xA e xB
são as variáveis de decisão. A função objetivo pode ser formalizada como:

Função Objetivo:
[MAX] 150 * xA + 72 * xB

2008_SI_-_PesquisaOperacional_I_-_o2007 36
Pesquisa Operacional 2
Atualização: 12/03/2008

Esta é a primeira parte do modelo, mas ele ainda está longe de estar completo...
Afinal, da maneira que foi representado, é possível definir um lucro infinito e, na prática, isso
não ocorre! Como contornar isso? Impondo as limitações que o próprio problema apresenta:

- Limitação de Volume : 300


- Limitação de Peso : 50

A maneira correta de descrever isso será vista a seguir.

Limitação de Volume: 300

O volume será compartilhado pelas cargas A e B, uma vez que ambos terão de ser
colocados no mesmo navio. É sabido que cada unidade de A transportada ocupa 60 m3 e cada
unidade de B transportada ocupa 25 m3. Ora, se for multiplicado o número de unidades
transportadas de A (xA) por 60, o resultado será o volume total ocupado pela carga A e
multiplicando o número de unidades transportadas de B (xB) por 25, o resultado será o
volume total ocupado pela carga B:

Volume total da carga A : 60 * xA


Volume total da carga B : 25 * xB
Volume total ocupado : 60 * xA + 25 * xB

Mas a limitação de volume é 300 m3, ou seja, é possível ocupar qualquer volume,
desde que não exceda 300 m3. Isso pode ser escrito da seguinte forma:

Volume total ocupado = 60 * xA + 25 * xB


Volume permitido ü 300

Juntando ambos...

60 * xA + 25 * xB ü 300 <= Restrição de volume

Limitação de Peso: 50

O peso das cargas A e B também se somam para o cálculo do peso total, já que as
cargas vão no mesmo navio. É sabido que cada unidade de A transportada pesa 1t e cada
unidade de B transportada ocupa 8t. Ora, se for multiplicado o número de unidades
transportadas de A (xA) por 1, o resultado será o peso total da carga A e multiplicando o
número de unidades transportadas de B (xB) por 8, o resultado será o peso total da carga B:

Peso total da carga A : 1 * xA


Peso total da carga B : 8 * xB
Peso total : 1 * xA + 8 * xB

2008_SI_-_PesquisaOperacional_I_-_o2007 37
Pesquisa Operacional 3
Atualização: 12/03/2008

Mas a limitação de peso é 50t, ou seja, o peso total de nossa carga pode ser qualquer
um, desde que não exceda 50t. É possível escrever isso da seguinte forma:

Peso total = 1 * xA + 8 * xB
Peso permitido ü 50

Juntando ambos...

1 * xA + 8 * xB ü 50 <= Restrição de peso

Condição de Não-Negatividade

Em programação linear, uma restrição sempre implícita é a de que as variáveis de


decisão não podem assumir valores negativos. Isso faz todo o sentido do mundo, uma vez que
as variáveis de decisão praticamente sempre indicam quantidades... e quantidades negativas
não fazem sentido. Por esta razão, são incluidas duas restrições ao modelo:

xA ¶ 0; xB ¶ 0 <= Restrições de não-negatividade

Modelo Final

Juntando a função objetivo com todas as restrições, o resultado é o modelo


matemático final para o problema:

Função Objetivo:
[MAX] 150 * xA + 72 * xB

Restrições:
60 * xA + 25 * xB ü 300 <= Restrição de volume
1 * xA + 8 * xB ü 50 <= Restrição de peso
xA ¶ 0; xB ¶ 0 <= Restrições de não-negatividade

Onde as variáveis de decisão são xA e xB, representando respectivamente a quantidade


a transportar da carga A (em unidades) e a quantidade a transportar da carga B (em unidades).

2008_SI_-_PesquisaOperacional_I_-_o2007 38
Pesquisa Operacional 4
Atualização: 12/03/2008

1.2. Solução do Exercício 2

Problema

2) Um computador (1) tem um limite de 4GB (considerado 1GB = 1000MB) de


memória e seu usuário pode exectuar até executar até 72 horas de processamento por semana.
Todos os dados que serão processados nestas 72 horas da semana precisam ser carregados ao
mesmo tempo. Isso significa que tudo tem que caber nos 4GB de memória. Um cliente lhe
muitos pacotes de dados, de quatro tipos diferentes:
a) 10 pacotes que exigem 150 MB, 1 hora de processamento cada um, pagando R$
100,00 por unidade processada.
b) 25 pacotes que exigem 100 MB, 7 horas de processamento cada um, pagando R$
500,00 por unidade processada.
c) 3 pacotes que exigem 500 MB, 4 horas de processamento cada um, pagando R$
350,00 por unidade processada.
d) 7 pacotes que exigem 350 MB, 10 horas de processamento cada um, pagando R$
650,00 por unidade processada.
Deseja-e o modelo de programação linear para definir quais pacotes serão processados
para que o maior lucro seja obtido.

Solução

O primeiro passo que auxilia muito na solução, é fazer um pequeno quadro de


informações. Por exemplo:

Pacote memória horas de proc. lucro unitáro Pacotes disponíveis


(MB) (h) (R$)
A 150 1 100 10
B 100 7 500 25
C 500 4 350 3
D 350 10 650 7
Disponível 4,000 72 - -

Neste problema, o objetivo é claro: maximizar o lucro. Assim, haverá uma função
objetivo de maximização. Mas como descrever esta função objetivo em termos dos dados e
variáveis disponíveis?

Ora, é sabido o lucro que o processamento de cada pacote A, B, C, D e E gera: se uma


unidade de A for processada, o lucro será de R$ 100,00. Se uma unidade de B for vendida, o
lucro será de R$ 500,00... e assim por diante. Se considerarmos o número de unidades de A,
B, C e D processadas como xA, xB, xC e xD respectivamente, pode-se dizer que:

Lucro pelo processamento de unidades A = 100 * xA


Lucro pelo processamento de unidades B = 500 * xB
Lucro pelo processamento de unidades C = 350 * xC
Lucro pelo processamento de unidades D = 650 * xD

2008_SI_-_PesquisaOperacional_I_-_o2007 39
Pesquisa Operacional 5
Atualização: 12/03/2008

Assim, o lucro total será:

Lucro Total = 100 * xA + 500 * xB + 350 * xC + 650 * xD

Ora, essa é, então, a função objetivo, já que se deseja maximizar este lucro... E xA, xB,
xC e xD são as variáveis de decisão. A função objetivo pode ser formalizada como:

Função Objetivo:
[MAX] 100 * xA + 500 * xB + 350 * xC + 650 * xD

Esta é a primeira parte do modelo, mas ele ainda não está completo. Mais uma vez, da
maneira com que foi representado, é possível definir um lucro infinito e, na prática, isso não
ocorre. Serão impostas, então as restrições que o próprio problema apresenta:

- Limitação de Memória : 4000


- Limitação de Horas : 72
- Limitação de Unidades A: 10
- Limitação de Unidades B: 25
- Limitação de Unidades C: 3
- Limitação de Unidades D: 7

A seguir serão avaliadas cada uma destas restrições.

Limitação de Memória: 4000

A memória será compartilhada por todos os pacotes a serem processados nas 72 horas.
Assim, é necessário expressar o consumo de memória através das variáveis de decisão xA, xB,
xC e xD. É sabido que cada unidade de A, por exemplo, consome 150MB de memória. Cada
unidade de C, por exemplo, consome 500MB de memória. Ora, se for multiplicado o número
de unidades processadas de A, B, C e D (xA, xB, xC e xD) pelo seu consumo de memória
respectivo, o resultado será a quandidade de memória total que os pacotes de um determinado
tipo consumirão:

Memória consumida por pacotes A: 150 * xA


Memória consumida por pacotes B: 100 * xB
Memória consumida por pacotes C: 500 * xC
Memória consumida por pacotes D: 350 * xD
Memória consumida total: 150 * xA + 100 * xB + 500 * xC + 350 * xD

Mas a limitação de memória total é 4000, ou seja, pode-se consumir qualquer


quantidade de memória, desde que não exceda 4000. Isso pode ser escrito da seguinte forma:

Memória total necessária: 150 * xA + 100 * xB + 500 * xC + 350 * xD


Memória total disponível: 4000

2008_SI_-_PesquisaOperacional_I_-_o2007 40
Pesquisa Operacional 6
Atualização: 12/03/2008

Juntando ambos...

150 * xA + 100 * xB + 500 * xC + 350 * xD ü 4000 <= Restrição de Memória

Limitação de Horas : 72

As horas serão gastas por todos os processamentos (de pacotes A, B, C e D), sendo
eles executados seqüencialmente. É sabido que cada unidade de A processada consome 1
hora e cada unidade de D processada consome 10 horas, por exemplo. Ora, se for
multiplicado o número de unidades processadas de A, B, C e D (xA, xB, xC e xD) pelo seu
consumo de horas respectivo, o resultado será o número de horas consumidas no total, devido
ao processamento:

Horas consumidas por pacotes A: 1 * xA


Horas consumidas por pacotes B: 7 * xB
Horas consumidas por pacotes C: 4 * xC
Horas consumidas por pacotes D: 10 * xD
Horas consumidas total: 1 * xA + 7 * xB + 4 * xC + 10 * xD

Mas a limitação de horas é de 72, ou seja, pode-se consumir qualquer número de


horas, desde que não exceda 72. Isso pode ser escrito da seguinte forma:

Horas necessárias: 1 * xA + 7 * xB + 4 * xC + 10 * xD
Horas disponíveis: 72

Juntando ambos...

1 * xA + 7 * xB + 4 * xC + 10 * xD ü 72 <= Restrição de Horas

Limitação de Unidades A, B, C e D: 10, 25, 3, 7 (respectivamente)

Além das restrições de hora e memória, temos há algumas restrições na quantidade


máxima de cada tipo de unidade que pode ser processada. Por exemplo: só há 10 unidades A
para serem processadas; não faz sentido considerar o processamento de uma décima primeira
unidade A. Assim, pode-se dizer que o número de unidades processadas de A, B, C e D (xA,
xB, xC e xD) deve ser inferior ou igual ao número de unidades disponíveis:

xA ü 10 <= Restrição de Unidades A


xB ü 25 <= Restrição de Unidades B
xC ü 3 <= Restrição de Unidades C
xD ü 7 <= Restrição de Unidades D

2008_SI_-_PesquisaOperacional_I_-_o2007 41
Pesquisa Operacional 7
Atualização: 12/03/2008

Condição de Não-Negatividade

Em programação linear, a restrição de que as variáveis de decisão não podem assumir


valores negativos é sempre implícita. Neste caso, elas serão explicitadas:

xA ¶ 0; xB ¶ 0; xC ¶ 0 ; xD ¶ 0 <= Não-negatividade

Modelo Final

Juntando a função objetivo com todas as restrições, o resultado é o modelo


matemático final para problema:

Função Objetivo:
[MAX] 100 * xA + 500 * xB + 350 * xC + 650 * xD

Restrições:
150 * xA + 100 * xB + 500 * xC + 350 * xD ü 4000 <= Restrição de Memória
1 * xA + 7 * xB + 4 * xC + 10 * xD ü 72 <= Restrição de Horas
xA ü 10 <= Restrição de Unidades A
xB ü 25 <= Restrição de Unidades B
xC ü 3 <= Restrição de Unidades C
xD ü 7 <= Restrição de Unidades D
xA ¶ 0; xB ¶ 0; xC ¶ 0 ; xD ¶ 0 <= Não-negatividade

Onde as variáveis de decisão são xA, xB, xC e xD, representando a quandidade de cada
tipo de pacote (A, B, C e D, respectivamente) a ser processado.

2008_SI_-_PesquisaOperacional_I_-_o2007 42
Pesquisa Operacional 8
Atualização: 12/03/2008

1,3. Solução do Exercício 3

Problema

3) (livro) Uma empresa do ramo de confecções está considerando quanto deve


produzir de seus dois modelos de terno, denominados Executivo Master e Caibem, de forma a
maximizar o lucro. É impossível produzir quanto se queira de cada um, pois existem
limitações nas horas disponíveis para costura em máquina e acabamento manual. Para a
costura, existe um máximo de 180 horas-máquina disponíveis e para o acabamento existe um
máximo de 240 homens-hora. Em termos de lucro unitário e produção, os dois modelos de
terno apresentam as seguintes características:

a) Executivo Master
- Lucro unitário: R$ 120,00
- horas-máquina de costura por unidade: 2
- homens-hora de acabamento por unidade: 2
b) Caibem
- Lucro unitário: R$ 70,00
- horas-máquina de costura por unidade: 1
- homens-hora de acabamento por unidade: 4
Formule o problema como um modelo de programação linear.

Solução

O primeiro passo que auxilia muito na solução, é fazer um pequeno quadro de


informações. Por exemplo:

Terno horas-máquina homens-hora Lucro Unitário


Executivo Master 2 2 120
Caibem 1 4 70
Disponível 180 240 -

Neste problema, o objetivo é maximizar o lucro. Assim, haverá uma função objetivo
de maximização. Mas como descrever esta função objetivo em termos dos dados e variáveis
disponíveis?

Ora, é sabido o lucro que a venda de cada Executivo Master (EM) e Caibem (C) gera:
se uma unidade de EM for vendida, o lucro será de R$ 120,00. Se uma unidade de C for
vendida, o lucro será de R$ 70,00. Se for considerado o número de unidades de EM
transportadas como xEM e o número de unidades de C transportadas como xC, pode-se dizer
que:

Lucro pela venda de EM = 120 * xEM


Lucro pela venda de C = 70 * xC

Lucro Total = 120 * xEM + 70 * xC

2008_SI_-_PesquisaOperacional_I_-_o2007 43
Pesquisa Operacional 9
Atualização: 12/03/2008

Ora, essa é, então, a função objetivo, já que se deseja maximizar este lucro... E xEM e
xC são as variáveis de decisão. A função objetivo pode ser formalizada como:

Função Objetivo:
[MAX] 120 * xEM + 70 * xC

Esta é a primeira parte do modelo, mas ele ainda não está completo. Serão impostas,
então, as limitações que o próprio problema apresenta:

- Limitação de Horas-Máquina : 180


- Limitação de Homens-Hora : 240

Tais restrições serão analisadas em seguida:

Limitação de Horas-Máquina : 180

As horas-máquina serão compartilhadas pela produção dos ternos EM e C. É sabido


cada unidade de EM produzida gasta 2 horas-máquina e cada unidade de C produzida gasta 1
hora-máquina. Ora, se for muliplicado o número de unidades produzidas de EM (xEM) por 2, o
resultado será o número de horas-máquina consumidas pela produção de EM e multiplicando
o número de unidades produzidas de C (xC) por 1, o resultado será o número de
horas-máquina consumidas pela produção de C:

Horas-máquina gastos por EM : 2 * xEM


Horas-máquina gastos por C : 1 * xC
Horas-máquina gastas : 2 * xEM + 1 * xC

Mas a limitação de horas-máquina é de 180, ou seja, é possível gastar qualquer


número de horas-máquina, desde que não exceda 180. Isso pode ser escrito da seguinte
forma:

Horas-máquina necessárias = 2 * xEM + 1 * xC


Horas-máquina disponíveis ü 180

Juntando ambos...

2 * xEM + 1 * xC ü 180 <= Restrição de horas-máquina

Limitação de Homens-Hora : 240

Os homens-hora serão compartilhados pela produção dos ternos EM e C. É sabido que


cada unidade de EM produzida gasta 2 homens-hora e cada unidade de C produzida gasta 4
homens-hora. Ora, se for multiplicado o número de unidades produzidas de EM (xEM) por 2, o
resultado será o número de homens-horas consumidos pela produção de EM e multiplicando

2008_SI_-_PesquisaOperacional_I_-_o2007 44
Pesquisa Operacional 10
Atualização: 12/03/2008

o número de unidades produzidas de C (xC) por 4, o resultado será o número de homens-hora


consumidas pela produção de C:

Homens-hora gastos por EM : 2 * xEM


Homens-hora gastos por C : 4 * xC
Homens-hora gastos : 2 * xEM + 4 * xC

Mas a limitação de homens-hora é de 240, ou seja, é possível gastar qualquer número


de homens-hora, desde que não exceda 240. Isso pode ser escrito da seguinte forma:

Homens-horas necessários = 2 * xEM + 4 * xC


Homens-horas disponíveis ü 240

Juntando ambos...

2 * xEM + 4 * xC ü 240 <= Restrição de homens-hora

Condição de Não-Negatividade

É necessário ainda explicitar a condição de não negatividade, que não permite que as
variáveis de decisão recebam valores negativos. Assim, serão incluídas estas duas restrições
ao modelo:

xEM ¶ 0; xC ¶ 0 <= Restrições de não-negatividade

Modelo Final

Juntando a função objetivo com todas as restrições, o resultado é o modelo


matemático final para o problema:

Função Objetivo:
[MAX] 120 * xEM + 70 * xC

Restrições:
2 * xEM + 1 * xC ü 180 <= Restrição de horas-máquina
2 * xEM + 4 * xC ü 240 <= Restrição de homens-hora
xEM ¶ 0; xC ¶ 0 <= Restrições de não-negatividade

Onde as variáveis de decisão são xEM e xC, representando a quantidade a ser produzida
de cada um dos tipos de terno: Executivo Mater e Caibem, respectivamente.

2008_SI_-_PesquisaOperacional_I_-_o2007 45
Pesquisa Operacional 11
Atualização: 12/03/2008

2. Solução da Lista L2

2.1. Coloque os três problemas modelados na L1 na forma padrão.

Problema 1

Modelagem original do primeiro problema:

Função Objetivo:
[MAX] 150 * xA + 72 * xB

Restrições:
60 * xA + 25 * xB ü 300 <= Restrição de volume
1 * xA + 8 * xB ü 50 <= Restrição de peso

a) Eliminando as desigualdades das Restrições

Como há duas restrições do tipo menor ou igual, é possível transformá-las em


igualdades acrescentando variáveis de sobra em cada uma das restrições:

60 * xA + 25 * xB ü 300 => 60 * xA + 25 * xB + 1 * xS1 = 300


1 * xA + 8 * xB ü 50 => 1 * xA + 8 * xB + 1 * xS2 = 50

Onde xS1 significa o volume não utilizado do navio e xS2 o peso livre do navio.

b) Fazendo com que todas as equações tenham todas as variáveis

Basta acrescentar em todas as equações as variáveis faltantes, com coeficiente zero:

[MAX]150 * xA + 72 * xB + 0 * xS1 + 0 * xS2


60 * xA + 25 * xB + 1 * xS1 0 * xS2 = 300
1 * xA + 8 * xB + 0* xS1 1* xS2 = 50

2008_SI_-_PesquisaOperacional_I_-_o2007 46
Pesquisa Operacional 12
Atualização: 12/03/2008

Problema 2

Modelagem original do segundo problema:

Função Objetivo:
[MAX] 100 * xA + 500 * xB + 350 * xC + 650 * xD

Restrições:
150 * xA + 100 * xB + 500 * xC + 350 * xD ü 4000 <= Restrição de Memória
1 * xA + 7 * xB + 4 * xC + 10 * xD ü 72 <= Restrição de Horas
xA ü 10 <= Restrição de Unidades A
xB ü 25 <= Restrição de Unidades B
xC ü 3 <= Restrição de Unidades C
xD ü 7 <= Restrição de Unidades D
xA ¶ 0; xB ¶ 0; xC ¶ 0 ; xD ¶ 0 <= Não-negatividade

a) Eliminando as desigualdades das Restrições

Como há duas restrições do tipo menor ou igual, é possível transformá-las em


igualdades acrescentando variáveis de sobra em cada uma das restrições:

150*xA+100*xB+500*xC+350*xD ü 4000 => 150*xA+100*xB+500*xC+350*xD+xS1 = 4000


1 * xA + 7 * xB + 4 * xC + 10 * xD ü 72 => 1 * xA + 7 * xB + 4 * xC + 10 * xD + xS2 = 72
1* xA ü 10 => 1 * xA + xS3 = 10
1 * xB ü 25 => 1 * xB + xS4 = 25
1 * xC ü 3 => 1 * xC + xS5 = 3
1 * xD ü 7 => 1 * xD + xS6 = 7

Onde xA significa o número de pacotes A a serem processados, xB significa o número


de pacotes B a serem processados, xC significa o número de pacotes C a serem processados,
xD significa o número de pacotes D a serem processados.

b) Fazendo com que todas as equações tenham todas as variáveis

Basta acrescentar em todas as equações as variáveis faltantes, com coeficiente zero:

[MAX] 100*xA + 500*xB + 350*xC + 650*xD + 0*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 0*xS6
150*xA + 100*xB + 500*xC + 350*xD + 1*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 0*xS6 = 4000
1*xA + 7*xB + 4*xC + 10*xD + 0*xS1 + 1*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 0*xS6 = 72
1*xA + 0*xB + 0*xC + 0*xD + 0*xS1 + 0*xS2 + 1*xS3 + 0*xS4 + 0*xS5 + 0*xS6 = 10
0*xA + 1*xB + 0*xC + 0*xD + 0*xS1 + 0*xS2 + 0*xS3 + 1*xS4 + 0*xS5 + 0*xS6 = 25
0*xA + 0*xB + 1*xC + 0*xD + 0*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 1*xS5 + 0*xS6 = 3
0*xA + 0*xB + 0*xC + 1*xD + 0*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 1*xS6 = 7

2008_SI_-_PesquisaOperacional_I_-_o2007 47
Pesquisa Operacional 13
Atualização: 12/03/2008

Problema 3

Modelagem original do terceiro problema:

Função Objetivo:
[MAX] 120 * xEM + 70 * xC

Restrições:
2 * xEM + 1 * xC ü 180 <= Restrição de horas-máquina
2 * xEM + 4 * xC ü 240 <= Restrição de homens-hora

a) Eliminando as desigualdades das Restrições

Como há duas restrições do tipo menor ou igual, podemos transformá-las em


igualdades acrescentando variáveis de sobra em cada uma das restrições:

2 * xEM + 1 * xC ü 180 => 2 * xEM + 1 * xC + 1 * xS1 = 180


2 * xEM + 4 * xC ü 240 => 2 * xEM + 4 * xC + 1 * xS2 = 240

Onde xS1 significa o número de horas/máquina não usado e xS2 o número de


homens/hora não usados.

b) Fazendo com que todas as equações tenham todas as variáveis

Basta acrescentar em todas as equações as variáveis faltantes, com coeficiente zero:

[MAX]120 * xEM + 70 * xC + 0 * xS1 + 0 * xS2


2 * xEM + 1 * xC + 1 * xS1 0 * xS2 = 180
2 * xEM + 4 * xC + 0* xS1 1* xS2 = 240

2.2. Encontre as soluções iniciais, variáveis básicas e não básicas para cada um.

Problema 1
[MAX]150 * xA + 72 * xB + 0 * xS1 + 0 * xS2
60 * xA + 25 * xB + 1 * xS1 0 * xS2 = 300
1 * xA + 8 * xB + 0* xS1 1* xS2 = 50

Solução inicial: xA = xB = 0; xS1 = 300; xS2 = 50


Variáveis não-básicas: xA e xB
Variáveis básicas: xS1 e xS2

2008_SI_-_PesquisaOperacional_I_-_o2007 48
Pesquisa Operacional 14
Atualização: 12/03/2008

Problema 2
[MAX] 100*xA + 500*xB + 350*xC + 650*xD + 0*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 0*xS6
150*xA + 100*xB + 500*xC + 350*xD + 1*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 0*xS6 = 4000
1*xA + 7*xB + 4*xC + 10*xD + 0*xS1 + 1*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 0*xS6 = 72
1*xA + 0*xB + 0*xC + 0*xD + 0*xS1 + 0*xS2 + 1*xS3 + 0*xS4 + 0*xS5 + 0*xS6 = 10
0*xA + 1*xB + 0*xC + 0*xD + 0*xS1 + 0*xS2 + 0*xS3 + 1*xS4 + 0*xS5 + 0*xS6 = 25
0*xA + 0*xB + 1*xC + 0*xD + 0*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 1*xS5 + 0*xS6 = 3
0*xA + 0*xB + 0*xC + 1*xD + 0*xS1 + 0*xS2 + 0*xS3 + 0*xS4 + 0*xS5 + 1*xS6 = 7

Solução inicial: xA = xB = xC = xD = 0;
xS1 = 4000; xS2 = 72; xS3 = 10; xS4 = 25; xS5 = 3; xS6 = 7
Variáveis não-básicas: xA, xB, xC, xD
Variáveis básicas: xS1, xS2, xS3, xS4, xS5, xS6

Problema 3
[MAX]120 * xEM + 70 * xC + 0 * xS1 + 0 * xS2
2 * xEM + 1 * xC + 1 * xS1 0 * xS2 = 180
2 * xEM + 4 * xC + 0* xS1 1* xS2 = 240

Solução inicial: xEM = xC = 0; xS1 = 180; xS2 = 240


Variáveis não-básicas: xEM e xC
Variáveis básicas: xS1 e xS2

2008_SI_-_PesquisaOperacional_I_-_o2007 49
Pesquisa Operacional 1
Atualização: 12/03/2008

Unidade 2: Método Simplex e Ferramentas Computacionais


Tópico 6: Usando o Método Simplex para Solução de Problemas
Prof. Daniel Caetano

Objetivo: Apresentar o Método Simplex para solução de problemas de Programação


Linear.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.

Introdução

A solução gráfica para problemas de programação linear é bastante elucidativa.


Entretanto, é uma forma desajeitada de resolver problemas, além de se tornar complexa ou
impossível de ser aplicada para problemas com mais de duas variáveis de decisão (pois seria
necessário realizar figuras de 3, 4, 5... n dimensões).

Uma forma alternativa é o uso do Método Simplex para a resolução dos problemas de
programação linear. O Método Simplex é um método sistemático, baseado em um tableau,
onde são indicados todos os dados do problema e, realizando algumas operações, a solução
ótima é encontrada.

Embora o Simplex use cálculos bastante simples, sua seqüência é bastante tediosa.
Esta característica faz com que seja interessante criar programas para resolver problemas pelo
Método Simplex. Entretanto, é necessário aprender todos os passos do Simplex, verificando
suas qualidades e os pontos críticos onde podem surgir problemas, possibilitando uma correta
interpretação dos resultados quando a solução por encontrada por meio de um software.

1. A Modelagem

Voltando ao Problema extraído de MOREIRA (2006) :

Uma fábrica produz dois produtos, A e B. Cada um deve ser processado por duas
máquinas, M1 e M2. Devido à programação de outros produtos que também usam estas
máquinas, estão disponíveis para os produtos A e B apenas 24 horas da máquina M1 e 16
horas da máquina M2.
Para produzir uma unidade do produto A, são necessárias 4 horas em cada uma das
máquinas e para produzir uma unidade do produto B, são necessárias 6 horas em M1 e 2 horas
em M2. Cada unidade de A vendida gera um lucro de R$ 80,00 e cada unidade de B vendida
gera um lucro de R$ 60,00.
Existe uma previsão de demanda máxima de 3 unidades para B, mas nenhuma
restrição de demanda para A. Deseja-se saber: quanto produzir de cada produto para
maximizar o lucro?

2008_SI_-_PesquisaOperacional_I_-_o2007 50
Pesquisa Operacional 2
Atualização: 12/03/2008

Cujo modelo final era:

Função Objetivo:
[MAX] 80 * xA + 60 * xB

Sujeito a:
4 * xA + 6 * xB ü 24 <= Restrição do número de horas de M1
4 * xA + 2 * xB ü 16 <= Restrição do número de horas de M2
1 * xB ü 3 <= Restrição de Demanda para B

Sendo as variáveis de decisão xA e xB, indicando as quantidades de produção para cada


produto A e B.

O primeiro passo para a resolução para o Simplex será colocar o problema na forma
padrão, para atender às exigências do método Simplex com relação às restrições e também
para determinar mais facilmente a solução inicial.

Como visto anteiormente, a forma padrão para este modelo é:

Função Objetivo:
[MAX] 80 * xA + 60 * xB + 0 * xS1 + 0 * xS2 + 0 * xS3

Sujeito a:
4 * xA + 6 * xB + 1 * xS1 + 0 * xS2 + 0 * xS3 = 24 <= Restrição M1
4 * xA + 2 * xB + 0 * xS1 + 1 * xS2 + 0 * xS3 = 16 <= Restrição M2
0 * xA + 1 * xB + 0 * xS1 + 0 * xS2 + 1 * xS3 = 3 <= Restrição B

2. Soluções Básicas e Não-Básicas

Como visto anteriormente, não é possível determinar uma solução inicial facilmente
com os dados fornecidos até então, pois há 5 incógnitas mas apenas 3 equações, sendo um
problema indeterminado. Entretanto, como já visto, é possível escolher duas variáveis
quaisquer e fixar seus valores, fazendo com que o problema fique com 3 equações e 3
incógnitas, tornando-se um sistema determinado; com isso, fica possível o cálculo das
variáveis restantes, possibilitando encontrar a já conhecida "solução inicial viável".

Por facilidade nas contas, os valores a serem fixados para as variáveis serão sempre 0
(zero). As variáveis escolhidas para terem seu valor definido como zero formam a chamada
"solução não-básica" e as variáveis restantes, cujos valores serão calculados, formam a
chamada "solução básica". Note que, para que esta solução seja viável, é preciso que o
modelo tenha sido colocado na forma padrão; isso implica aplicar todos os truques que já
foram vistos e, em alguns casos, outros que ainda serão vistos no futuro.

2008_SI_-_PesquisaOperacional_I_-_o2007 51
Pesquisa Operacional 3
Atualização: 12/03/2008

Algumas aulas atrás, foi vista a área de soluções possíveis para este problema:

Também foi dito que as soluções ótimas estariam sempre nas regiões extremas desta
área; em geral, nos vértices. O Simplex é um método matemático que explora estas
características, iniciando por uma solução inicial viável.

Por padrão, é definido que as variáveis de decisão iniciais (neste acaso, XA e XB) é que
serão zeradas, e com isso é possível calcular uma solução incial:

Solução Básica:
xS1 = 24 <= Restrição M1
xS2 = 16 <= Restrição M2
xS3 = 3 <= Restrição B

Solução Não-Básica:
xA = 0
xB = 0

Revisando, a idéia do Simplex é a seguinte: dada uma solução inicial (um dos pontos
de vértice), ele utiliza as inequações das restrições para determinar o próximo vértices e,
escolhendo o melhor vértice encontrado, repete o processo. Resumidamente, se na figura
anterior fosse iniciado o processo pelo vértice (0,0), o método calcularia o valor da função
objetivo nos vértices (0,3) e (4,0) (que são os vértices vizinhos ao vértice (0,0)) e escolheria
aquele que a função objetivo tivesse o maior valor (é um problema de maximização).

Supondo que este vértice seja o vértice (4,0), o método calcularia o valor dos vértices
(0,0) e (3,2), que são os vértices vizinhos e, mais uma vez, escolheria aquele que tem o maior
valor na função objetivo... repetindo este processo até que não fosse possível melhorar a
solução.

2008_SI_-_PesquisaOperacional_I_-_o2007 52
Pesquisa Operacional 4
Atualização: 12/03/2008

Lembrando que os vértices da figura são estes:

Ponto XA XB XS1 XS2 XS3


A 0 0 24 16 3
B 0 3 6 10 0
C 1,5 3 0 4 0
D 3 2 0 0 1
E 4 0 8 0 3

E observando que, se há m incógnitas e n equações, haverá sempre (m-n) incógnitas


com valor igual a zero nos pontos de vértice, o Simplex nada mais faz do que procurar, de
uma forma sistemática, qual é a combinação de (m-n) variáveis que, quando igualadas a zero,
tornam o valor da função objetivo máximo.

A partir do próximo tópico será apresentado, então, a seqüência de cálculos


matemáticos que compõe o Método Simplex.

3. O Método Simplex

Para iniciar o Simplex é necessária uma solução possível, ainda que ela esteja longe
de ser a melhor solução. A partir desta solução, o método permite que se "navegue" ao longo
dos extremos do espaço de soluções possíveis, até chegar à solução ótima. O ponto de partida
costuma ser a solução trivial, ou seja, aquela em que a origem do espaço é a solução. Em
outras palavras, aquela em que as variáveis de decisão são zero.

O Método Simplex, entretanto, não é "cego", isto é, não explora os extremos do


espaço de soluções de forma aleatória. Da "solução trivial", o processo irá para o próximo
extremo contíguo que fornecer o maior incremento na função objetivo (no caso de um
problema de maximização).

Cada solução intermediária será apresentada na forma de uma tabelinha denominada


"tableau". Em cada tableau serão realizados alguns cálculos que permitirão gerar o próximo
tableau, que representa a próxima solução (o extremo seguinte do espáco de soluções
possíveis). O processo é repetido até que qualquer mudança nova sempre piore o resultado da
função objetivo, ao invés de melhorar (quando então a resolução terá chegado ao fim).

O algoritmo é:

1) Monta-se o tableau da solução inicial, que corresponde à origem;


2) Aplicam-se cálculos no tableau, cujo resultado é um segundo tableau;
3) Realiza-se um teste para verificar se a solução é ótima;
4) Caso não seja, repetem-se os cálculos no tableau, gerando o próximo tableau.

2008_SI_-_PesquisaOperacional_I_-_o2007 53
Pesquisa Operacional 5
Atualização: 12/03/2008

3.1. Exemplo de Aplicação do Método Simplex

Neste primeiro exemplo, será resolvido o problema já apresentado, que possuía


apenas restrições do tipo ü, e que já foi devidamente convertido para a forma padrão. O
modelo matemático na forma padrão encontrado anteriormente foi:

Função Objetivo:
[MAX] 80 * xA + 60 * xB + 0 * xS1 + 0 * xS2 + 0 * xS3

Sujeito a:
4 * xA + 6 * xB + 1 * xS1 + 0 * xS2 + 0 * xS3 = 24 <= Restrição M1
4 * xA + 2 * xB + 0 * xS1 + 1 * xS2 + 0 * xS3 = 16 <= Restrição M2
0 * xA + 1 * xB + 0 * xS1 + 0 * xS2 + 1 * xS3 = 3 <= Restrição B

Segue, agora, a construção do primeiro tableau.

3.1.1. Construção do Primeiro Tableau

O primeiro passo é construir uma pequena tabela. O número de linhas será o número
de restrições mais quatro. Assim, este problema tem uma tabela de 7 linhas. O número de
colunas é igual ao número de variáveis mais quatro, ou seja, neste caso o tableau terá 9
colunas. O aspecto do primeiro tableau deve ser:

80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 6 1 0 0 24
0 XS2 4 2 0 1 0 16
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Na primeira linha, temos a contribuição de cada variável para a função objetivo, sendo
que XS1 a XS3 em nada contribuem, obviamente (em outras palavras, nesta linha é indicado o
coeficiente na função objetivo da variável representada na coluna). Observe os valores 80, 60,
0, 0 e 0.

A segunda linha é basicamente uma linha de título, contendo os nomes das variáveis e
algumas outras informações. A primeira coluna, cj, indica a contribuição de cada variável na
solução (variáveis da solução básica) para o valor da função objetivo. No caso, as variáveis
na solução representada são as variáveis de folga (XS1 a XS3), indicadas na segunda coluna, e
nada contribuem na função objetivo (o cj de cada uma delas é 0 - o valor é uma cópia do valor
que está sobre a variável na primeira linha). É importante lembrar que estas variávies estão aí
porque as variáveis XA e XB foram escolhidas como "solução não-básica" e valem zero.

2008_SI_-_PesquisaOperacional_I_-_o2007 54
Pesquisa Operacional 6
Atualização: 12/03/2008

Ainda na segunda linha, aparecem os nomes das variáveis da função objetivo e


restrições, além da coluna bj, que representa o lado direito das equações, ou seja, o "número
depois do igual" nas restrições da modelagem matemática. Finalmente, há a coluna bj/aij, que
será usada durante o cálculo do Simplex. Vale lembrar que em cada tableau calculado do
Simplex é possível visualizar imediatamente a solução representatada através da coluna
"variáveis na solução" e da coluna "bj". O valor da coluna bj é o valor da variável na coluna
"variáveis na solução" que estiver na mesma linha que ele. Assim, por exemplo, na linha 3 da
tabela, a "variável na solução" é X1 e o valor de bj é 24. Isso significa que X1 = 24 nesta
solução e, da mesma forma, X2 = 16 e X3 = 3. As variáveis que não aparecem na coluna
"variáveis na solução" (no caso, XA e XB) valem 0 (zero).

Nas linhas seguintes temos os coeficientes de cada variável, retirados diretamente do


modelo matemático, sendo que cada linha é relativa a uma restrição. Note que, como as
variáveis na solução são as variáveis de folga, o valor da coluna bj indica os recursos
disponíveis, ociosos, relativo a cada uma das variáveis de folga.

Finalmente, as duas últimas linhas. As linhas Z e C-Z são também usadas no cálculo.
A idéia é indicar na linha Z quanto se retira da função objetivo por aumentar uma unidade
desta variável. Já a linha CZ indica quanto se acrescenta na função objetivo por aumentar
uma unidade desta variável.

Antes de apresentar o primeiro passo do cálculo, é importante apresentar um fato:


observe que, nas colunas onde aparecem as variáveis que estão na solução básica (XS1 a XS3),
os coeficientes das restrições sempre são: 1 (um) quando a linha e coluna tem o mesmo nome
da variável representado e 0 (zero) nas outras.

Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 6 1 0 0 24
0 XS2 4 2 0 1 0 16
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Dito isto, é necessário iniciar o cáculo do Simplex, que se inicial com o cálculo da
linha Z. Para isso, são usadas as linhas relativas às variáveis na solução. O calculo a ser feito
é o seguinte: para a coluna XA, deve-se multiplicar, em cada linha de restrição, o valor do
coeficiente nesta coluna pelo cj da linha. Após a multiplicação, soma-se todos os resultados e
este é o valor de Z da coluna XA. Por exemplo: Z da coluna XA = 4*0 + 4*0 + 0*0 = 0.

Deve-se repetir o processo para todas as colunas de variáveis e para a coluna bj. O
resultado está apresentado na tabela seguinte:

2008_SI_-_PesquisaOperacional_I_-_o2007 55
Pesquisa Operacional 7
Atualização: 12/03/2008

Passo 1: multiplicando os elementos da linha j pelo valor de cj (indicação da operação dentro


dos parênteses, lembrando que a multiplicação é pelo valor cj da linha, mas no caso deste
primeiro tableau, os cj são todos zero)
Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 (* 0) 6 (* 0) 1 (* 0) 0 (* 0) 0 (* 0) 24 (* 0)
0 XS2 4 (* 0) 2 (* 0) 0 (* 0) 1 (* 0) 0 (* 0) 16 (* 0)
0 XS3 0 (* 0) 1 (* 0) 0 (* 0) 0 (* 0) 1 (* 0) 3 (* 0)
Linha Z
Linha C-Z

Passo 2: Somando os resultados coluna a coluna (resultado dentro dos parênteses)


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 (0) 6 (0) 1 (0) 0 (0) 0 (0) 24 (0)
0 XS2 4 (0) 2 (0) 0 (0) 1 (0) 0 (0) 16 (0)
0 XS3 0 (0) 1 (0) 0 (0) 0 (0) 1 (0) 3 (0)
Linha Z 0+0+0 0+0+0 0+0+0 0+0+0 0+0+0 0+0+0
Linha C-Z

Passo 3: Resultado da linha Z calculado


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 6 1 0 0 24
0 XS2 4 2 0 1 0 16
0 XS3 0 1 0 0 1 3
Linha Z 0 0 0 0 0 0
Linha C-Z

O cálculo da linha C-Z é mais simples: basta subtrair o valor de Z correspondente a


cada variável do coeficiente da variável na função objetivo (Linha C):

Passo 4: Calculando C-Z


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 6 1 0 0 24
0 XS2 4 2 0 1 0 16
0 XS3 0 1 0 0 1 3
Linha Z 0 0 0 0 0 0
Linha C-Z 80-0 60-0 0-0 0-0 0-0

2008_SI_-_PesquisaOperacional_I_-_o2007 56
Pesquisa Operacional 8
Atualização: 12/03/2008

Passo 5: C-Z calculado


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 6 1 0 0 24
0 XS2 4 2 0 1 0 16
0 XS3 0 1 0 0 1 3
Linha Z 0 0 0 0 0 0
Linha C-Z 80 60 0 0 0

Agora o tableau está completo, valendo ressaltar que o valor no cruzamento da coluna
bj com a Linha Z representa o valor da função objetivo para a solução atual. Mas como
saber se esta solução, na qual XA=0 e XB=0, é uma solução ótima?

Bem, a linha C-Z indica o quanto é possível aumentar na função objetivo com o
acréscimo de uma unidade em uma dada variável; assim, enquanto houver valores positivos
nesta linha, ainda não se chegou à solução ótima. A solução ótima terá sido encontrada
quando todos os valores na linha C-Z forem nulos (zero) ou negativos, indicando que não é
mais possível melhorar o valor da função objetivo. Assim, a regra é: "Quando todos os
valores da linha C-Z forem nulos ou negativos, foi atingida a solução ótima".

No caso acima, há valores positivos em duas colunas: na coluna do XA e do XB,


indicando que ainda é possível melhorar a função objetivo, aumentando os valores de XA e
XB (atualmente iguais a zero)

3.1.2. Construção do Segundo Tableau

Como dito antes, a idéia do Simplex é procurar qual a combinação de variáveis que
devem ser iguais a zero para que a função objetivo seja maximizada. Como determinado no
passo anterior, é necessário aumentar uma ou mais unidades em XA ou XB para que o valor da
função objetivo cresça. Se uma destas variáveis (que vale zero) deixará de valer zero, é
necessário tornar zero o valor de alguma outra variável.

Em outras palavras, é preciso tomar duas decisões:

1) Uma variável não-básica que se tornará uma variável da solução básica (entra na
solucão, ficará com valor diferente de zero).
2) Uma variável da solução básica que se tornará uma variável não-básica (sai da
solução, ficará com valor igual a zero).

O primeiro problema é de simples solução: a variável que entra na solução básica é


aquela cujo valor de C-Z é o mais alto (pois é aquela que mais contribui com o aumento da
função objetivo). No caso deste problema, essa variável é a XA, que apresenta um incremento
de 80 por unidade na função objetivo.

2008_SI_-_PesquisaOperacional_I_-_o2007 57
Pesquisa Operacional 9
Atualização: 12/03/2008

O segundo problema já é um pouco mais complicado, e é agora que a coluna bj/aij


apresenta sua função. Para o cálculo, divide-se o bj de cada linha pelo coeficiente da coluna
da variável que entra na solução (no caso, XA). Considerando que bj é a quantidade de um
dado recurso disponível e aij é a quandidade deste recurso necessária para cada unidade da
variável que vai entrar, a idéia é procurar qual das linhas é mais restritiva. No nosso caso,
buscamos a restrição que limita mais a produção.

Em outras palavras, buscamos o menor valor de bj/aij. A linha que tiver o menor
valor nesta coluna, indicará a variável que sai (veja na coluna Variáveis na Solução).

Passo 6: Calculando bj/aij


Linha C 80 60 0 0 0 Linha
cj Variáveis na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 4 6 1 0 0 24 24/4
0 XS2 4 2 0 1 0 16 16/4
0 XS3 0 1 0 0 1 3 3/0
Linha Z 0 0 0 0 0 0
Linha C-Z 80 60 0 0 0
| |
Variável que Entra Valor de bj

Passo 7: Com bj/aij, identificada variável que sai (menor valor maior que zero da coluna bj/aij)
Linha C 80 60 0 0 0 Linha
cj Variáveis na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 4 6 1 0 0 24 6
0 XS2 4 2 0 1 0 16 4
0 XS3 0 1 0 0 1 3 ∫
Linha Z 0 0 0 0 0 0
Linha C-Z 80 60 0 0 0
| |
Variável que Entra Valor de bj

Ou seja, como o menor valor de bj/aij é 4, a variável que sai é a XS2, entrando a
variável XA em seu lugar. A linha da variável que sai recebe o nome de "linha principal" e o
elemento no cruzamento da coluna da variável que entra com a linha principal é chamado de
"elemento pivô", sendo que neste caso este elemento vale 4.

Agora, XS2 deve ser substituído por XA (lembrando de substituir cj pelo coeficiente da
variável que entra na função objetivo, no caso, o 80 que está sobre o XA), além de apagar
todos os valores da coluna bj/aij, das linhas Z e C-X e, em seguida, será necessário recalcular
todas as linhas de restrição do tableau. O objetivo é conseguir que a propriedade de existir "1"
na célula do cruzamento da variável na solução com sua coluna e "0" nas células de

2008_SI_-_PesquisaOperacional_I_-_o2007 58
Pesquisa Operacional 10
Atualização: 12/03/2008

cruzamento da variável na solução com as colunas das outras variáveis na solução. Para isso,
o primeiro passo é dividir todos os elementos da linha principal pelo elemento pivô, fazendo
aparecer um "1" no cruzamento da linha da variável que entrou na solução (XA) com a coluna
da variável (no caso, XA):

Passo 8: Recalculando a linha principal


Linha C 80 60 0 0 0 Linha
cj Variáveis na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 4 6 1 0 0 24
80 XA 4/4 2/4 0/4 1/4 0/4 16/4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Passo 9: Linha principal recalculada - note que na linha/coluna XA, a célula vale 1.
Linha C 80 60 0 0 0 Linha
cj Variáveis na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 4 6 1 0 0 24
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

O passo seguinte é recalcular as outras linhas para que as outras linhas da coluna XA
valham 0 (zero). Neste caso, as outras linhas são referentes às variáveis XS1 e XS3.

Recalculando XS1:

Primeiramente, determina-se o pivo da linha da variável XS1, que é o cruzamento da


linha de XS1 com a coluna da variável que está entrando, no caso, XA. No caso, este pivô
também vale 4.

Passo 10: Pivô da linha da variável XS1


Linha C 80 60 0 0 0 Linha
cj Variáveis na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 4 6 1 0 0 24
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

2008_SI_-_PesquisaOperacional_I_-_o2007 59
Pesquisa Operacional 11
Atualização: 12/03/2008

A idéia é, então, subtrair de cada elemento da linha XS1 o valor do pivô desta linha
(pivô = 4) multiplicado pelo elemento correspondente da linha principal, como indicado no
tableau abaixo:

Passo 11: Recalculando a linha da variável XS1


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 4 -4*1 6 -4*1/2 1 -4*0 0 -4*1/4 0 -4*0 24 -4*4
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Passo 12: Linha da variável XS1 recalculada


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 0 4 1 -1 0 8
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Recalculando XS3:

Novamente, determina-se o pivo da linha, agora da variável XS3, que é o cruzamento


da linha de XS3 com a coluna da variável que está entrando, no caso, XA. No caso, este pivô
vale 0.

Passo 13: Determinação do pivô da linha XS2


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na
Solução
0 XS1 0 4 1 -1 0 8
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Mais uma vez, subtrai-se de cada elemento da linha XS3 o valor do pivô desta linha
multiplicado pelo elemento correspondente da linha principal, como indicado abaixo:

2008_SI_-_PesquisaOperacional_I_-_o2007 60
Pesquisa Operacional 12
Atualização: 12/03/2008

Passo 14: Recalculando a linha da variável XS3


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 0 4 1 -1 0 8
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 -0*1 1 -0*1/2 0 -0*0 0 -0*1/4 1 -0*0 3 -0*4
Linha Z
Linha C-Z

Passo 15: Linha da variável XS3 recalculada


Linha C 80 60 0 0 0 Linha
cj Variáveis XA XB XS1 XS2 XS3 bj bj / aij
na Solução
0 XS1 0 4 1 -1 0 8
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Agora o tableau está atualizado e é possível recalcular as linhas Z e C-Z:

Passo 16: Calculando a nova linha Z


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 0 (*0) 4 (*0) 1 (*0) -1 (*0) 0 (*0) 8 (*0)
80 XA 1(*80) 1/2(*80) 0 (*80) 1/4(*80) 0 (*80) 4 (*80)
0 XS3 0 (*0) 1 (*0) 0 (*0) 0 (*0) 1 (*0) 3 (*0)
Linha Z 0+80+0 0+40+0 0+0+0 0+20+0 0+0+0 0+320+0
Linha C-Z

Passo 17: Linha Z calculada e calculando a nova linha C-Z


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 0 4 1 -1 0 8
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z 80 40 0 20 0 320
Linha C-Z 80-80 60-40 0-0 0-20 0-0

2008_SI_-_PesquisaOperacional_I_-_o2007 61
Pesquisa Operacional 13
Atualização: 12/03/2008

Passo 18: Tableau 2 finalizado


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 0 4 1 -1 0 8
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z 80 40 0 20 0 320
Linha C-Z 0 20 0 -20 0

3.1.3. Construção do Terceiro Tableau

Para a construção do terceiro tableau, novamente será necessário identificar a variável


que vai entrar na solução e a variável que vai sair da solução. O C-Z mais alto é agora o da
variável XB, sendo ela a entrar na solução. Para identificar a variável que sai, é necessário
calcular os bj/aij de cada linha:

Passo 19: Indicação da variável que entra e variável que sai


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
0 XS1 0 4 1 -1 0 8 8/4 = 2
80 XA 1 1/2 0 1/4 0 4 4/0,5 = 8
0 XS3 0 1 0 0 1 3 3/1 = 3
Linha Z 80 40 0 20 0 320
Linha C-Z 0 20 0 -20 0

O menor valor de bj/aij foi 2, na linha de XS1. Assim, é esta a variável que sai, como
indicado no tableau anterior. O pivô da linha principal é o valor 4, também indicado.

Os próximos passos são a substituição da variável, ajuste do cj, eliminação dos


conteúdos da coluna bj/aij e das linhas Z e C-Z, seguindo-se o recálculo da linha principal,
dividindo todos seus elementos pelo valor do pivô (pivô = 4):

Passo 20: Cálculo da nova linha principal


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0/4=0 4/4=1 1/4 -1/4 0/4=0 8/4=2
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

2008_SI_-_PesquisaOperacional_I_-_o2007 62
Pesquisa Operacional 14
Atualização: 12/03/2008

Passo 21: Linha principal já recalculada


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 1/2 0 1/4 0 4
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

O "1" no cruzamento XB já apareceu. Agora é preciso ajustar as outras linhas para


que os "0" apareçam nas outras linhas desta coluna. Como o pivô da linha XA é 1/2, a linha
XA será recalculada subtraindo de cada elemento dela o seu pivô multiplicado pelo elemento
da linha principal:

Passo 22: Recalculando a linha XA


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 -1/2*0 1/2 -1/2*1 0 -1/2*1/4 1/4 -1/2*-1/4 0 -1/2*0 4 -1/2*2
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

Passo 23: Linha XA recalculada


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 0 -1/8 3/8 0 3
0 XS3 0 1 0 0 1 3
Linha Z
Linha C-Z

2008_SI_-_PesquisaOperacional_I_-_o2007 63
Pesquisa Operacional 15
Atualização: 12/03/2008

Na linha XS3, o pivô é o 1. A linha XS3 será recalculada subtraindo de cada elemento
dela o seu pivô multiplicado pelo elemento da linha principal:

Passo 24: Recalculando a linha XS3


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 0 -1/8 3/8 0 3
0 XS3 0 -1*0 1 -1*1 0 -1*1/4 0 -1*-1/4 1 -1*0 3 -1*2
Linha Z
Linha C-Z

Passo 25: Linha XS3 recalculada


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 0 -1/8 3/8 0 3
0 XS3 0 0 -1/4 1/4 1 1
Linha Z
Linha C-Z

Agora o tableau está atualizado e é possível recalcular a linha Z e C-Z:

Passo 26: Calculando a nova linha Z


Linha C 80 60 0 0 0 Linha
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 (*60) 1 (*60) 1/4(*60) -1/4(*60) 0 (*60) 2 (*60)
80 XA 1 (*80) 0 (*80) -1/8(*80) 3/8 (*80) 0 (*80) 3 (*80)
0 XS3 0 (*0) 0 (*0) -1/4(*0) 1/4 (*0) 1 (*0) 1 (*0)
Linha Z 0+80+0 60+0+0 15-10+0 -15+30+0 0+0+0 120+240+0
Linha C-Z

Passo 27: Calculando a nova linha C-Z


Linha C 80 60 0 0 0 Linh
a
cj Var. na XA XB XS1 XS2 XS3 bj bj /
Solução aij
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 0 -1/8 3/8 0 3
0 XS3 0 0 -1/4 1/4 1 1
Linha Z 80 60 5 15 0 360
Linha C-Z 80-80 60-60 0-5 0-15 0-0

2008_SI_-_PesquisaOperacional_I_-_o2007 64
Pesquisa Operacional 16
Atualização: 12/03/2008

Passo 28: Tableau final


Linha 80 60 0 0 0 Linha
C
cj Var. na XA XB XS1 XS2 XS3 bj bj / aij
Solução
60 XB 0 1 1/4 -1/4 0 2
80 XA 1 0 -1/8 3/8 0 3
0 XS3 0 0 -1/4 1/4 1 1
Linha Z 80 60 5 15 0 360
Linha 0 0 -5 -15 0
C-Z

Como na linha C-Z não há qualquer valor maior que zero, esta é a solução ótima. A
solução é indicada pelas variáveis na coluna "Variáveis na Solução" e seus respectivos
valores estão na coluna bj, sendo que as variáveis que não estão em nenhuma linha da tabela
têm, por definição, valor igual a zero.

Assim, a solução ótima para o problema é:

XA = 3
XB=2
XS1 = 0
XS2 = 0
XS3 = 1

O que significa que serão produzidas 3 unidades de A, 2 unidades de B, esgotando as


horas de máquina 1 e 2 disponíveis, mas não atendendo completamente a demanda de B, já
que o valor de XS3 é 1 (quantas unidades faltaram para atender a demanda máxima de B).
Também é possível observar o valor final da função objetivo, no cruzamento da coluna bj
com a linha Z: 360.

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 65
Pesquisa Operacional 1
Atualização: 12/03/2008

Unidade 2: Método Simplex e Ferramentas Computacionais


Tópico 7: Artifícios de Modelagem e Variáveis Artificiais
Prof. Daniel Caetano

Objetivo: Apresentar artifícios para a resolução de alguns problemas de modelagem.

Introdução

Até o presente momento foram modelados e resolvidos problemas considerados "bem


comportados", isto é, que de início já possuiam praticamente todas as características para que
funcionem bem com o Método Simplex. Adicionalmente, já foi apresentada a maneira de
lidar com problemas em que há restrições do tipo ü, que foram transformadas em restrições
do tipo "=".

Entretanto, outras situações podem surgir: restrições com restrições do tipo maior ou
igual, igualdades, problemas de minimização, "lado direito" de eqüações negativo... estas
situações igualmente vão exigir que algum "truque" seja usado, similar ao que aconteceu com
as variáveis de folga nas restrições do tipo ü.

Nesta aula serão apresentados alguns destes truques, em que situações eles são usados
e a forma de aplicá-los.

1. Lado Direito das Restrições Negativo

Considere que todas as variáveis de uma restrição sejam movidas o lado esquerdo do
sinal da equação (= ou ü ou ¶) e todos os números (constantes) para o lado direito do sinal;
em geral, haverá apenas um número (uma constante) solitária do lado direito. Isto é o que se
chama de "lado direito". Este é o valor que não poderá ser negativo e, se for, uma medida
precisará ser tomada.

Apenas para elucidar o conceito de "lado direito", segue um exemplo abaixo:

xA + xB + 7 = yA + yB

||

xA + xB - yA - yB = -7

Neste caso, "-7" é o lado direito... e, neste caso, ele está menor que zero e não será
possível utilizar esta equação, neste formato, para o Simplex. Mas por que não é possível? Na
verdade, isso é uma conseqüência direta da condição de não negatividade e da maneira com
que se determina a solução incial; mas, simplificadamente, pode-se dizer simplesmente que a
coluna bj (o lado direito das restrições) nunca pode conter um número negativo, porque ela

2008_SI_-_PesquisaOperacional_I_-_o2007 66
Pesquisa Operacional 2
Atualização: 12/03/2008

representa os recursos que estão sobrando, ou seja, os recursos disponíveis... e não faz sentido
falar em recursos disponíveis negativos!

Assim, quando uma situação deste tipo ocorrer, será necessária uma correção; esta
correção é simples: basta multiplicar a equação ou inequação por -1. Observe equação
apresentada anteriormente:

xA + xB - yA - yB = -7

O lado direito tem o valor negativo -7, e isso não é aceitável. Neste caso, basta
multiplicar a restrição toda por -1, invertendo todos os sinais e tornando o lado direito
positivo:

[ xA + xB - yA - yB = -7 ] * (-1) => - xA - xB + yA + yB = 7

Mais alguns exemplos seguem. Se, ao modelar, houver equações do seguinte tipo:

5XA - 6XB ü - 17
2XA + 1XB ¶ - 3
- 4XA - 4XB = - 16

Basta multiplicar todas as restrições por -1, lembrando de inverter o sinal das
desigualdades:

[ 5XA - 6XB ü - 17 ] *(-1) => -5XA + 6XB ¶ +17


[ 2XA + 1XB ¶ - 3 ] *(-1) => -2XA - 1XB ü + 3
[- 4XA - 4XB = - 16 ] *(-1) => +4XA + 4XB = + 16

É importante lembrar que apenas o lado direito não pode ser negativo. Os
coeficientes das variáveis podem.

2. Restrições do Tipo ¶

Este tipo de restrição é bastante comum em problemas de minimização, embora


apareça também em alguns problemas de maximização.

Assim como foi necessário fazer modificações nas restrições do tipo ü , com as
variáveis de folga, no caso das restrições do tipo ¶ também será necessário algum tipo de
ajuste.

Considere, por exemplo, a restrição abaixo:

4XA + 10XB ¶ 45

2008_SI_-_PesquisaOperacional_I_-_o2007 67
Pesquisa Operacional 3
Atualização: 12/03/2008

Qualquer valor de XA e XB que tornem a soma maior ou igual a 45 terá resolvido o


problema. Por exemplo, substituindo os valores XA=4 e XB=3:

4*4 + 10*3 = 16 + 30 = 46 que é maior ou igual a 45.

Assim, pode-se dizer que XA=4 e XB=3 é uma solução possível para o problema. Mas,
quando se transforma a inequação em uma equação, o problema surge:

4XA + 10XB = 45

Esta equação não mais admite XA=4 e XB=3 como resposta (porque 46 não é igual a
45), significando que modelagem, desta forma, não é mais capaz de representar o problema
original... e, devido ao objetivo final - que é o de resolver o problema real - não se pode
realizar mudanças na modelagem que a torne incapaz de representar o problema! A solução
aqui, similar à solução para a restrição do tipo ü, é usar uma variável a mais, só que agora ela
aparecerá do lado direito:

4XA + 10XB ¶ 45 => 4XA + 10XB = 45 + XE

Sempre será possível escolher um valor de XE que torne a igualdade verdadeira. Esta
variável é chamada de variável de excesso, que pode ser encarada como uma variável de folga
negativa, ou uma "variável de falta":

4XA + 10XB = 45 + XE => 4XA + 10XB -XE = 45

Infelizmente isso não resolve totalmente o problema; isso ocorre porque, no momento
de terminar a solução inicial, quando as variáveis de decisão (XA e XB, no caso) serão
consideradas iguais a zero, será encontrado um valor negativo para a variável XE, o que não é
admissível. Observe o que ocorre ao considerar XA = XB = 0:

4XA + 10XB -XE = 45 => 4*0 + 10*0 -XE = 45 => -XE = 45 => XE = -45

XE não pode ter um valor negativo! Como resolver este novo problema? Neste caso o
truque é inserir outra variável e indicar que a variável de excesso também faz parte da
solução não-básica, ou seja, que XA = XB = XE = 0:

4XA + 10XB -XE + A1 = 45 => 0 + A1 = 45 => A1 = 45 OK!

Entretanto, esta variável a ser inserida não tem qualquer tipo de significado físico, ela
é um artifício matemático para que se possa encontrar uma solução inicial simples. Por esta
razão, este tipo de variável é chamada de variável artificial. Estas variáveis terão uma
implicação na resolução do Simplex, mas este assunto não será estudado a fundo nesta
disciplina.

2008_SI_-_PesquisaOperacional_I_-_o2007 68
Pesquisa Operacional 4
Atualização: 12/03/2008

3. Restrições do Tipo =

Aparentemente, como se deseja restrições de igualdade, a impressão que se tem


inicialmente é que, ao encontrar uma restrição de igualdade, nada deve ser feito. Entretanto,
isso não é verdade.

Isso ocorre porque é necessário calcular uma solução inicial viável para iniciar o
Simplexe e, observe o que ocorre quando se zera os valores as variáveis de decisão (XA e XB,
neste caso) em uma restrição de igualdade:

4XA + 4XB = 16 => 4*0 + 4*0 = 16 => 0 = 16 !?!?!?!?

Não é preciso muito esforço para perceber que este resultado é absurdo. Assim, para
possibilitar a fácil determinação de uma solução inicial - sem causar este absurdo, basta
inserir uma variável artificial nas restrições do tipo igualdade, ou seja:

4XA + 4XB + A1 = 16 => 4*0 + 4*0 + A1 = 16 => 0 = 16 - A1 => A1 = 16 OK!

Mais uma vez, o uso de variáveis artificiais traz implicações no Simplex.

4. Implicações dos Artifícios de Modelagem na Função Objetivo

Assim como a Função Objetivo é modificada na forma padrão com coeficientes 0 nas
variáveis de folga acrescentadas ao modelo, também as variáveis de excesso entrarão na
Função Objetivo com coeficiente zero, pela mesma razão anterior: para que todas as variáveis
apareçam na Função Objetivo.

Mas, e as variáveis artificiais? Bem, como o próprio nome diz, estas variáveis não
fazem parte do problema, são apenas um artifício para facilitar o cálculo de uma solução
inicial de forma simples, para que possamos dar partida no Simplex. Por esta razão, é preciso
garantir no método Simplex que estas variáveis sejam retiradas da base.

Para fazer isso, existem dois mecanismos:

1) O Método do M grande, onde as variáveis artificiais entram "prejudicando" a


Função Objetivo na proporção de um valor M maior que qualquer outro valor existente no
problema;
2) O Método das Duas Fases, sendo que na primeira fase se substitui a função
objetivo pela minimização da soma de todas as variáveis artificiais e, ao obter o resultado
final, volta-se à função objetivo original e, finalmente, resolve-se o problema.

O primeiro método pode ser visto no livro, e envolve algumas mudanças no


procedimento de cálculo. O segundo método é um pouco mais longo (pois envolve duas

2008_SI_-_PesquisaOperacional_I_-_o2007 69
Pesquisa Operacional 5
Atualização: 12/03/2008

soluções seqüenciais), mas o procedimento não será diferente do que foi visto no cálculo do
Simplex tradicional. Ambos os métodos fogem ao escopo deste curso.

4.1. Problemas de Minimização

Até agora, entretanto, nada foi dito sobre problemas de minimização. O método
Simplex parece resolver muito bem problemas de maximização, mas não há nada parecido
apra minimização? Na verdade, é possível alterar um pouco o procedimento do Simplex de
forma que sua sistemática minimize o valor da função objetivo. Entretanto, há uma
modificação simples que pode ser feita no problema para usar o mesmo procedimento que já
foi apresentado.

A idéia é, então, transformar o problema de minimização em um problema de


maximização que seja equivalente a ele. Isto é simples: basta multiplicar a função objetivo
por -1. Assim, é possível dizer que:

[MIN] 4XA + 4XB => [MAX] - 4XA - 4XB

É importante ressaltar que os valores determinados para as variáveis de decisão, após


este ajuste, estarão corretos ao final do processo. Nenhuma modificação precisará ser feita.
Entretanto, o valor da função objetivo (que pode ser visto no cruzamento da Linha Z com a
coluna bj do tableau) estará invertido, ou seja, é preciso multiplicá-lo por -1 para obter o valor
correto da função objetivo original.

Exercício L3

Modele e apresente na forma padrão (pronto para o Simplex) o seguinte problema


abaixo:

1) Para realizar a instalação de terminais de computador, uma empresa pode usar os


esforços de dois funcionários: Pedro e João. O salário de Pedro é R$ 25,00 por hora e o de
João é de R$ 40,00 por hora. Pedro consegue instalar um terminal em meia hora (0,5 hora) e
João em 15 minutos (0,25 hora). É necessário instalar um total de 40 terminais, sendo que
Pedro deve instalar pelo menos 10 deles. Sabe-se que nenhum dos dois funcionários pode
trabalhar mais do que 8 horas em um dia. Deseja-se minimizar o custo total da instalação.

1. Modele matematicamente o problema acima.


2. Coloque o problema na forma padrão, pronto para ser resolvido pelo Simplex.

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 70
Pesquisa Operacional I 1
Primeiro Semestre de 2007

Notas da Aula 09: Usando o Método Simplex das Duas Fases


Prof. Daniel Caetano

Objetivo: Apresentar o Método Simplex com Duas Fases para resolver problemas
com variáveis artificiais.

Introdução

Nas aulas anteriores, foram apresentados diversos artifícios matemáticos para que
diversos tipos de problemas possam ser modelados e resolvidos pelo algoritmo Simplex.

Entretanto, alguns daqueles artifícios provocavam o aparecimento das chamadas


variáveis artificiais, que não possuem qualquer significado físico e precisam ser totalmente
eliminadas de um problema para que ele seja resolvido a contento.

Infelizmente, o Médoto Simplex não elimina naturalmente estas variáveis, então


precisaremos fazer um pequeno truque, que é o de executar duas vezes o Simplex: a primeira
vez com uma função objetivo que visa eliminar as variáveis artificiais... ao fim desta fase,
recuperamos a função objetivo original e continuamos o problema com a mesma.

1. O Modelo Matemático na Forma Padrão

Suponhamos que a modelagem de um problema já tenha sido resolvida, e o resultado


seja o representado abaixo:

Função Objetivo:
[MAX] 4 * xA + 3 * xB

Sujeito a:
2 * xA + 1 * xB = 15
1 * xB ¶ 4

Como visto anteriomente, as restrições do tipo "=" ganham uma variável artificial e as
restrições do tipo "¶" ganham uma variável de excesso e uma variável artificial. Assim, o
modelo pode ser reescrito como:

F.O.: [MAX] 4 * xA + 3 * xB
S.A.: 2 * xA + 1 * xB + 1 * A1 = 15
1 * xB - 1 * xE + 1 * A2 = 4

O que, colocando finalmente na forma padrão, fica:

2008_SI_-_PesquisaOperacional_I_-_o2007 71
Pesquisa Operacional I 2
Primeiro Semestre de 2007

F.O.: [MAX] 4 * xA + 3 * xB + 0 * xE + 0 * A1 + 0 * A2
S.A.: 2 * xA + 1 * xB + 0 * xE + 1 * A1 + 0 * A2 = 15
0 * xA + 1 * xB - 1 * xE + 0 * A1 + 1 * A2 =4

2. Eliminando as Variáveis Artificiais (Primeira Fase)

Bem, como o problema apresenta variáveis artificiais, o primeiro passo é eliminá-las,


ou seja, encontrar uma solução viável em que tais variáveis não estejam na solução. Mas
como fazer isso? Pensemos assim: se o valor das variáveis artificiais fosse 0 (zero), isso não
seria o mesmo que se elas não estivessem na solução? Sim, seria! Então o truque é achar uma
solução em que elas valham zero!

Para conseguir isso, vamos colocar a função objetivo atual de lado por um momento.
Em seu lugar, usaremos esta outra função objetivo:

F.O.: [MIN] 1 * A1 + 1 * A2

Observe que o menor valor possível para esta função objetivo é zero, considerando
que nenhuma variável pode ter valor negativo, quando ambas as variáveis A1 e A2 valerem
zero. Inicialmente vamos inverter o sinal desta função objetivo, para tornar o nosso problema
um problema de maximização:

F.O.: [MAX] - 1 * A1 - 1 * A2

E vamos acrescentar as variáveis faltantes: xA, xB e xE:

F.O.: [MAX] 0 * xA + 0 * xB + 0 * xE - 1 * A1 - 1 * A2

Colocando esta nova função objetivo juntamente com as restrições originais, temos o
modelo matemático a ser resolvido na primeira fase:

F.O.: [MAX] 0 * xA + 0 * xB + 0 * xE - 1 * A1 - 1 * A2
S.A.: 2 * xA + 1 * xB + 0 * xE + 1 * A1 + 0 * A2 = 15
0 * xA + 1 * xB - 1 * xE + 0 * A1 + 1 * A2 =4

Sendo a solução inicial XA=XB=XE=0, A1=15 e A2=4.

2.1. Construção do Primeiro Tableau

O primeiro passo é construir o primeiro Tableau. Lembremos que o número de linhas


será o número de restrições mais quatro. Assim, em nosso problema teremos uma tabela de 6
linhas. O número de colunas é igual ao número de variáveis mais quatro, ou seja, em nosso
caso, o tableau terá 9 colunas. O aspecto do primeiro tableau deve ser:

2008_SI_-_PesquisaOperacional_I_-_o2007 72
Pesquisa Operacional I 3
Primeiro Semestre de 2007

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 A1 2 1 0 1 0 15
0 A2 0 1 -1 0 1 4
Linha Z
Linha C-Z

Calculemos as linhas Z e C-Z:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
-1 A1 2 1 0 1 0 15
-1 A2 0 1 -1 0 1 4
Linha Z -2 -2 1 -1 -1 -19
Linha C-Z 2 2 1 0 0

A variável que entra pode ser tanto a xA como a xB, dado que ambas possuem o maior
valor. Escolheremos aqui a variável xA, e em seguida calcularemos a coluna bj/aij.

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
-1 A1 2 1 0 1 0 15 7,5
-1 A2 0 1 -1 0 1 4 inf.
Linha Z -2 -2 1 -1 -1 -19
Linha C-Z 2 2 1 0 0

Como 7,5 é menor que infinito, A1 é a variável que sai:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
-1 A1 2 1 0 1 0 15 7,5
-1 A2 0 1 -1 0 1 4 inf.
Linha Z -2 -2 1 -1 -1 -19
Linha C-Z 2 2 1 0 0

2008_SI_-_PesquisaOperacional_I_-_o2007 73
Pesquisa Operacional I 4
Primeiro Semestre de 2007

2.2. Construção do Segundo Tableau

Primeiramente copiamos a maior parte das informações, menos os dados e a variável


que saiu:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução

-1 A2
Linha Z
Linha C-Z

Acrescentamos a variável que entrou no lugar da que saiu, preenchendo também o cj,
usando para isso o valor que está acima da variável que entra na tabela:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA
-1 A2
Linha Z
Linha C-Z

Agora preencheremos a linha da variável que entrou. Note que a coluna da variável
que entrou deve ter "1" na linha onde esta variável aparece e "0" em todas as outras linhas:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1
-1 A2 0
Linha Z
Linha C-Z

No tableau anterior, é possível verificar que, na posição onde preciso de "1" (na linha
onde entrou XA), tenho um "2":

Primeiro Tableau
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
-1 A1 2 1 0 1 0 15 7,5

2008_SI_-_PesquisaOperacional_I_-_o2007 74
Pesquisa Operacional I 5
Primeiro Semestre de 2007

Para que o valor "2" vire "1", é preciso dividir esta linha toda por 2:

XA XB XE A1 A2 bj
1 1/2 0 1/2 0 15/2

E agora posso colocá-la no segundo tableau:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 1/2 0 1/2 0 15/2
-1 A2 0
Linha Z
Linha C-Z

Para a outra linha, entretanto, precisamos de um "0"... e no primeiro tableau já


tínhamos um "0"! Basta então copiar a linha:

Primeiro Tableau
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
-1 A2 0 1 -1 0 1 4 inf.

Copiando para o segundo Tableau, temos:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 1/2 0 1/2 0 15/2
-1 A2 0 1 -1 0 1 4
Linha Z
Linha C-Z

Calculemos agora as linhas Z e C-Z:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 1/2 0 1/2 0 15/2
-1 A2 0 1 -1 0 1 4
Linha Z 0 -1 1 0 -1 -4
Linha C-Z 0 1 -1 -1 0

Assim, é possível verificar qual é a variável que entra: XB. Calculando a coluna bj/aij:

2008_SI_-_PesquisaOperacional_I_-_o2007 75
Pesquisa Operacional I 6
Primeiro Semestre de 2007

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 1/2 0 1/2 0 15/2 15
-1 A2 0 1 -1 0 1 4 4
Linha Z 0 -1 1 0 -1 -4
Linha C-Z 0 1 -1 -1 0

Como 4 é o menor valor, então A2 é a variável que sai:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 1/2 0 1/2 0 15/2 15
-1 A2 0 1 -1 0 1 4 4
Linha Z 0 -1 1 0 -1 -4
Linha C-Z 0 1 -1 -1 0

2.3. Construção do Terceiro Tableau

Primeiramente copiamos a maior parte das informações, menos os dados e a variável


que saiu:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA

Linha Z
Linha C-Z

Acrescentamos a variável que entrou no lugar da que saiu, preenchendo também o cj,
usando para isso o valor que está acima da variável que entra na tabela:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA
0 XB
Linha Z
Linha C-Z

2008_SI_-_PesquisaOperacional_I_-_o2007 76
Pesquisa Operacional I 7
Primeiro Semestre de 2007

Agora preencheremos a linha da variável que entrou. Note que a coluna da variável
que entrou deve ter "1" na linha onde esta variável aparece e "0" em todas as outras linhas:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 0
0 XB 1
Linha Z
Linha C-Z

No tableau anterior, é possível verificar que, na posição onde preciso de "1" (na linha
onde entrou XB), já existe um "1"! Basta então copiar a linha:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 0
0 XB 0 1 -1 0 1 4
Linha Z
Linha C-Z

Para a outra linha, entretanto, precisamos de um "0"... mas no tableau anterior temos o
valor "1/2". Será, então, necessário dividir a linha da variável que entrou por "-1/2" e
posteriormente somá-la à linha que entrará na posição de XA:
Do Segundo Tableau
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 1/2 0 1/2 0 15/2 15

Linha da variável que entrou no Tableau atual:


cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XB 0 1 -1 0 1 4

Linha da variável que entrou no Tableau atual multiplicada por -1/2...


XA XB XE A1 A2 bj bj / aij
0 -1/2 1/2 0 -1/2 -2

Somando com a linha do segundo Tableau:


XA XB XE A1 A2 bj bj / aij
1 0 1/2 1/2 -1/2 11/2

2008_SI_-_PesquisaOperacional_I_-_o2007 77
Pesquisa Operacional I 8
Primeiro Semestre de 2007

Agora basta copiar estes valores no tabelau atual:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 0 1/2 1/2 -1/2 11/2
0 XB 0 1 -1 0 1 4
Linha Z
Linha C-Z

Agora é só calcular as linhas Z e C-Z:

0 0 0 -1 -1 Linha
cj Variáveis XA XB XE A1 A2 bj bj / aij
na Solução
0 XA 1 0 1/2 1/2 -1/2 11/2
0 XB 0 1 -1 0 1 4
Linha Z 0 0 0 0 0 0
Linha C-Z 0 0 0 -1 -1

Pronto! Primeira fase terminada e, observe, na solução atual temos apenas as variáveis
XA e XB: A1 e A2 ficaram com valores zero!

Mas o problema acabou? Não! Terminamos apenas a primeira fase, que tinha objetivo
de eliminar as variáveis artificiais. Agora vamos para a segunda fase, que tem o objeito de
resolver, de fato, o problema original.

3. Resolvendo o Problema Modelado (Segunda Fase)

Para iniciar a segunda fase, podemos copiar o último tableau da primeira fase, mas
com algumas pequenas modificações:

1) A linha da função objetivo deve ser substituída pela função objetivo original,
F.O.: [MAX] 4 * xA + 3 * xB + 0 * xE + 0 * A1 + 0 * A2
Lembrando de corrigir os valores da coluna cj.
2) As colunas relativas a A1 e A2 podem ser eliminadas (já que não há sentido na volta
de tais variáveis à solução).
3) E, obviamente, os valores das linhas Z e C-Z devem ser apagados. Fazendo estas
modificações, temos:

2008_SI_-_PesquisaOperacional_I_-_o2007 78
Pesquisa Operacional I 9
Primeiro Semestre de 2007

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
4 XA 1 0 1/2 11/2
3 XB 0 1 -1 4
Linha Z
Linha C-Z

Este é o nosso primeiro tableau da segunda fase. Vamos calcular as linhas Z e C-Z:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
4 XA 1 0 1/2 11/2
3 XB 0 1 -1 4
Linha Z 4 3 -1 34
Linha C-Z 0 0 1

Pronto, pelo cálculo, determinamos que a variável que entra é a variável XE.
Calculemos a coluna bj/aij:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
4 XA 1 0 1/2 11/2 11
3 XB 0 1 -1 4 -4
Linha Z 4 3 -1 34
Linha C-Z 0 0 1

O menor valor, em princípio, é o -4. Entretanto, não posso considerar valores


negativos neste campo. Assim, o valor considerado será o 11 e a variável que sai é XA:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
4 XA 1 0 1/2 11/2 11
3 XB 0 1 -1 4 -4
Linha Z 4 3 -1 34
Linha C-Z 0 0 1

2008_SI_-_PesquisaOperacional_I_-_o2007 79
Pesquisa Operacional I 10
Primeiro Semestre de 2007

Assim, teremos o primeiro passo do próximo tableau:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
0 XE
3 XB
Linha Z
Linha C-Z

Na coluna XE, precisamos de 1 na linha de XE e 0 nas outras:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
0 XE 1
3 XB 0
Linha Z
Linha C-Z

Na linha que saiu, tínhamos 1/2 na posição em que precisamos de 1. Assim,


multiplicaremos a linha original inteira por 2, ao copiar para o novo tableau:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
0 XE 2 0 1 11
3 XB 0
Linha Z
Linha C-Z

Novamente, para a linha da variável XB precisamos de 0 na linha XE, mas no tableau


anterior temos -1 nesta posição. Para eliminar este -1, basta somar à linha anterior os valores
da linha da variável que entrou:

2008_SI_-_PesquisaOperacional_I_-_o2007 80
Pesquisa Operacional I 11
Primeiro Semestre de 2007

Linha do Tableau anterior


cj Variáveis XA XB XE bj bj / aij
na Solução
3 XB 0 1 -1 4 -4

Linha da variável que entrou no tableau atual


cj Variáveis XA XB XE bj bj / aij
na Solução
0 XE 2 0 1 11

Somando ambas...
XA XB XE bj
2 1 0 15

Copiando no tableau atual...


4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
0 XE 2 0 1 11
3 XB 2 1 0 15
Linha Z
Linha C-Z

Calculemos agora as linhas Z e C-Z:

4 3 0 Linha
cj Variáveis XA XB XE bj bj / aij
na Solução
0 XE 2 0 1 11
3 XB 2 1 0 15
Linha Z 6 3 0 45
Linha C-Z -2 0 0

Como todos os valores são negativos ou zero, está finalizado o problema, cuja solução
é XB = 15, XE = 11 e XA = 0, com valor da função objetivo igual a 45, o que pode ser
verificado que respeita as restrições do problema original:

Função Objetivo:
[MAX] 4 * xA + 3 * xB

Sujeito a:
2 * xA + 1 * xB = 15
1 * xB ¶ 4

2008_SI_-_PesquisaOperacional_I_-_o2007 81
Pesquisa Operacional I 12
Primeiro Semestre de 2007

4. Exercício L4

Resolva o Simplex modelado no exercício L3 (disponível em


http:/www.caetano.eng.br/aulas/fb/PO/ , no arquivo da aula 8):

F.O.: [MAX]-25*xP - 40*xJ - 0*xE1 - 0*xS1 - 0*xS2 - 0*a1 - 0*a2


S.A.: 2*xP + 4*xJ + 0*xE1 + 0*xS1 + 0*xS2 +1*a1 +0*a2 = 40
2*xP +0*xJ - 1*xE1 + 0*xS1 + 0*xS2 +0*a1 +1*a2 = 10
1*xP +0*xJ + 0*xE1 + 1*xS1 + 0*xS2 +0*a1 +0*a2 =8
0*xP 1*xJ + 0*xE1 + 0*xS1 + 1*xS2 +0*a1 +0*a2 =8

Entrega na próximas aula. Vale nota.

5. Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório, 2006.

2008_SI_-_PesquisaOperacional_I_-_o2007 82
Pesquisa Operacional I 1
Primeiro Semestre de 2007

Notas da Aula 10: Resolução da L4


Prof. Daniel Caetano

Objetivo: Resolver a quarta lista de exercícios, sedimentando o procedimento de


cálculo do Método Simplex em Duas Fases.

Resolução do Exercício L4

Resolva o Simplex modelado no exercício L3 (disponível em


http:/www.caetano.eng.br/aulas/fb/PO/ , no arquivo da aula 8):

F.O.: [MAX]-25*xP - 40*xJ - 0*xE1 - 0*xS1 - 0*xS2 - 0*a1 - 0*a2


S.A.: 2*xP + 4*xJ + 0*xE1 + 0*xS1 + 0*xS2 +1*a1 +0*a2 = 40
2*xP +0*xJ - 1*xE1 + 0*xS1 + 0*xS2 +0*a1 +1*a2 = 10
1*xP +0*xJ + 0*xE1 + 1*xS1 + 0*xS2 +0*a1 +0*a2 =8
0*xP 1*xJ + 0*xE1 + 0*xS1 + 1*xS2 +0*a1 +0*a2 =8

Resolução

a) Determinação da função objetivo e tableau da primeira fase

Como o problema apresenta variáveis artificiais, primeiramente temos que criar uma
função objetivo que proporcione sua eliminação. Como visto anteriormente, a função objetivo
que torna os valores das variáveis artificiais iguais a zero é, neste caso:

F.O.: [MIN] 0*xP + 0*xJ + 0*xE1 + 0*xS1 + 0*xS2 + 1*a1 + 1*a2

Ou, tornando o problema de maximização:

F.O.: [MAX] 0*xP + 0*xJ + 0*xE1 + 0*xS1 + 0*xS2 - 1*a1 - 1*a2

Considerando o problema originalmente modelado, porém usando a nova função


objetivo, e definindo inicialmente que XP = XJ = XE1 = 0, podemos montar o seguinte tableau:

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
-1 A1 2 4 0 0 0 1 0 40
-1 A2 2 0 -1 0 0 0 1 10
0 XS1 1 0 0 1 0 0 0 8
0 XS2 0 1 0 0 1 0 0 8
Z
C-Z

Calculando Z, C-Z e bj/aij temos o tableau completo:

2008_SI_-_PesquisaOperacional_I_-_o2007 83
Pesquisa Operacional I 2
Primeiro Semestre de 2007

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
-1 A1 2 4 0 0 0 1 0 40 20
-1 A2 2 0 -1 0 0 0 1 10 5
0 XS1 1 0 0 1 0 0 0 8 8
0 XS2 0 1 0 0 1 0 0 8 inf.
Z -4 -4 1 0 0 -1 -1 -50
C-Z 4 4 -1 0 0 0 0

Como é possível ver, entra a variável XP e sai a variável A2. A base do próximo
tableau é, então:

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
-1 A1 0
0 XP 1
0 XS1 0
0 XS2 0
Z
C-Z

Calculando a primeira linha, que precisa ser dividida toda por 2 para obter 1 na
posição XP x XP:

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
-1 A1 0
0 XP 1 0 -1/2 0 0 0 1/2 5
0 XS1 0
0 XS2 0
Z
C-Z

2008_SI_-_PesquisaOperacional_I_-_o2007 84
Pesquisa Operacional I 3
Primeiro Semestre de 2007

Calculando as próximas linhas, temos:

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
-1 A1 0 4 1 0 0 1 -1 30
0 XP 1 0 -1/2 0 0 0 1/2 5
0 XS1 0 0 1/2 1 0 0 -1/2 3
0 XS2 0 1 0 0 1 0 0 8
Z
C-Z

Calculando Z, C-Z e bj/aij temos o tableau pronto:

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
-1 A1 0 4 1 0 0 1 -1 30 7,5
0 XP 1 0 -1/2 0 0 0 1/2 5 inf.
0 XS1 0 0 1/2 1 0 0 -1/2 3 inf.
0 XS2 0 1 0 0 1 0 0 8 8
Z 0 -4 -1 0 0 -1 1 -30
C-Z 0 4 1 0 0 0 -2

Como é possível ver, a variável que entra é XJ e a que sai é XA1. O próximo tableau
está pronto abaixo:

0 0 0 0 0 -1 -1
cj VS XP XJ XE1 XS1 XS2 A1 A2 bj bj/aij
0 XJ 0 1 1/4 0 0 1/4 -1/4 15/2
0 XP 1 0 -1/2 0 0 0 1/2 5
0 XS1 0 0 1/2 1 0 0 -1/2 3
0 XS2 0 0 -1/4 0 1 -1/4 1/4 1/2
Z 0 0 0 0 0 0 0 0
C-Z 0 0 0 0 0 -1 -1

Onde é possível observar que a 1a. fase terminou. Note que A1 e A2 não estão mais na
solução básica.

b) Determinação do tableau da segunda fase

Agora já temos uma solução inicial em que as variáveis artificiais não aparecem. Para
continuar o Simplex, basta substituir a função objetivo do tableau pela original e retirar as
colunas das variáveis artificiais:

F.O.: [MAX]-25*xP - 40*xJ - 0*xE1 - 0*xS1 - 0*xS2 - 0*a1 - 0*a2

2008_SI_-_PesquisaOperacional_I_-_o2007 85
Pesquisa Operacional I 4
Primeiro Semestre de 2007

O tableau fica assim:

-25 -40 0 0 0
cj VS XP XJ XE1 XS1 XS2 bj bj/aij
-40 XJ 0 1 1/4 0 0 15/2
-25 XP 1 0 -1/2 0 0 5
0 XS1 0 0 1/2 1 0 3
0 XS2 0 0 -1/4 0 1 1/2
Z
C-Z

A partir disso podemos calcular Z, C-Z e bj/aij para verificar qual variável entra e qual
sai:

-25 -40 0 0 0
cj VS XP XJ XE1 XS1 XS2 bj bj/aij
-40 XJ 0 1 1/4 0 0 15/2
-25 XP 1 0 -1/2 0 0 5
0 XS1 0 0 1/2 1 0 3
0 XS2 0 0 -1/4 0 1 1/2
Z -25 -40 5/2 0 0 -425
C-Z 0 0 -5/2 0 0

Como é possível ver, esta já é a solução do problema, pois não é possível melhorar a
solução. O resultado final é XJ=7,5 e XP=5, ou seja, é mais econômico colocar o funcionário
mais caro (mas mais produtivo) trabalhando por mais horas. E o custo deste dia de trabalho
será de R$ 425,00 (lembrando de re-inverter o sinal da função objetivo, já que o problema
original era uma minimização que foi transformada numa maximização).

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório, 2006.

2008_SI_-_PesquisaOperacional_I_-_o2007 86
Pesquisa Operacional 1
Atualização: 12/03/2008

Unidade 2: Método Simplex e Ferramentas Computacionais


Tópico 8: Ferramentas Computacionais
Prof. Daniel Caetano

Objetivo: Apresentar o uso do Excel/Solver para a resolução de um problema de


otimização.

1. Apresentação do Problema

1) Para realizar a instalação de terminais de computador, uma empresa pode usar os


esforços de dois funcionários: Pedro e João. O salário de Pedro é R$ 25,00 por hora e o de
João é de R$ 40,00 por hora. Pedro consegue instalar um terminal em meia hora (0,5 hora) e
João em 15 minutos (0,25 hora). É necessário instalar um total de 40 terminais, sendo que
Pedro deve instalar pelo menos 10 deles. Sabe-se que nenhum dos dois funcionários pode
trabalhar mais do que 8 horas em um dia. Deseja-se minimizar o custo total da instalação.

Como já visto, a modelagem matemática deste problema é:

F.O.: [MIN] 25*xP + 40*xJ


S.A.: 2*xP + 4*xJ = 40 <= Restrição do número de máquinas a instalar.
2*xP ¶ 10 <= Restrição do mínimo de máquinas para Pedro
xP ü 8 <= Número máximo de horas de trabalho para Pedro
xJ ü 8 <= Número máximo de horas de trabalho para João

2. Usando o Computador para Resolver o Problema

Para resolver um problema deste tipo, existem inúmeras ferramentas. Algumas delas,
as mais poderosas (LINDO, LINGO, GAMS, etc) exigem que o problema seja transformado
para a forma padrão antes de ser fornecido para o computador.

Entretanto, há ferramentas mais simples no mercado, como aquela que vem no


Microsoft Excel, chamada Solver. O Solver é uma biblioteca do Excel que implementa
algoritmos de programação linear e não linear. Curiosamente, para o uso do Excel, não é
necessário usar a forma padrão, como será visto a seguir.

2.1. Preparando a Planilha para o Uso do Solver

Ao abrir o Excel, surge uma planilha em branco, mas é possível preenchê-la de forma
a facilitar o trabalho para seu uso posterior no solver. A idéia é listar primeiramente todas as

2008_SI_-_PesquisaOperacional_I_-_o2007 87
Pesquisa Operacional 2
Atualização: 12/03/2008

variáveis de decisão, com seu nome e valor inicial (normalmente 0), como apresentado na tela
a seguir. Note que estão marcados em amarelo os valores das variáveis de decisão.

O próximo passo é representar a Função Objetivo, como na figura abaixo, lembrando


que no local onde aparece o valor da função objetivo é preciso escrever a fórmula da mesma,
baseada no valor das células com as variáveis de decisão já indicadas (em amarelo), sendo
que, no exemplo da figura, Xp é a célula D3 e Xj é a célula D4, fazendo com que a fórmula
25*xP + 40*xJ seja:

= 25*D3 + 40*D4

Note que o valor da função objetivo foi marcado em verde.

Falta agora representar as restrições, sendo que elas devem ser representadas em 3
colunas: a primeira contém as fórmulas do lado esquerdo de cada restrição, convertidas para o
formato Excel (indicando as células das variáveis de decisão), a segunda contém o sinal
(igual, maior ou igual, menor ou igual) e a terceira contém o lado direito das restrições (o
número).

2008_SI_-_PesquisaOperacional_I_-_o2007 88
Pesquisa Operacional 3
Atualização: 12/03/2008

O lado direito das restrições 2*xP + 4*xJ = 40, 2*xP ¶ 10, xP ü 8 e xJ ü 8 ficam, no
formato do Excel e considerando os exemplos das figuras anteriores, respectivamente:

= 2*D3 + 4*D4
= 2*D3
= D3
= D4

Quando colocadas no Excel, as restrições deverão ficar como na figura a seguir. Note
que os valores das restrições estão em laranja e os limites das restrições estão em roxo.

2.1. Iniciando e Preparando o Solver

Agora que a planilha está pronta, está na hora de iniciar o Solver. O solver se encontra
no menu ferramentas, como indicado na figura a seguir:

2008_SI_-_PesquisaOperacional_I_-_o2007 89
Pesquisa Operacional 4
Atualização: 12/03/2008

Caso esta opção não esteja disponível, será necessário instalar o módulo do Solver.
Clicando nesta opção, aparecerá a janela principal do Solver, representada abaixo:

Antes de mais nada, deve-se entrar em "Opções" para configurar o tipo de problema
que se deseja resolver, já que o Solver serve para muitos outros tipos de problema. A janela
inicial de Opções é:

As mudanças que devem ser feitas são: marcar "Presumir modelo linear" e "Presumir
não negativos". Depois disso, basta clicar no botão OK.

Após isso, será apresentada novamente a janela do Solver. No campo "Definir Célula
Destino", deve-se clicar no botão e indicar a célula em verde. No campo "Igual a" deve-se
marcar "Min", indicando o desejo de minimizar o valor.

No campo "Células Variáveis", deve-se clicar no botão e indicar as células em


amarelo (todas ao mesmo tempo).

No campo "Submeter às Restrições", há um pouco mais de trabalho. Deve-se


primeiramente clicar no botão "Adicionar". A janela abaixo será apresentada:

2008_SI_-_PesquisaOperacional_I_-_o2007 90
Pesquisa Operacional 5
Atualização: 12/03/2008

O primeiro passo é adicionar a primeira restrição. No campo "Referência da célula",


deve-se clicar no botão e selecionar a primeira célula laranja (F3). No campo sem nome que
contém o sinal, deve ser feita a seleção do mesmo sinal da restrição, que no caso é o igual (=).
No campo "Restrição", basta clicar no botão e indicar a primeira célula roxa (H3). Feito isso,
simplesmente clique no botão OK e a primeira restrição estará adicionada, como indicado na
figura abaixo:

Repentindo o processo para as outras 3 restrições, a janela do solver terá a seguinte


aparência:

Neste momento, basta clicar no botão "Resolver". Após isso, aparecerá a seguinte
janela:

Após decidir se quer visualizar algum dos relatórios (Resposta, Sensibilidade e


Limites), deve-se clicar no botão Ok. Neste ponto, a planilha do Excel mostrará a solução
final, como apresentado na figura a seguir.

2008_SI_-_PesquisaOperacional_I_-_o2007 91
Pesquisa Operacional 6
Atualização: 12/03/2008

Ou seja: a solução é Xp = 5 (Pedro trabalhará 5 horas) e Xj = 7,5 (João trabalhará 7,5


horas). O custo final será R$ 425,00. Estes valores também são apresentados no relatório de
respostas.

O "Relatório de Sensibilidade" e o "Relatório de Limites" apresentam algumas


informações adicionais sobre variações que poderiam ocorrer sem que a solução fosse
modificada.

2008_SI_-_PesquisaOperacional_I_-_o2007 92
Pesquisa Operacional 1
Atualização: 12/03/2008

Unidade 3: Métodos Alternativos de Solução


Tópico 9a: Problemas Específicos: Problema da Atribuição
Prof. Daniel Caetano

Objetivo: Apresentar a modelagem do Problema da Atribuição como base para


posterior apresentação do algoritmo húngaro.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.

Introdução

O Problema da Atribuição/Designação é um problema bastante comum, tratando-se de


um caso especial de um problema mais geral, o Problema do Transporte da Programação
Linear.

Os Problemas de Atribuição/Designação são sempre num formato em que existe um


determinado número de atividades a serem processadas e um determinado número de
recursos para processá-las; o objetivo é atribuir (ou designar) qual atividade será processada
por qual recurso.

Note que este é um tipo genérico de problema; isto significa que os as atividades
podem ser produtos, projetos ou trechos de código, por exemplo. Da mesma forma, os
recursos podem ser equipamentos, equipes de projetistas ou CPUs, por exemplo.

O objetivo neste problema é alocar as atividades aos recursos de processamento de


forma a minimizar a soma do custo de cada processamento.

1. Um Problema de Atribuição

Como exemplo, considere o seguinte problema (MOREIRA, 2006, pág. 122,


modificado):

Exemplo:

Em uma fábrica temos dois trabalhos T1, T2 e T3, que podem ser processados por 3
máquinas diferentes: M1, M2 e M3. Devido à diferenças tecnológicas nas máquinas, o tempo

2008_SI_-_PesquisaOperacional_I_-_o2007 93
Pesquisa Operacional 2
Atualização: 12/03/2008

para que cada uma delas realize cada um dos trabalhos é diferente, estando expressados na
tabela abaixo:

Máquina \ Trabalho T1 T2 T3
M1 10 5 8
M2 12 9 15
M3 9 12 10

2. Modelagem Matemática do Problema da Atribuição

Considere para a resolução as variáveis de decisão Xij, sendo i o número da máquina e


j o número do trabalho: assim, X12 indica se a máquina 1 foi (ou não) atribuída para o
trabalho 2; X31 indica se a máquina 3 foi (ou não) atribuída ao trabalho 1. Ou seja: quando
uma destas variáveis for 1, houve a atribuição. Se ela for 0, não houve. Exemplos:

Se X12 = 1, a máquina 1 foi atribuída ao trabalho 2.


Se X12 = 0, a máquina 1 não foi atribuída ao trabalho 2.
Se X31 = 1, a máquina 3 foi atribuída ao trabalho 1.
Se X31 = 0, a máquina 3 não foi atribuída ao trabalho 1.

Note que as variáveis Xij só podem assumir valores 0 ou 1, já que não faz sentido
dizer que uma máquina foi "meio" atribuída a uma atividade e "meio" atribuída a outra.
Assim, como cada máquina só pode ser atribuída a um trabalho, a conseqüência é que se X11
= 1, então X12 e X13 precisam ser, obrigatoriamente, iguais a 0. Isso significa dizer que se a
máquina 1 foi usada para o trabalho 1 (X11 = 1) esta máquina 1 não pode ser usada para o
trabalho 2 e 3 (X12 = X13 = 0). Da mesma forma, se X12 = 1, então X11 = X13 = 0... ou ainda, se
X13 = 1, então X11 = X12 = 0. Ora, como é possível ver, a soma dos valores de X1j = 1, sempre!
Isso pode ser descrito assim:

X11 + X12 + X13 = 1, X1j c { 0, 1}

O que foi dito sobre a máquina 1, pode também ser dito sobre a máquina 2 e sobre a
máquina 3:

X21 + X22 + X23 = 1, X2j c { 0, 1}


X31 + X32 + X33 = 1, X3j c { 0, 1}

Juntando todas estas restrições, resulta:

X11 + X12 + X13 = 1


X21 + X22 + X23 = 1
X31 + X32 + X33 = 1

Xij c { 0, 1}

2008_SI_-_PesquisaOperacional_I_-_o2007 94
Pesquisa Operacional 3
Atualização: 12/03/2008

Por outro lado, é sabido também que os trabalhos só podem ser designados para uma
máquina de cada vez, também não fazendo sentido dizer que um trabalho foi "meio" atribuído
a uma máquina e "meio" atribuído a outra. Assim, ocorre que se X11 = 1, então X21 e X31
precisam ser, obrigatoriamente, iguais a 0. Isso significa dizer que se o trabalho 1 foi alocado
para a máquina 1 (X11 = 1) este mesmo trabalho não pode ser alocado para as máquians 2 e 3
(X21 = X31 = 0). Da mesma forma, se X21 = 1, então X11 = X31 = 0... ou ainda, se X31 = 1, então
X11 = X21 = 0. Ora, como é possível ver, a soma dos valores de Xi1 = 1, sempre! Isso pode ser
descrito da seguinte maneira:

X11 + X21 + X31 = 1, Xi1 c { 0, 1}

O que foi dito sobre o trabalho 1, pode também ser dito sobre o trabalho 2 e sobre o
trabalho 3:

X12 + X22 + X32 = 1, Xi2 c { 0, 1}


X13 + X23 + X33 = 1, Xi3 c { 0, 1}

Juntando todas estas restrições, teremos:

X11 + X21 + X31 = 1


X12 + X22 + X32 = 1
X13 + X23 + X33 = 1

Xij c { 0, 1}

Com isso, pode-se apresentar a definição completa das restrições:

X11 + X12 + X13 = 1 <= Máquina 1 só pega um trabalho


X21 + X22 + X23 = 1 <= Máquina 2 só pega um trabalho
X31 + X32 + X33 = 1 <= Máquina 3 só pega um trabalho
X11 + X21 + X31 = 1 <= Trabalho 1 só está em uma máquina
X12 + X22 + X32 = 1 <= Trabalho 2 só está em uma máquina
X13 + X23 + X33 = 1 <= Trabalho 3 só está em uma máquina

Xij c { 0, 1}

Mas ainda falta a definição de uma função objetivo! Bem, a função objetivo é a soma
do custo de cada atribuição realizada. Como Xij indica exatamente se uma atribuição foi feita
ou não, basta multiplicar o custo de cada atribuição (dados pelo problema) pela variável Xij,
que identifica se aquela atribuição foi feita:

Máquina \ Trabalho T1 T2 T3
M1 10 5 8
M2 12 9 15
M3 9 12 10

2008_SI_-_PesquisaOperacional_I_-_o2007 95
Pesquisa Operacional 4
Atualização: 12/03/2008

Exemplo 1:
Custo da atribuição da M1 ao T1: 10
Variável que indica se esta atribuição foi feita (1 se sim, 0 se não): X11
Custo final desta atribuição: 10* X11

Exemplo 2:
Custo da atribuição da M2 ao T3: 15
Variável que indica se esta atribuição foi feita (1 se sim, 0 se não): X23
Custo final desta atribuição: 15* X23

Jutando o custo das 9 possíveis atribuições, define-se a função objetivo:

F.O.:
[MIN] 10X11 + 5X12 + 8X13 + 12X21 + 9X22 + 15X23 + 9X31 + 12X32 + 10X33
S.A.: X11 + X12 + X13 = 1
X21 + X22 + X23 = 1
X31 + X32 + X33 = 1
X11 + X21 + X31 = 1
X12 + X22 + X32 = 1
X13 + X23 + X33 = 1

Xij c { 0, 1}

Enfim, o modelo completo. Entretanto, ainda falta colocar este modelo na forma
padrão, o que acrescentaria uma variável artificial em cada restrição, ampliando o número de
variáveis de 9 para 15.

Observe como um problema simples e pequeno, de atribuição de 3 máquinas a 3


trabalhos, tornou-se um modelo matemático enorme, com 15 variáveis (colunas do Simplex)
e 6 restrições (linhas do Simplex).

Para piorar, o problema exige que as respostas sejam números inteiros, o que
provavelmente impede o Simplex (sozinho) de resolvê-lo, sendo necessário um algoritmo que
engloba o Simplex, chamado "Branch and Bound" que pode vir a ter que re-executar diversas
vezes o Simplex, podendo ter que adicionar até mais 9 restrições (linhas do Simplex), uma
para cada variável de decisão, totalizando 15 variáveis e 15 restrições.

Não é preciso ir muito longe para perceber que esse problema pode demorar um bom
tempo para ser resolvido... e que, para problemas muito maiores, a execução será inviável.

É para resolver este tipo de problema que foi criado o algoritmo húngaro, que será
apresentado a seguir.

2008_SI_-_PesquisaOperacional_I_-_o2007 96
Pesquisa Operacional 5
Atualização: 12/03/2008

3. Exercício L4 (Livro)

Em uma empresa de construção civil, há três projetos que podem ser alocados a três
equipes diferentes. Tanto o tempo de experiência das equipes quanto suas orientações
técnicas são distintas, de modo que o tempo de término de cada projeto dependerá da equipe
específica ao qual ele for alocado. A matriz a seguir mostra os tempos para cada equipo e
projeto. Modele como um problema de programação linear (para o Simplex, mas não precisa
colocar na forma padrão) e aplique o Algoritmo Húngaro para chegar à alocação ótima, ou
seja, o menor número de horas pagas de desenvolvimento.

Projeto A Projeto B Projeto C


Equipe 1 15 24 21
Equipe 2 17 22 18
Equipe 3 23 29 30

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 97
Pesquisa Operacional 1
Atualização: 12/03/2008

Unidade 3: Métodos Alternativos de Solução


Tópico 9b: O Algoritmo Húngaro
Prof. Daniel Caetano

Objetivo: Apresentar o algoritmo húngaro, para solução do problema da atribuição.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.

Introdução

Como foi visto anteriormente, o problema da atribuição/designação pode ser


modelado matematicamente como um problema de programação linear, visando sua solução
pelo método Simplex.

Entretanto, a solução pelo método Simplex pode ser excessivamente demorada em


problemas muito grandes, com milhares de atividades a serem atribuidas. Por esta razão, foi
criado um algoritmo chamado "Algoritmo Húngaro" que é capaz de resolver problemas de
atribuição com um esforço computacional bastante menor que o Simplex.

Nesta aula será visto como solucionar o problema apresentado anteriormente com
auxílio do Algorítmo Húngaro.

1. O Algoritmo Húngaro

Assim como o Simplex, o Algoritmo Húngaro pode ser descrito como uma seqüência
de operações matemáticas que, quando aplicadas, revelam a solução ótima para um problema
de atribuição.

O Algoritmo Húngaro é baseado na matriz dos tempos/custos de atribuição que se


deseja minimizar. Além disso, ele é baseado no fato de existir igual número de tarefas e
máquinas (ou seja, o número de linhas é igual ao de colunas). Há uma pressuposição que
qualquer tarefa pode ser alocada a qualquer máquina e, finalmente, pressupõe que os
dados são custos (ou outra grandeza qualquer) que precisam ser minimizados.

Os passos do Algoritmo Húngaro são:

1) Desenho da tabela de custos.


2) Seleção do menor valor de cada linha.
3) Subtração deste número de todos da mesma linha que ele.
4) Seleção do menor valor de cada coluna.

2008_SI_-_PesquisaOperacional_I_-_o2007 98
Pesquisa Operacional 2
Atualização: 12/03/2008

5) Subtração deste número de todos da mesma coluna que ele.


6) Determinação da ordem da matriz.
7) Traçar o menor número de retas horizontais e verticais que passem por todos os
zeros.
8) Comparar o número de retas necessário com a ordem da matriz.
9) Se o número de retas for menor que a ordem da matriz, deve ser selecionado o
menor número não coberto pelas retas. Se for igual, o algoritmo acabou... passo 13.
10) Subtração deste número de todos que não estiverem cobertos por retas.
11) Adição do número selecionado no passo 9 em todas as interseções de retas.
12) Voltar ao passo 7.
13) Determinação da atribuição.

2. Aplicação do Algoritmo Húngaro a um Problema

Para aplicar o algoritmo, será usado o mesmo exemplo (MOREIRA, 2006, pág. 122,
modificado) visto anteriormente.

Exemplo:

Em uma fábrica temos dois trabalhos T1, T2 e T3, que podem ser processados por 3
máquinas diferentes: M1, M2 e M3. Devido à diferenças tecnológicas nas máquinas, o tempo
para que cada uma delas realize cada um dos trabalhos é diferente, estando expressados na
tabela abaixo:

Máquina \ Trabalho T1 T2 T3
M1 10 5 8
M2 12 9 15
M3 9 12 10

Com base neste problema será apresentado o algoritmo húngaro para o problema de
atribuição, visando encontrar qual máquina deve realizar qual trabalho de forma a minimizar
o número total de horas de máquina gastos.

2.1. Aplicação do Algoritmo

O Algoritmo Húngaro é composto de várias etapas, que serão vistas a seguir, para
resolver o problema previamente apresentado. Segue, agora, um guia detalhado de como
executar cada etapa, passo a passo.

2008_SI_-_PesquisaOperacional_I_-_o2007 99
Pesquisa Operacional 3
Atualização: 12/03/2008

Passo 1: Desenho da tabela de custos

Máquina \ Trabalho T1 T2 T3
M1 10 5 8
M2 12 9 15
M3 9 12 10

Passo 2: Seleciona-se o menor valor de cada linha...

Máquina \ Trabalho T1 T2 T3
M1 10 >>5<< 8
M2 12 >>9<< 15
M3 >>9<< 12 10

Passo 3: Subtrai-se este número de todos as células da mesma linha que ele

Máquina \ Trabalho T1 T2 T3
M1 5 0 3
M2 3 0 6
M3 0 3 1

Passo 4: Seleciona-se o menor valor de cada coluna

Máquina \ Trabalho T1 T2 T3
M1 5 >>0<< 3
M2 3 0 6
M3 >>0<< 3 >>1<<

Passo 5: Subtrai-se este número de todos as células da mesma coluna que ele

Máquina \ Trabalho T1 T2 T3
M1 5 0 2
M2 3 0 5
M3 0 3 0

Passo 6: Determina-se a ordem da matriz

A ordem da matriz é 3, já que ela é uma matriz 3x3.

2008_SI_-_PesquisaOperacional_I_-_o2007 100
Pesquisa Operacional 4
Atualização: 12/03/2008

Passo 7: Traça-se o |menor| número de retas (h/v) que passem por todos os zeros

Máquina \ Trabalho T1 T2 T3
M1 5 0| 2
M2 3 0| 5
M3 -----------0----------- -----------3|----------- -----------0-----------

Passo 8: Compara-se o número de retas com a ordem da matriz

Há duas retas: a que passa na linha M3 e a que passa na coluna T2. Como o número
de retas é MENOR que a ordem (três), segue-se para o passo 9. Caso o número fosse igual a
três, a seqüência seria a partir do passo 13. Note que se o número de retas for MAIOR que a
ordem, certamente há erro no traçado das retas.

Passo 9: Caso "no. de retas < ordem", seleciona-se o menor valor "não coberto"

Máquina \ Trabalho T1 T2 T3
M1 5 0| >>2<<
M2 3 0| 5
M3 -----------0----------- -----------3|----------- -----------0-----------

Passo 10: Subtrai-se valor selecionado no passo 9 de todos os "não cobertos"

Máquina \ Trabalho T1 T2 T3
M1 3 0| 0
M2 1 0| 3
M3 -----------0----------- -----------3|----------- -----------0-----------

Passo 11: Soma-se o valor selecionado no passo 9 na interseção das retas

Máquina \ Trabalho T1 T2 T3
M1 3 0| 0
M2 1 0| 3
M3 -----------0----------- -----------5|----------- -----------0-----------

Passo 12: Traça-se o |menor| número de retas que passem por todos os zeros

Máquina \ Trabalho T1 T2 T3
M1 ----------- 3 ----------- ----------- 0 |----------- ----------- 0 -----------
M2 1 0 | 3
M3 ----------- 0 ----------- ----------- 3 |----------- ----------- 0 -----------

Caso o número de retas ainda seja menor que a ordem, volta-se para o passo 8 e
reprete-se até conseguir um número de retas igual à ordem da matriz.

2008_SI_-_PesquisaOperacional_I_-_o2007 101
Pesquisa Operacional 5
Atualização: 12/03/2008

Passo 13: Determina-se a atribuição

A primeira linha ou coluna que aparece apenas UM zero deve ser localizada e a
atribuição feita no ponto em que aparece o zero. Neste exemplo: A linha M2 tem apenas UM
zero (coluna T2). Assim, o trabalho T2 será atribuído à máquina M2, e essa linha e coluna
podem ser eliminadas (já que a M2 e o T2 não poderão ser atribuídos a mais nada):

Máquina \ Trabalho T1 T2 T3
M1 3 0 0
M2 1 0 3
M3 0 3 0

Resultando em:

Máquina \ Trabalho T1 T3
M1 3 0
M3 0 0

Localizando a próxima linha ou coluna que aparece apenas UM zero, define-se a


próxima atribuição. Neste exemplo: A linha M1 tem apenas UM zero (coluna T3). Assim, o
trabalho T3 será atribuído à máquina M1, e essa linha e coluna podem ser eliminadas:

Máquina \ Trabalho T1 T3
M1 3 0
M3 0 0

Resultando em:

Máquina \ Trabalho T1
M3 0

Finalmente, o trabalho T1 será atribuído à máquina M3. Solução:

T1 => M3, custo 9


T2 => M2, custo 9
T3 => M1, custo 8

Custo final total: 26 horas.

2008_SI_-_PesquisaOperacional_I_-_o2007 102
Pesquisa Operacional 6
Atualização: 12/03/2008

3. Tornando o Algoritmo Húngaro Genérico

Foi visto anteriormente que, para que o Algoritmo Húngaro funcione, existe a
necessidade de obedecer alguns critérios... mas e quando isso não ocorre? Neste caso, serão
usados alguns truques para "forçar" os critérios necessários.

Número de Linhas e Colunas Diferente: Neste caso devem ser criadas linhas ou
colunas fictícias (conforme o caso), preenchendo o custo de todas as células desta
linha/coluna acrescentada como 0.

Problema de Maximização ao invés de minimização: Neste caso, procura-se o


maior número na matriz. Encontrado este número, em cada célula indicar o resultado da
operação "Maior_Número - Valor_Original_Da_Célula_Atual".

Alocações Impossíveis: Quando alguma alocação é impossível, basta indicar seu


custo com um valor excessivamente alto. Normalmente a letra "M" é usada para representar
este valor.

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 103
Pesquisa Operacional 1
Atualização: 12/03/2008

Resolução da Lista 3
Prof. Daniel Caetano

Objetivo: Resolver o problema da Lista 3, apresentando artifícios de modelagem.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.

Resolução do Exercício L3

Enunciado:
Modele e apresente na forma padrão (pronto para o Simplex) o seguinte problema
abaixo:
1) Para realizar a instalação de terminais de computador, uma empresa pode usar os
esforços de dois funcionários: Pedro e João. O salário de Pedro é R$ 25,00 por hora e o de
João é de R$ 40,00 por hora. Pedro consegue instalar um terminal em meia hora (0,5 hora) e
João em 15 minutos (0,25 hora). É necessário instalar um total de 40 terminais, sendo que
Pedro deve instalar pelo menos 10 deles. Sabe-se que nenhum dos dois funcionários pode
trabalhar mais do que 8 horas em um dia. Deseja-se minimizar o custo total da instalação.

1. Modele matematicamente o problema acima.

Função Objetivo:

Como se quer minimizar o custo de instalação, a primeira coisa é determinar como se


pode calcular este custo. Bem, há dois funcionários, sendo que ambos recebem um valor
específico por hora. Assim, se for definido:

xP = número de horas trabalhadas por Pedro


xJ = número de horas trabalhadas por João

Sabendo que o salário de Pedro é R$ 25,00 por hora e o de João é de R$ 40,00 por
hora, o custo de cada um dos funcionários será:

Pedro: 25 * xP (em reais)


João: 40 * xJ (em reais)

Assim, o custo total será:

Custo = 25*xP + 40*xJ

Como se deseja minimizar o custo, a função objetivo fica:

[MIN] 25*xP + 40*xJ

2008_SI_-_PesquisaOperacional_I_-_o2007 104
Pesquisa Operacional 2
Atualização: 12/03/2008

Restrições:

Há, basicamente, 4 restrições:

- Número total de máquinas a instalar: 40


- Número mínimo de máquinas que serão instaladas por Pedro: 10
- Número máximo de horas de trabalho de Pedro: 8
- Número máximo de horas de trabalho de João: 8

- Número total de máquinas a instalar: 40

Primeiro é preciso identificar quantas máquinas Pedro e João instalam por hora. Pelo
enunciado, Pedro instala um terminal em meia hora. Em outras palavras, ele instala 2
máquinas em uma hora. Como xP é número de horas trabalhadas por Pedro, o número total de
máquinas instaladas por Pedro é:

Máquinas Instaladas por Pedro: 2*xP

Da mesma forma, é dito que João instala uma máquina em 15 minutos, ou seja, ele
instala 4 máquinas em uma hora. Como xJ é número de horas trabalhadas por João, o número
total de máquinas instaladas por João é:

Máquinas Instaladas por João: 4*xJ

Assim, o total de máquinas instaladas é:

2*xP + 4*xJ

Que deve ser exatamente igual a 40... ou seja:

2*xP + 4*xJ = 40 <= Restrição do número de máquinas a instalar.

- Número mínimo de máquinas que serão instaladas por Pedro: 10

Já foi visto que o número de máquinas instaladas por Pedro 2*xP. O que esta restrição
diz é que este número precisa ser pelo menos igual a 10, ou seja, ele é maior ou igual a 10.
Assim:

2*xP ¶ 10 <= Restrição do mínimo de máquinas para Pedro

2008_SI_-_PesquisaOperacional_I_-_o2007 105
Pesquisa Operacional 3
Atualização: 12/03/2008

- Número máximo de horas de trabalho de Pedro: 8

Como xP é o número de horas trabalhadas por Pedro, este valor deve ser menor que 8:

xP ü 8 <= Número máximo de horas de trabalho para Pedro


xJ ü 8 <= Número máximo de horas de trabalho para João

Modelo Final

F.O.:
[MIN] 25*xP + 40*xJ
S.A.:
2*xP + 4*xJ = 40 <= Restrição do número de máquinas a instalar.
2*xP ¶ 10 <= Restrição do mínimo de máquinas para Pedro
xP ü 8 <= Número máximo de horas de trabalho para Pedro
xJ ü 8 <= Número máximo de horas de trabalho para João

2. Coloque o problema na forma padrão, pronto para ser resolvido pelo Simplex.

Primeiramente, devem ser acrescentadas as variáveis de folga e excesso nas restrições


do tipo ü e ¶ respectivamente, sendo que apenas com isso as restrições já podem se tornar
igualdades:

F.O.: [MIN] 25*xP + 40*xJ


S.A.: 2*xP + 4*xJ = 40 (=)
2*xP - 1*xE1 = 10 (¶)
1*xP + 1*xS1 =8 (ü)
1*xJ + 1*xS2 =8 (ü)
Sinal Antigo ---^

Entretanto, este problema ainda não admite solução direta para xP = xJ = 0, algo que é
desejável para poder iniciar o Simplex. As restrições problemáticas são aquelas cujos sinais
originais eram ¶ ou =, uma vez que com a igualdade teremos resultados estranhos ao fazer xP
= xJ = 0:

2*xP + 4*xJ = 40 => (xP = xJ = 0) => 2*0 + 4*0 = 40 => 0 = 40 !?!?!!?


2*xP - 1*xE1 = 10 => (xP = xJ = 0) => 2*0 -1 *xE1= 10 => xE1= -10 !?!?!!?

2008_SI_-_PesquisaOperacional_I_-_o2007 106
Pesquisa Operacional 4
Atualização: 12/03/2008

Assim, é necessário adicionar variáveis artificiais nestas restrições, de forma a tornar a


solução xP = xJ = 0 possível. Com isso, o problema fica:

F.O.: [MIN] 25*xP + 40*xJ


S.A.: 2*xP + 4*xJ +1*a1 = 40
2*xP - 1*xE1 +1*a2 = 10
1*xP + 1*xS1 =8
1*xJ + 1*xS2 =8

Agora a modelagem está quase completa, faltando apenas fazer com que todas as
variáveis apareçam em todas as linhas, o que é conseguido acrescentando-as com coeficiente
zero onde elas não aparecem:

F.O.: [MIN] 25*xP + 40*xJ + 0*xE1 + 0*xS1 + 0*xS2 +0*a1 +0*a2


S.A.: 2*xP + 4*xJ + 0*xE1 + 0*xS1 + 0*xS2 +1*a1 +0*a2 = 40
2*xP +0*xJ - 1*xE1 + 0*xS1 + 0*xS2 +0*a1 +1*a2 = 10
1*xP +0*xJ + 0*xE1 + 1*xS1 + 0*xS2 +0*a1 +0*a2 =8
0*xP 1*xJ + 0*xE1 + 0*xS1 + 1*xS2 +0*a1 +0*a2 =8

O último truque a ser aplicado é a conversão de um problema de minimização para


um de maximização, bastando, para isso, multiplicar a função objetivo por -1:

F.O.: [MAX]-25*xP - 40*xJ - 0*xE1 - 0*xS1 - 0*xS2 - 0*a1 - 0*a2


S.A.: 2*xP + 4*xJ + 0*xE1 + 0*xS1 + 0*xS2 +1*a1 +0*a2 = 40
2*xP +0*xJ - 1*xE1 + 0*xS1 + 0*xS2 +0*a1 +1*a2 = 10
1*xP +0*xJ + 0*xE1 + 1*xS1 + 0*xS2 +0*a1 +0*a2 =8
0*xP 1*xJ + 0*xE1 + 0*xS1 + 1*xS2 +0*a1 +0*a2 =8

3. Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 107
Pesquisa Operacional 1
Atualização: 12/03/2008

Resolução da Lista 4
Prof. Daniel Caetano

Objetivo: Apresentar a resolução da listsa.

Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.

1. Exercício L4

Em uma empresa de construção civil, há três projetos que podem ser alocados a três
equipes diferentes. Tanto o tempo de experiência das equipes quanto suas orientações
técnicas são distintas, de modo que o tempo de término de cada projeto dependerá da equipe
específica ao qual ele for alocado. A matriz a seguir mostra os tempos para cada equipo e
projeto. Modele como um problema de programação linear (para o Simplex, mas não precisa
colocar na forma padrão) e aplique o Algoritmo Húngaro para chegar à alocação ótima, ou
seja, o menor número de horas pagas de desenvolvimento.

Projeto A Projeto B Projeto C


Equipe 1 15 24 21
Equipe 2 17 22 18
Equipe 3 23 29 30

Modelagem Matemática

Considere para a resolução as variáveis de decisão Xij, sendo i o número da equipe e j


a letra do projeto: X1B indica se a equipe 1 foi (ou não) atribuída para o projeto B; X3A indica
se a equipe 3 foi (ou não) atribuída ao projeto A. Ou seja: quando uma destas variáveis for 1,
houve a atribuição. Se ela for 0, não houve. Assim:

Se X1B = 1, a equipe 1 foi atribuída ao projeto B.


Se X1B = 0, a equipe 1 não foi atribuída ao projeto B.
Se X3A = 1, a equipe 3 foi atribuída ao projeto A.
Se X3A = 0, a equipe 3 não foi atribuída ao projeto A.

Note que as variáveis Xij só podem assumir valores 0 ou 1, já que não faz sentido
dizer que uma equipe foi "meio" atribuída a uma atividade e "meio" atribuída a outra. Assim,
como cada equipe só pode ser atribuída a um projeto, temos que se X1A = 1, X1B e X1C
precisam ser, obrigatoriamente, iguais a 0. Isso significa dizer que se a equipe 1 foi usada
para o projeto A (X1A = 1) esta equipe 1 não pode ser usada para os projetos B e C (X1B = X1C
= 0). Da mesma forma, se X1B = 1, então X1A = X1C = 0... ou ainda, se X1C = 1, então X1A =
X1B = 0. Ora, como é possível ver, a soma dos valores de X1j = 1, sempre! Isso pode ser
descrito assim:

2008_SI_-_PesquisaOperacional_I_-_o2007 108
Pesquisa Operacional 2
Atualização: 12/03/2008

X1A + X1B + X1C = 1, X1j c { 0, 1}

O que foi dito sobre a equipe 1, pode também ser dito sobre a equipe 2 e sobre a
equipe 3:

X2A + X2B + X2C = 1, X2j c { 0, 1}


X3A + X3B + X3C = 1, X3j c { 0, 1}

Juntando todas estas restrições, resulta em:

X1A + X1B + X1C = 1


X2A + X2B + X2C = 1
X3A + X3B + X3C = 1

Xij c { 0, 1}

Por outro lado, é sabido também que os projetos só podem ser designados para uma
equipe de cada vez, também não fazendo sentido dizer que um projeto foi "meio" atribuído a
uma equipe e "meio" atribuído a outra. Assim, temos que se X1A = 1, X2A e X3A precisam ser,
obrigatoriamente, iguais a 0. Isso significa dizer que se o projeto 1 foi alocado para a equipe 1
(X1A = 1) este mesmo projeto não pode ser alocado para as máquinas 2 e 3 (X2A = X3A = 0).
Da mesma forma, se X2A = 1, então X1A = X3A = 0... ou ainda, se X3A = 1, então X1A = X2A = 0.
Ora, como é possível ver, a soma dos valores de XiA = 1, sempre! Isso pode ser descrito da
seguinte maneira:

X1A + X2A + X3A = 1, XiA c { 0, 1}

Bem, o que foi dito sobre o projeto A, pode também ser dito sobre o projeto B e sobre
o projeto C:

X1B + X2B + X3B = 1, XiB c { 0, 1}


X1C + X2C + X3C = 1, XiC c { 0, 1}

Juntando todas estas restrições, resulta em:

X1A + X2A + X3A = 1


X1B + X2B + X3B = 1
X1C + X2C + X3C = 1

Xij c { 0, 1}

2008_SI_-_PesquisaOperacional_I_-_o2007 109
Pesquisa Operacional 3
Atualização: 12/03/2008

Com isso, temos a definição completa das restrições:

X1A + X1B + X13 = 1 <= Equipe 1 só pega um projeto


X2A + X2B + X23 = 1 <= Equipe 2 só pega um projeto
X3A + X3B + X33 = 1 <= Equipe 3 só pega um projeto
X1A + X2A + X3A = 1 <= Projeto A só está em uma equipe
X1B + X2B + X3B = 1 <= Projeto B só está em uma equipe
X1C + X2C + X3C = 1 <= Projeto C só está em uma equipe

Xij c { 0, 1}

Mas ainda falta a definição de uma função objetivo! Bem, a função objetivo é a soma
do custo de cada atribuição realizada. Como Xij indica se uma atribuição foi feita, basta
multiplicar o custo de cada atribuição (dados pelo problema) pela variável Xij que identifica
se aquela atribuição foi feita:

Projeto A Projeto B Projeto C


Equipe 1 15 24 21
Equipe 2 17 22 18
Equipe 3 23 29 30

Exemplo 1:
Custo da atribuição da E1 ao PA: 15
Variável que indica se esta atribuição foi feita (1 se sim, 0 se não): X1A
Custo final desta atribuição: 15* X1A

Exemplo 2:
Custo da atribuição da E2 ao PC: 18
Variável que indica se esta atribuição foi feita (1 se sim, 0 se não): X2C
Custo final desta atribuição: 18* X2C

Jutanto o custo das 9 possíveis atribuições, definimos a função objetivo:

F.O.:
[MIN] 15X1A + 24X1B + 21X1C + 17X2A + 22X2B + 18X2C + 23X3A + 29X3B + 30X3C
X1A + X1B + X13 = 1
X2A + X2B + X23 = 1
X3A + X3B + X33 = 1
X1A + X2A + X3A = 1
X1B + X2B + X3B = 1
X1C + X2C + X3C = 1

Xij c { 0, 1}

2008_SI_-_PesquisaOperacional_I_-_o2007 110
Pesquisa Operacional 4
Atualização: 12/03/2008

Resolução pelo Algoritmo Húngaro

Passo 1: Desenho da tabela de custos


Projeto A Projeto B Projeto C
Equipe 1 15 24 21
Equipe 2 17 22 18
Equipe 3 23 29 30

Passo 2: Seleciona-se o menor valor de cada linha...


Projeto A Projeto B Projeto C
Equipe 1 >>15<< 24 21
Equipe 2 >>17<< 22 18
Equipe 3 >>23<< 29 30

Passo 3: Subtrai-se este número de todos as células da mesma linha que ele
Projeto A Projeto B Projeto C
Equipe 1 0 9 6
Equipe 2 0 5 1
Equipe 3 0 6 7

Passo 4: Seleciona-se o menor valor de cada coluna


Projeto A Projeto B Projeto C
Equipe 1 >>0<< 9 6
Equipe 2 0 >>5<< >>1<<
Equipe 3 0 6 7

Passo 5: Subtrai-se este número de todos as células da mesma coluna que ele
Projeto A Projeto B Projeto C
Equipe 1 0 4 5
Equipe 2 0 0 0
Equipe 3 0 1 6

Passo 6: Determina-se a ordem da matriz


A ordem da matriz é 3, já que ela é uma matriz 3x3.

Passo 7: Traça-se o |menor| número de retas (h/v) que passem por todos os zeros
Projeto A Projeto B Projeto C
Equipe 1 0 | 4 5
Equipe 2 ---------- 0 |---------- ---------- 0 ---------- ---------- 0 ----------
Equipe 3 0 | 1 6

Passo 8: Compara-se o número de retas com a ordem da matriz


Há duas retas: a que passa na linha Equipe2 e a que passa na coluna ProjetoA. Como o
número de retas é MENOR que a ordem, segue-se para o passo 9.

2008_SI_-_PesquisaOperacional_I_-_o2007 111
Pesquisa Operacional 5
Atualização: 12/03/2008

Passo 9: Caso "no. de retas < ordem", seleciona-se o menor valor "não coberto"
Projeto A Projeto B Projeto C
Equipe 1 0 | 4 5
Equipe 2 ---------- 0 |---------- ---------- 0 ---------- ---------- 0 ----------
Equipe 3 0 | >>1<< 6

Passo 10: Subtrai-se valor selecionado no passo 9 de todos os "não cobertos"


Projeto A Projeto B Projeto C
Equipe 1 0 | 3 4
Equipe 2 ---------- 0 |---------- ---------- 0 ---------- ---------- 0 ----------
Equipe 3 0 | 0 5

Passo 11: Soma-se o valor selecionado no passo 9 na interseção das retas


Projeto A Projeto B Projeto C
Equipe 1 0 | 3 4
Equipe 2 ---------- 1 |---------- ---------- 0 ---------- ---------- 0 ----------
Equipe 3 0 | 0 5

Passo 12: Traça-se o |menor| número de retas que passem por todos os zeros
Projeto A Projeto B Projeto C
Equipe 1 0| 3| 4
Equipe 2 -----------1 |----------- -----------0 |----------- ------------0------------
Equipe 3 0| 0| 5

Como o número de retas é igual à ordem da matriz, segue-se para o passo 13.

Passo 13: Determina-se a atribuição

Localizar a primeira linha ou coluna que aparece apenas UM zero e fazer a atribuição.
Neste caso: A linha Equipe1 tem apenas UM zero (ProjetoA). Assim, o Projeto A será
atribuído à Equipe 1, e essa linha e coluna podem ser eliminadas:

Projeto A Projeto B Projeto C


Equipe 1 0 3 4
Equipe 2 1 0 0
Equipe 3 0 0 5

Projeto B Projeto C
Equipe 2 0 0
Equipe 3 0 5

Localizar a próxima linha ou coluna que aparece apenas UM zero e fazer a atribuição.
Neste exemplo: A linha Equipe3 tem apenas UM zero (coluna ProjetoB). Assim, o Projeto B
será atribuído à Equipe 3, e essa linha e coluna podem ser eliminadas:

2008_SI_-_PesquisaOperacional_I_-_o2007 112
Pesquisa Operacional 6
Atualização: 12/03/2008

Projeto B Projeto C
Equipe 2 0 0
Equipe 3 0 5

Projeto C
Equipe 2 0

Finalmente, o Projeto C será atribuído à Equipe 2. Solução:

PA => E1, tempo 15 meses


PB => E3, custo 29 meses
PC => E2, custo 18 meses

Custo final total: 62 meses.

Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_I_-_o2007 113
Pesquisa Operacional II 1
Atualização: 13/08/2008

Apresentação da Disciplina
Prof. Daniel Caetano

Objetivo: Apresentar o conteúdo da disciplina Pesquisa Operacional II, no âmbito


geral e dentro do contexto do curso de Sistemas de Informação.

Bibliografia: MOREIRA; ARENALES et al.

1. INTRODUÇÃO

Conceitos Chave:
- Otimizar? => O que e quanto produzir; caminho para um pacote de rede; etc
- Uso do Simplex => otimização
- Simplex => pode não ser muito eficiente, embora seja eficaz!
- Problema de Atribuição => Algoritmo Húngaro
* Atribuição de Processos a Executores

Na primeira parte do curso de Pesquisa Operacional foram apresentados os conceitos


básicos da Pesquisa Operacional, necessários à otimização de qualquer processo ou atividade.
Foi apresentado um método de como transformar problemas reais em modelos matemáticos e
também foi apresentado o método Simplex para encontrar a solução ótima para o modelo
matemático. Mas o que era otimizar, mesmo?

Relembrando, otimizar significa encontrar uma combinação de fatores de operação


que nos permite o melhor desempenho possível. Em outras palavras, se vamos transportar
carga e podemos fazer isso de diversas formas, otimizar é determinar todos as características
do transporte que nos trará um menor custo ou tempo, por exemplo. Da mesma forma, se
queremos transportar um certo conjunto de dados por uma rede como a internet, onde temos
diversos caminhos pelos quais uma informação pode ser transmitida, otimizar significa
determinar o modo de transmissão e o caminho da transmissão de forma que a comunicação
seja o mais rápida possível.

Ainda no curso anterior, vimos que alguns problemas em que o método Simplex
poderia ter desempenho pouco satisfatório em problemas grandes; para estes casos, em que
mesmo um computador rápido pode levar dias, meses ou até anos (...) para encontrar uma
solução ótima, foi apresentado como exemplo um algoritmos que lida com um problema
específico clássico deste tipo: o Algorítmo Húngaro para o problema da atribuição.

2008_SI_-_PesquisaOperacional_II_-_o2007 114
Pesquisa Operacional II 2
Atualização: 13/08/2008

O Problema de Atribuição é muito comum além das esferas clássicas de alocar


projetos a equipes; ele pode ser usado, por exemplo, em um sistema de computação
distribuída. Neste tipo de sistema o computador responsável pelo controle de execução das
aplicações deve decidir qual é o outro computador que irá processar uma informação ou
executar um dado software. Como cada equipamento pode ter recursos distintos (velocidade
de processamento, memória, dispositivos, etc), trata-se de um problema de atribuição que o
Sistema Operacional terá de resolver.

Figura 1 - Qual programa será executado em qual computador?

Hoje também estão se tornando comuns os computadores com dois processadores ou


mais (Dual Core, como Core2 Duo, Athlon X2, etc) e isso traz uma tarefa ao Sistema
Operacional, antes desnecessária: escolher qual dos processadores (neste caso, todos iguais)
irá executar um dado thread (parte de um programa). Essa atribuição vai levar em conta qual
a carga de cada processador, quais recursos cada um deles está usando, e assim por diante.

Figura 2 - Qual tarefa será atribuída a cada processador?

1.1. Pesquisa Operacional II

Conceitos Chave:
- Simplex é lento!
- Problema do Transporte
- Problema do Caminho Mínimo
- Simulações
- Problemas muito complexos => heurísticas
* Diferentes para cada problema
* Meta-Heurísticas

2008_SI_-_PesquisaOperacional_II_-_o2007 115
Pesquisa Operacional II 3
Atualização: 13/08/2008

Neste curso serão apresentados outros métodos de otimização, aplicáveis a problemas


específicos, que eventualmente precisam ser resolvidos em tempos muito curtos e para os
quais o Simplex não fornece solução ou não é rápido o suficiente. Vejamos rapidamente
alguns deles.

- Problema do Transporte da Programação Linear

O Problema do Transporte é muito comum quando queremos realocar recursos


ou atividades, e isso vai além do transporte físico real.

Por exemplo: em uma rede Bit Torrent temos um arquivo em diversas fontes,
que precisam ser enviados para diversos destinos, sendo que a velocidade de
transmissão de cada fonte para cada destino é diferente. Qual fonte manda o arquivo
para qual destino de forma que todos sejam atendidos com o menor custo de tempo
total possível? É possível modelar este problema como um problema do transporte
para decidir qual origem envia dados para qual destino, de forma a minimizar o tempo
total de transferência.

Figura 3 - De qual servidor um arquivo irá para qual cliente?

O mesmo raciocínio pode, em última análise, ser usado para o caso de um


banco de dados distribuído com espelhamento.

- Problemas de Caminho Mínimo

Além da aplicação clássica em Sistemas de Informação ao usuário de


transporte, para indicar o menor caminho para ir de um lugar ao outro, este tipo de
problema é também muito comum em redes de comunicação.

Nas redes de comunicação, ao estabelecer uma conexão entre um ponto fonte e


um destino, é necessário definir qual o caminho que gasta o menor número de
recursos (centrais, cabos de conexão etc.) para transportar a informação de um ponto a
outro. Nestas aplicações são usados algoritmos de roteamento que decidem por onde a
informação deve seguir.

Vale ressaltar que aqui não se trata necessariamente de redes do tipo Internet,
mas especialmente de redes ATM (como a de telefone), onde é necessário encontrar o

2008_SI_-_PesquisaOperacional_II_-_o2007 116
Pesquisa Operacional II 4
Atualização: 13/08/2008

caminho ideal para realizar uma conexão. Neste curso serão apresentados dois
algoritmos de caminho mínimo: um mais simples e outro mais robusto.

Figura 4 - Qual o melhor caminho para ir da Origem (O) ao Destino (D)?

Figura 5 - E agora, qual o melhor caminho para ir de O a D?

Também veremos, rapidamente, o algoritmo Network Simplex, que serve para


casos onde temos múltiplas origens e múliplos destinos, seja de cargas ou de dados.

- Problemas de Simulação

Imagine que você foi contratado por uma empresa que mantém a Rodovia dos
Imigrandes, com o objetivo de construir um sistema de informações que indique
quantos postos de pedágio são necessários colocar em funcionamento, dada uma
previsão de veículos que irão descer para o litoral.

Em seu sistema, você usa a taxa de atendimento de cada posto de pedágio com
a média de chegada dos veículos e calcula quantos postos de pedágio serão
necessários. Mas aí o seu cliente chega e diz: "Olha, eu queria saber quanto será, com
99,5% de probabilidade, o maior número de carros que ficarão em uma fila do
pedágio, para que eu possa ajustar os cones para liberar o espaço...".

Obviamente não é possível usar uma conta simples, como a usada no seu
sistema para dimensioná-lo, para responder à esta pergunta. O método mais simples
para avaliar este tipo de situação é, em geral, a simulação.

2008_SI_-_PesquisaOperacional_II_-_o2007 117
Pesquisa Operacional II 5
Atualização: 13/08/2008

A simulação usará de métodos estocásticos (envolvendo aleatoriedade) para


simular o que ocorreria na realidade, as taxas de chegadas dos carros (que, na
realidade, não são iguais à média durante todo o tempo!) para estimar a informação
desejada.

- Problemas Gerais

Imagine que, em outra situação, você é contratado para desenvolver um


sistema que, por exemplo, deve calcular quais são os professores serão alocados em
quais horários de aula para minimizar o número de professores e alocá-los dentro das
restrições de cada um deles. Ao montar o modelo, percebe que o tal problema não se
encaixa em qualquer um dos métodos "rápidos" conhecidos e, pelo método Simplex,
até instâncias pequenas demoram uma eternidade para serem resolvidas.

Se o cliente do sistema se contentar com uma solução muito boa, ainda que
não seja a melhor, há uma saída: o uso dos chamados métodos heurísticos. Métodos
Heurísticos são processos que, em geral, determinam soluções muito boas para um
determinado problema, mas não há garantia alguma que esta solução seja ótima
(embora em muitos casos ela seja).

Entretanto, é importante frisar que não existe uma heurística genérica: "Use
essa, que resolve qualquer problema". Uma heurística é sempre desenvolvida
especificamente para um tipo de problema (ou para um problema específico, no caso
mais comum). Entretanto, existem alguns mecanismos que podem ser facilmente
adaptáveis para diversos problemas: são as chamadas Meta-Heurísticas. As
Meta-Heurísticas não são genéricas, mas podem ser facilmente adaptadas para um
grande número de problemas distintos.

2. PESQUISA OPERACIONAL E SISTEMAS DE INFORMAÇÃO

Conceitos Chave:
- Busca e estatística em Banco de Dados => é o mínimo!
- Gerar mais informações
- Gerar informações mais úteis
- Gerar informações novas

Talvez muitos se perguntem o que a Pesquisa Operacional tem a ver com um curso de
Sistemas de Informação?

Ora, o objetivo de um profissional de Sistemas de Informação é construir sistemas


capazes de fornecer informações relevantes para seus utilizadores. Isso, em geral, envolve o
processamento de grandes quantidades de dados e a geração de alguns números, reduzindo

2008_SI_-_PesquisaOperacional_II_-_o2007 118
Pesquisa Operacional II 6
Atualização: 13/08/2008

uma infinidades de dados em um pequeno conjunto de informações que seja mais facilmente
compreendido pelos administradores de um processo ou serviço.

Talvez a forma mais básica de Sistema de Informação seja a geração de relatórios


através de análises de um Banco de Dados. Uma grande massa de dados é analisada através
de uma diretiva especificada pelo programador (no SQL, através de um SELECT) e um
resultado é apresentado.

No caso mais simples de manipulação de banco de dados, trata-se de uma simples


busca. Em um caso mais complexo, podem ser várias estatísticas. "Quantos clientes já
tiveram seus carros roubados? Qual a porcentagem dos clientes tem seguro de veículos?
Quantos, destes, tiveram seu carro roubado? Quantos dos carros roubados eram de uma
determinada marca?"...

Entretanto, mesmo nesta forma "mais complexa", o uso de banco de dados é o básico,
o mínimo necessário. As informações obtidas não são as mais úteis e claras, uma vez que
ainda requerem processamento posterior.

Além das buscas e estatísticas sobre bancos de dados serem o mínimo que um sistema
de informação precisa faz, de forma geral já existem muitos softwares comerciais que
atentem à quase todas as necessidades que uma empresa possa ter. Por esta razão, um
profissional da área de Sistemas de Informação não pode se satisfazer apenas com esse
conhecimento; ele precisa ir além e desenvolver softwares que forneçam mais informações e
informações mais interessantes aos seus clientes.

Um sistema de informações não deve apenas se preocupar em diagnosticar um


problema, como "as vendas caíram no terceiro trimestre do ano", mas também sugerir
soluções, como "precisamos redirecionar as vendas para a cidade X, o que reduzirá o nosso
custo e aumentará nossa competitividade". E este tipo de resposta, apesar de muitas vezes ser
baseado em informações de um banco de dados, não sai com uma simples query; é necessário
todo um processamento adicional visando um objetivo específico.

É justamente esse processamento específico que é desenvolvido na Pesquisa


Operacional; muitos dos problemas comuns já possuem um método usual de cálculo de sua
solução ótima, outros exigem que um algoritmo de otimização seja desenvolvido... mas isso
nem sempre é possível, tornando-se necessário o uso de uma heurística (sistema especialista)
ou a aplicação de uma meta-heurística específica, que produzam "apenas" boas soluções.

O trabalho do profissional de Sistemas de Informações e sua relação com a Pesquisa


Operacional está no âmbito da aplicação. A função é desenvolver sistemas que apliquem as
técnicas de Pesquisa Operacional visando encontrar informações mais úteis ao cliente do que
uma mera estatística histórica. Trata-se de gerar novas informações ao invés de apenas
sintetizar e/ou modificar a forma de apresentação de velhas informações.

2008_SI_-_PesquisaOperacional_II_-_o2007 119
Pesquisa Operacional II 7
Atualização: 13/08/2008

Assim, a Pesquisa Operacional traz para o profissional de Sistemas de Informação


uma oportunidade de se diferenciar no mercado, de desenvolver sistemas mais completos e
mais informativos, podendo alcançar uma posição de destaque no mercado.

3. BIBLIOGRAFIA

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

ARENALES, M; ARMENTANO, V; MORABITO, R; YANASSE, H. Pesquisa


Operacional. Rio de Janeiro: Editora Campus, 2006

2008_SI_-_PesquisaOperacional_II_-_o2007 120
Pesquisa Operacional II 1
Atualização: 18/08/2008

Unidade 1: Introdução aos Problemas de Fluxo em Rede


Prof. Daniel Caetano

Objetivo: Apresentar o conceitos dos Problemas de Fluxo em Rede e sua


representação por Grafos.

Bibliografia: AHUJA et al.; MOREIRA; ARENALES et al.

INTRODUÇÃO

Conceitos Chave:

- Problema da Distribuição x Problema do Caminho Mínimo


- Uso do Simplex + Modelo de Conservação de Massa => Lento!
- Conexões + Interligações => Rede
- Escolha de Interligações => Problema de Fluxo em Rede
* Exemplos
* Algoritmos específicos

Um certo dia é solicitado que seja implementado no sistema da empresa um módulo


que seja capaz de calcular as rotas que serão feitas pelos distribuidores do produto fabricado;
este caminho deve ser tal que os trajetos sejam mínimos e todos os pontos de entrega sejam
satisfeitos.

Figura 1: Qual trajeto o caminhão deve fazer da Base aos pontos de demanda D1~D4?

Um outro dia é solicitado que seja desenvolvido um módulo para o sistema do GPS
dos caminhões, capaz de encontrar o melhor caminho do ponto em que o caminhão está, até o
ponto de entrega.

2008_SI_-_PesquisaOperacional_II_-_o2007 121
Pesquisa Operacional II 2
Atualização: 18/08/2008

Figura 2: Qual trajeto o caminhão C deve fazer até o ponto de entrega PE?

Como resolver estes problemas? Não há dúvida que, dada uma modelagem adequada -
alguma variação de um modelo de conservação de massa1 - estes problemas todos podem ser
resolvidos pelo método Simplex. Entretanto, dada a dimensão que estes problemas podem
adquirir (em termos de números de equações), muitas vezes o Simplex se torna lento e
desajeitado em seu tratamento.

Observação 1: Um modelo de conservação de massa é aquele em que impomos como restrições que tudo
que chegar a um dos pontos de conexão tem de ser igual a tudo que sai dos pontos de conexão.

Assim, é preciso análisá-los com maior cuidado, observar que características possuem
em comum. No primeiro caso, por exemplo, temos um problema em que são envolvidas
cargas a serem levadas de um ponto a outro, passando por diversos pontos intermediários,
todos eles interligados por ruas. No segundo caso, temos um caminhão que precisa ser
levado de um ponto a outro, passando por diversos pontos intermediários, todos eles
interligados por ruas. Parece haver uma semelhança entre eles, não?

De fato, a solução de ambos os problemas passa por decidir quais as interligações


entre pontos que devem ser usadas. De forma mais concreta, a decisão que precisa ser tomada
é: quais das setas representadas na figura 2 devem ser usadas pelo caminhão C para chegar ao
ponto de entrega PE?

Este tipo de problema, que envolvem algum tipo de movimentação entre pontos no
espaço (ou tempo), passando por interconexões entre estes pontos, é chamado de "Problema
de Fluxo em Rede", pois deseja-se determinar por onde ocorrerá o fluxo nas interconexões de
uma rede qualquer. Problemas que entram nesta categoria são aqueles que envolvem tráfego
de veículos, conexões de comunicação, distribuição de cargas, transporte de passageiros,
dentre outros.

Mas como é possível tirar partido das características deste tipo de problema?

Ao longo dos anos estas características comuns a todos estes problemas foram
exploradas na criação de algoritmos específicos, buscando soluções mais rápidas, mais
eficientes computacionalmente, para tais problemas.

2008_SI_-_PesquisaOperacional_II_-_o2007 122
Pesquisa Operacional II 3
Atualização: 18/08/2008

1. GRAFOS

Conceitos Chave:

- Representação de Fluxo em Rede => Grafo


- Pontos => Nós
- Interconexões => Arcos
- Grafo Direcionado x Grafo Não-Direcionado
- Representação em código (Java)

Quando se pretende descrever um problema, é necessário o uso de uma representação


eficaz. No caso do problema de fluxo em rede, existe um problema que envolve pontos no
espaço (ou tempo) e suas interconexões. Uma forma visual conveniente para representar estes
modelos já foi vista na figura 2, reproduzida na figura 3:

Figura 3: Um exemplo de representação de problema de fluxo em rede

Esta é, de fato, a representação mais usual para este tipo de problema; esta
representação é chamada de grafo. Em um grafo de um problema de transporte, entretanto, os
nomes não são "pontos" e "interconexões". Os pontos são chamados nós e os elementos de
interconexão entre nós são denominados arcos.

Os arcos podem ser direcionados (ou seja, indicarem explicitamente qual seu nó
origem e qual seu nó destino), permitindo a "passagem" por aquele arco em apenas uma
direção (da origem para o destino). Neste caso, diz-se que o grafo é direcionado (digrafo),
como o apresentado na figura 3.

Caso os arcos não sejam direcionados (ou seja, permitem "passagem" nas duas
direções, o grafo será não-direcionado, como o exemplo da figura 1.

Computacionalmente, os grafos são, em geral, representados como um conjunto de


nós (um vetor de objetos nó, por exemplo) e um conjuno de arcos (um vetor de objetos arco,
por exemplo), sendo que estes últimos referenciam aos objetos nó aos quais estão ligados.

2008_SI_-_PesquisaOperacional_II_-_o2007 123
Pesquisa Operacional II 4
Atualização: 18/08/2008

2. BIBLIOGRAFIA

AHUJA, R.K; MAGNANTI, T.L; ORLIN, J.B. Network Flows: Theory, Algorithms and
Applications. New Jersey: Prentice Hall, 1993.

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

ARENALES, M; ARMENTANO, V; MORABITO, R; YANASSE, H. Pesquisa


Operacional. Rio de Janeiro: Editora Campus, 2006

2008_SI_-_PesquisaOperacional_II_-_o2007 124
Pesquisa Operacional II 1
Atualização: 25/08/2008

Unidade 2: O Problema do Transporte


Prof. Daniel Caetano

Objetivo: Apresentar a modelagem do problema do transporte e capacitar para sua


solução com o uso de algoritmo específico.

Bibliografia: AHUJA et al.; MOREIRA; ARENALES et al.

INTRODUÇÃO

Conceitos Chave:

- Problema: incluir distribuição no sistema da Qualquer-Cola


- Problema do Transporte
* Produtores
* Consumidores
* Deslocamentos com custos diferentes
* Minimizar custo
- Simplex?

Ao desenvolver um sistema de vendas de Qualquer-Cola online, para donos de bares,


seu cliente solicita que você inclua um sistema que ajude-o a planejar a distribuição dos
produtos. A Qualquer-Cola tem uma série de fábricas/centros de distribuição, cada um deles
com uma determinada produção, e deseja saber quantos engradados enviará de cada centro de
distribuição para cada ponto de venda, sendo que cada um destes pontos possui uma demanda
específica, com o objetivo de reduzir os custos de transporte.

Este tipo de problema, bastante comum, é denominado "Problema do Transporte", e


se refere ao problema básico em que temos uma determinada quantidade de origens de um
produto (fábricas, por exemplo), com uma capacidade de produção limitada, e destinos para
este produto (lojas, por exemplo), que possuem uma determinada demanda pelos produtos.

Em geral, é possível transportar de qualquer fábrica para qualquer loja. Entretanto, os


custos podem variar bastante em cada caso. Por esta razão, existe uma dúvida clássica: quanto
levar de cada fábrica para cada loja de modo que o custo de transporte seja mínimo?

Este tipo de problema pode ser modelado e resolvido pelo Simplex, mas veremos
também uma forma mais rápida e eficiente de solucioná-los.

2008_SI_-_PesquisaOperacional_II_-_o2007 125
Pesquisa Operacional II 2
Atualização: 25/08/2008

1. UM PROBLEMA DE TRANSPORTE

Conceitos Chave:

- Fabricas => Capacidade de Produção


- Lojas => Demanda
- Custos F para L
- Grafo

Duas fábricas (F1 e F2) possuem capacidade de produção de 10000 e 15000


engradados de Qualquer-Cola respectivamente, fornecendo um total de 25000 engradados que
devem ser entregues em 3 lojas (L1, L2 e L3), que possuem demandas de 10000, 4000 e
11000 engradados respectivamente, completando demanda por 25000 engradados. Os custos
de transporte (por engradado) de uma fábrica até uma loja são:

L1 L2 L3
F1 13 8 9
F2 12 9 10

Qual a quantidade de engradados que deve ser levada de cada fábrica Fx para cada
loja Ly, de forma a minimizar o custo de transporte?

2. MODELAGEM MATEMÁTICA

Conceitos Chave:

- Variáveis de Decisão: Xij => Quanto de i para j?


- Função Objetivo: Minimizar soma dos custos de todos os deslocamentos
- Restrição de Envio: Envio de Fábricas ü Produção
- Restrição de Recepção: Recepção de Lojas ¶ Demanda
- Forma Padrão? Simplex?

A primeira coisa a se analisar, são as variáveis de decisão, que é baseada na pergunta


original: "quanto deve ser transportado de cada fábrica para cada loja?".

2008_SI_-_PesquisaOperacional_II_-_o2007 126
Pesquisa Operacional II 3
Atualização: 25/08/2008

Assim, se a quantidade de engradados transportada da fábrica i para a loja j for


chamada de Xij, pode-se dizer, por exemplo, que X11 representa a quantidade de engradados
que deve ser transportada da fábrica 1 para a loja 1. Da mesma forma, X12 representa a
quantidade de engradados que deve ser transportada da fábrica 1 para a loja 2, X21 representa
a quantidade de engradados que deve ser transportada da fábrica 2 para a loja 1 e assim por
diante.

Como decorrência, se transportar um engradado da fábrica 1 para a loja 1 custa $ 13


(como indicado na tabela) e o número de engradados transportado da loja 1 para a fábrica 1 é
X11, então pode-se dizer que o custo do transporte dos engradados da fábrica 1 para a loja 1 é:

13 * X11

Se nenhum engradado for transportado, X11 = 0, então o custo será 13 * 0 = 0... ou


seja, se nada for transportado da fábrica 1 para a loja 1, o custo será zero. Se um engradado
for transportado, X11 = 1 e o custo será 13 * 1= 13. Finalmente, se 100 engradados forem
transportados da fábrica 1 para a loja 1, X11 = 100 e o custo será 13 * 100 = 1300.

O raciocínio pode ser feito para todas as outras possibilidades de transporte; o custo
total do transporte será a soma de todas estas parcelas que, neste caso, podem ser
representadas da seguinte forma.

CT = 13 * X11 + 8 * X12 + 9 * X13 + 12* X21 + 9 * X22 + 10 * X23

Como o objetivo é minimizar o custo de transporte, a função objetivo fica:

[MIN] 13 * X11 + 8 * X12 + 9 * X13 + 12* X21 + 9 * X22 + 10 * X23

Para um modelo matemático completo falta, ainda, definir as restrições do problema.


Neste tipo de problema há basicamente 2 conjuntos de restrições: a) Nenhuma fábrica pode
enviar mais do que produz; b) Nenhuma loja pode receber menos do que necessita.

2.1. Nenhuma fábrica envia mais do que produz

A soma de tudo que sai de uma fábrica deve ser menor ou igual à sua produção. No
caso da fábrica 1, que produz 10000 unidades, seu envio total é X11 + X12 + X13 (soma daquilo
que ela envia para as lojas 1, 2 e 3, respectivamente). Assim, a primeira restrição será:

X11 + X12 + X13 ü 10000

No caso da fábrica 2, que produz 15000, e seu envio total é X21 + X22 + X23 (soma
daquilo que ela envia para as lojas 1, 2 e 3, respectivamente). A segunda restrição, então, fica:

X21 + X22 + X23 ü 15000

2008_SI_-_PesquisaOperacional_II_-_o2007 127
Pesquisa Operacional II 4
Atualização: 25/08/2008

2.2. Nenhuma loja recebe menos do que necessita

A loja 1 precisa receber 10000 unidades. Tudo que ela recebe é X11 + X21 (soma do
que é enviado para ela pelas fábricas 1 e 2, respectivamente). Assim, a terceira restrição será:

X11 + X21 ¶ 10000

Analogamente, as restrições quatro e cinco (referentes às lojas 2 e 3) são:

X12 + X22 ¶ 4000


X13 + X23 ¶ 11000

Desta maneira, o modelo final será:

F.O. [MIN] 13 * X11 + 8 * X12 + 9 * X13 + 12* X21 + 9 * X22 + 10 * X23


S.A. X11 + X12 + X13 ü 10000
X21 + X22 + X23 ü 15000
X11 + X21 ¶ 10000
X12 + X22 ¶ 4000
X13 + X23 ¶ 11000

Em alguns casos pode-se desejar que o número de unidades enviadas a cada loja seja
exatamente igual à demanda; basta, neste caso, substituir os sinais "¶" por "=".

É possível passar este problema para a forma padrão e resolvê-lo pelo Simplex.
Entretanto, será apresentada uma maneira de realizar esse processo.

3. ALGORITMO DO PROBLEMA DO TRANSPORTE

Conceitos Chave:

- Algoritmo Específico
* 100 vezes mais rápidos que Simplex
* Exige Menos Memória => Resolver Problemas Maiores
* Soluções "inteiras"
- Solução inicial: Método do Canto Noroeste
- Idéia da Realocação de Carga
- Algoritmo do Problema do Transporte

2008_SI_-_PesquisaOperacional_II_-_o2007 128
Pesquisa Operacional II 5
Atualização: 25/08/2008

Apesar do Simplex resolver a contento um problema como o apresentado, é útil usar


um algoritmo específico. Segundo Render e Stair Jr. (2000, apud Moreira, 2006), estes
algoritmos são particularmente interessantes porque:

1) Seus tempos de computação são, em geral, 100 vezes menores que os do Simplex.
2) Requerem menos memória do computador, permitindo resolver problemas maiores.
3) Produzem sempre soluções inteiras, o que é importante no problema do transporte.

No método a ser apresentado, assim como ocorria no Simplex, é preciso encontrar


uma solução inicial válida. Infelizmente, aqui a solução inicial não é obtida zerando variáveis
e é necessário um método específico para iniciar o processo. Existem vários métodos para
isso. Neste curso será apresentado um chamado "método do canto noroeste".

3.1. O Método do Canto Noroeste

O primeiro passo é desenhar uma tabela, que terá sempre 2 colunas a mais que o
número de centros de demanda (lojas, por exemplo) e 2 linhas a mais que o número de
produtores (fábricas, por exemplo). Para o problema da Qualquer-Cola apresentado, a tabela
inicial é:

L1 L2 L3 Suprimento
F1 10.000

F2 15.000

Demanda 10.000 4.000 11.000

Nesta tabela, devem ser acrescentados os custo de transporte de cada trajeto dentro
dos retângulos vazios no meio, entre parênteses, como indicado na tabela a seguir:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000

F2 (12) (9) (10) 15.000

Demanda 10.000 4.000 11.000

Agora, a partir da primeira célula no canto superior esquerdo (canto noroeste), deve-se
tentar preencher a demanda de cada coluna (da esquerda para a direita), seguindo nas linhas
de cima para baixo. Nas tabelas seguintes estarão anotados em vermelho o valor que sobra de
suprimento de cada fábrica e o que falta em cada centro de demanda após a alocação em cada
passo:

2008_SI_-_PesquisaOperacional_II_-_o2007 129
Pesquisa Operacional II 6
Atualização: 25/08/2008

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0
F2 (12) (9) (10) 15.000
15.000
Demanda 10.000 4.000 11.000
0 4.000 11.000

Como a demanda da primeira coluna pode ser preenchida pelo suprimento da primeira
linha, segue-se para a segunda coluna. Considerando a demanda da segunda coluna (4000), a
primeira linha ainda tem condições de atendê-la?

Como a fábrica F1 já usou toda a sua produção para suprir a loja L1, a resposta é
NÃO. Assim, indica-se ZERO na posição F1/L2 e parte-se para a segunda linha (segunda
fábrica), que ainda tem 15000 engradados. Usamos uma parte destas unidades para suprir a
loja L2, na coluna 2:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0 0
F2 (12) (9) (10) 15.000
4.000 11.000
Demanda 10.000 4.000 11.000
0 0 11.000

Como a demanda da segunda coluna pode ser preenchida pelo suprimento da segunda
linha, parte-se para a terceira coluna. Considerando a demanda da terceira coluna (11000), a
segunda linha (fábrica) ainda tem condições de atendê-la?

Como sobraram ainda 11.000 unidades na F2, a resposta é SIM! Assim, devem ser
usadas estas unidades para suprir a demanda de L3:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0 0
F2 (12) (9) (10) 15.000
4.000 11.000 0
Demanda 10.000 4.000 11.000
0 0 0

Esta é uma solução possível, já que os requisitos foram respeitados. Entretanto, esta
solução tem um custo alto: 13,00*10.000 + 9,00*4.000 + 10,00*11.000 = 130.000,00 +
36.000,00 + 110.000,00 = 276.000,00. Para obtenção da tabela final, deve-se marcar as
células vazia com um pequeno "-".

2008_SI_-_PesquisaOperacional_II_-_o2007 130
Pesquisa Operacional II 7
Atualização: 25/08/2008

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0 -
F2 (12) (9) (10) 15.000
- 4.000 11.000
Demanda 10.000 4.000 11.000

Com esta solução inicial pode-se partir para o algoritmo do problema do transporte.

3.2. A Lógica de Realocação de Cargas

O algoritmo baseia-se na realocação de cargas, ou seja, pequenas mudanças na


solução, trocando o fornecedor de uma loja por outro. Antes de ser apresentado o algoritmo
propriamente dito, é preciso entender com clareza o mecanismo de realocação de carga.

Suponha, por exemplo, que tenha sido detectado que seria interessante passar a
transportar UM ENGRADADO da fábrica F2 para a loja L1. Isso pode ser representado
colocando mais uma unidade na célula F2-L1 da tabela:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0 -
F2 (12) (9) (10) 15.000
+1 4.000 11.000 15.001
Demanda 10.000 4.000 11.000
10.001

Entretanto, como é possível ver, isso provoca um desequilíbrio: para atender a esta
situação, F2 teria que produzir 15001 unidades (ao invés de 15000). Para contornar este
problema, é preciso diminuir o número de engradados entregues pela fábrica F2 em alguma
das outras lojas, como por exemplo a loja 2 (célula F2/L2):

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0 -
F2 (12) (9) (10) 15.000
+1 4.000-1 11.000 15.000
Demanda 10.000 4.000 11.000
10.001 3.999

Entretanto, apesar de isso ter corrigido o suprimento de F2, agora a demanda de L2


não está sendo atendida (3999, ao invés de 4000). Para acertar esta situação, é necessário
enviar um engradado de F1 para L2:

2008_SI_-_PesquisaOperacional_II_-_o2007 131
Pesquisa Operacional II 8
Atualização: 25/08/2008

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000 0+1 - 10.001
F2 (12) (9) (10) 15.000
+1 4.000-1 11.000 15.000
Demanda 10.000 4.000 11.000
10.001 4.000

A demanda de L2 está corrigida, agora. Entretanto, o suprimento de F1 está maior que


sua capacidade (10001, ao invés de 10000). Para ajustar o suprimento de F1, pode-se reduzir
o envio de engradados da fábrica F1 para a loja L1, sendo isso indicado com a subtração de
uma unidade da posição F1/L1:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000-1 0+1 - 10.000
F2 (12) (9) (10) 15.000
+1 4.000-1 11.000 15.000
Demanda 10.000 4.000 11.000
10.000 4.000

Agora, com a realocação completa, a tabela está novamente equilibrada. Mas será que
realmente valeu a pena fazer essa realocação? Quanto o custo diminuiu por realocar as cargas
desta maneira?

Isto pode ser calculado de duas formas: a primeira delas é refazendo toda a conta de
custo novamente... ou fazer a conta da diferença de custo. Isso pode ser feito verificando que,
nas células em que foi aumentada uma unidade, haverá um acréscimo de custo:

F1/L2: +1 * 8 = 8
F2/L1: +1 * 12 = 12

Por outro lado, nas células onde houve uma diminuição de uma unidade, houve um
decréscimo de custo:

F1/L1: -1 * 13 = -13
F2/L2: -1 * 9 = -9

O valor total da diferença de custo foi: 8 + 12 -13 -9 = 20 - 22 = -2

O resultado -2 significa que o transporte ficou $ 2,00 mais barato com essa relocação.
É uma diferença baixa porque apenas um engradado foi realocado. Se mais engradados forem
realocados, a economia será maior. Como saber qual o máximo de relocações que posso
fazer? Simples. O truque é substituir o "+1" e "-1" das células por uma variável d, da seguinte
forma:

2008_SI_-_PesquisaOperacional_II_-_o2007 132
Pesquisa Operacional II 9
Atualização: 25/08/2008

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
10.000-d 0+d -
F2 (12) (9) (10) 15.000
+d 4.000-d 11.000
Demanda 10.000 4.000 11.000

Observando as células que estão perdendo unidades (-d), ou seja, F1/L1 e F2/L2, é
possível ver que elas possuem, respectivamente, 10.000 e 4.000 engradados. O menor valor
entre eles é, portanto, 4.000. Assim, o máximo valor que d pode assumir é 4.000 (pois,
obviamente, nenhum valor na tabela pode ser negativo). Assim, se for considerado que d =
4000, o resultado da relocação máxima será:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
6.000 4000 -
F2 (12) (9) (10) 15.000
4000 0 11.000
Demanda 10.000 4.000 11.000

Observe, porém, que a célula que limitou o valor de d e que agora possui valor ZERO
(F2/L2) deve ser alterada para que possua um "-".

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
6.000 4000 -
F2 (12) (9) (10) 15.000
4000 - 11.000
Demanda 10.000 4.000 11.000

Este é o princípio da relocação, que pode ser realizada de uma forma mecânica: a
relocação sempre ocorre escolhendo-se uma célula vazia para acrescentar um valor d,
determinando um ciclo fechado com células que possuem valores de carga a transportar,
alternando o sinal entre + e -, como representado na seqüência abaixo:

2008_SI_-_PesquisaOperacional_II_-_o2007 133
Pesquisa Operacional II 10
Atualização: 25/08/2008

Com o ciclo determinado, verifica-se qual célula perde carga (-d) que possui o menor
valor de carga e este será o valor limite para d. Feito isso, Realiza-se as contas de economia, a
célula que ficou zerada ganha o "-" e o passo está finalizado.

Entretanto, apesar de este exemplo ter sido apresentado com uma célula qualquer, esse
processo não deve ser realizado a esmo, para todas as células vazias. A escolha de qual célula
receberá a realocação de carga é a essência do Algoritmo do Problema do Transporte.

3.3. O Algoritmo do Problema do Transporte

O algoritmo do problema do transporte é um procedimento que permite identificar


qual a célula vazia que trará maior ganho se passar a conter carga, através de um processo de
realocação de carga. Adicionalmente, o procedimento permite verificar em que momento
nenhuma realocação permitirá economias, indicando o fim do processo.

Assim, a idéia do algoritmo é:

1) Identificar qual a melhor célula para receber realocação de carga;


2) Verificar se o problema está finalizado;
3) Se não, realizar a realocação de carga, como já apresentado, e voltar ao passo 1.

2008_SI_-_PesquisaOperacional_II_-_o2007 134
Pesquisa Operacional II 11
Atualização: 25/08/2008

Quando nenhuma relocação trouxer qualquer benefício, a solução ótima terá sido
encontrada. O algoritmo é mais facilmente compreendido se apresentado na forma de
exemplo.

Para identificar a célula que trará mais economia ao receber carga, será necessário
voltar à tabela inicial do problema da Qualquer Cola, com uma linha e uma coluna somadas à
mesma:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000
10.000 0 -
F2 (12) (9) (10) 15.000
- 4.000 11.000
Demanda 10.000 4.000 11.000

O processo inicia-se pela determinação dos valores da linha K e coluna L. Para isso,
determinamos que o valor da primeira linha da coluna L será ZERO:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000 0
10.000 0 -
F2 (12) (9) (10) 15.000
- 4.000 11.000
Demanda 10.000 4.000 11.000

Os outros valores serão determinados iterativamente: para cada célula já com carga, o
valor correspondente de L e K deve ser tal que sua soma seja exatamente o custo unitário da
célula. Por exemplo, sendo o L da primeira linha é igual a zero e o custo da célula F1/L1
igual a 13, tem-se que 0 + K = 13 e, portanto, K da coluna L1 =13.

Da mesma forma, sendo o L da primeira linha é igual a zero e o custo da célula F1/L2
igual a 8, tem-se que 0 + K = 8 e, portanto, K da coluna L2 =8.

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000 0
10.000 0 -
F2 (12) (9) (10) 15.000
- 4.000 11.000
Demanda 10.000 4.000 11.000

K 13 8

2008_SI_-_PesquisaOperacional_II_-_o2007 135
Pesquisa Operacional II 12
Atualização: 25/08/2008

Uma vez determinado o K da coluna L2, o L da linha F2 fica automaticamente


definido: uma vez que a célula F2/L2 tem custo 9 e o K da coluna L2 é 8, então é preciso que
8 + L = 9, o que leva a um L = 1 para a linha F2.

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000 0
10.000 0 -
F2 (12) (9) (10) 15.000 1
- 4.000 11.000
Demanda 10.000 4.000 11.000

K 13 8

Este L, junto com o custo da célula F2/L3, define o K da coluna L3:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000 0
10.000 0 -
F2 (12) (9) (10) 15.000 1
- 4.000 11.000
Demanda 10.000 4.000 11.000

K 13 8 9

Com base nesta tabela, agora, é possível calcular o índice de melhoria de cada célula
vazia. Este índice é calculado com o custo da célula vazia, subtraído do K de sua coluna e do
L de sua linha. Por exemplo, a melhoria da célula F1/L3 é:

Célula C -K -L =
F1/L3 9 -9 -0 = 0

Calculando para as outras, temos:

Célula C -K -L =
F1/L3 9 -9 -0 = 0
F2/L1 12 -13 -1 = -2

Este resultado significa que realocar carga para a célula F1/L3 não melhora em nada a
solução... mas realocar carga na célula F2/L1 vai reduzir o custo em $ 2,00 por cada unidade
realocada!

Então, deve-se determinar o ciclo de realocação que acrescenta +d na célula F2/L1:

2008_SI_-_PesquisaOperacional_II_-_o2007 136
Pesquisa Operacional II 13
Atualização: 25/08/2008

A célula F2/L2 determina o limite para d, que é 4000. Fazendo as contas, o resultado
da realocação é:

L1 L2 L3 Suprimento
F1 (13) (8) (9) 10.000
6.000 4000 -
F2 (12) (9) (10) 15.000
4000 - 11.000
Demanda 10.000 4.000 11.000

Com a nova distribuição, repete-se o processo, calculando os novos Ls e Ks:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000 0
6.000 4000 -
F2 (12) (9) (10) 15.000 -1
4000 - 11.000
Demanda 10.000 4.000 11.000

K 13 8 11

E, agora, calcula-se novamente os índices de melhoria para as células vazias:

Célula C -K -L =
F1/L3 9 -11 -0 = -2
F2/L2 9 -8 -(-1) = 2

Agora a célula que provoca melhoria é a célula F1/L3. O ciclo dela fica:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000
6.000-d 4000 +d
F2 (12) (9) (10) 15.000
4000+d - 11.000-d
Demanda 10.000 4.000 11.000

2008_SI_-_PesquisaOperacional_II_-_o2007 137
Pesquisa Operacional II 14
Atualização: 25/08/2008

E o valor máximo que d pode assumir agora é 6000. Assim, recalculando, o resultado
será:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000
- 4000 6.000
F2 (12) (9) (10) 15.000
10.000 - 5.000
Demanda 10.000 4.000 11.000

Novamente, repete-se o processo, calculando os novos Ls e Ks:

L1 L2 L3 Suprimento L
F1 (13) (8) (9) 10.000 0
- 4000 6.000
F2 (12) (9) (10) 15.000 1
10.000 - 5.000
Demanda 10.000 4.000 11.000

K 11 8 9

E os índices de melhoria das células vazias:

Célula C -K -L =
F1/L1 13 -11 -0 = 2
F2/L2 9 -8 -1 = 0

Como não é possível mais melhorar a solução, o problema está finalizado. O resultado
final, ótimo, é: X12 = 4.000, X13 = 6.000, X21 = 10.000 e X23 = 5.000. Os demais Xij são zero.

4. DIFERENÇAS ENTRE OFERTA E DEMANDA

Conceitos Chave:

- Algoritmos funciona para Oferta = Demanda


- Oferta maior => Sem problemas, entretanto
- Demanda maior => Fábrica Fictícia
* Oferta = Excesso de Demanda
* Custo de transporte ZERO

2008_SI_-_PesquisaOperacional_II_-_o2007 138
Pesquisa Operacional II 15
Atualização: 25/08/2008

É notório que o algoritmo apresentado funciona apenas no caso em a oferta total (das
fábricas) e a demanda total (das lojas) é exatamente a mesma; por outro lado, na prática, isso
raramente ocorre. Ou a oferta ou a demanda é maior.

Quando a oferta é maior, o problema pode ser resolvido normalmente. Simplesmente


o total transportado será inferior à produção global das fábricas. Entretanto, se a demanda for
maior, o problema se torna insolúvel.

Para contornar este problema, basta introduzir uma fábrica fictícia, capaz de produzir
exatamente a quantidade que falta de unidades para o equilíbrio entre oferta e demanda, e
ligada a todas as lojas, com custo de transporte ZERO.

Isso faz com que o problema seja solúvel e o custo de transporte seja calculado (e
minimizado) corretamente. Entretanto, as lojas que receberem mercadorias da fábrica fictícia
estarão, na verdade, deixando de receber estes produtos.

5. EXERCÍCIO

Três fábricas (F1, F2 e F3) possuem capacidade de produção de 10000 unidades,


15000 unidades e 5000 unidades respectivamente, compondo um total de 30000 unidades que
devem ser entregues em 4 lojas (L1, L2, L3 e L4) que possuem demandas de 8000 unidades,
4000 unidades, 7000 unidades e 11000 unidades respectivamente, completando demanda por
30000 unidades. Os custos de transporte (por unidade) das fábrica até as loja são:

L1 L2 L3 L3
F1 13 8 9 12
F2 12 9 10 14
F3 8 8 9 6

Qual a quantidade de produtos que eu levo de cada fábrica Fx para cada loja Ly, de
forma a minimizar o custo de transporte?

6. BIBLIOGRAFIA

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

ARENALES, M; ARMENTANO, V; MORABITO, R; YANASSE, H. Pesquisa


Operacional. Rio de Janeiro: Editora Campus, 2006

AHUJA, R.K; MAGNANTI, T.L; ORLIN, J.B. Network Flows: Theory, Algorithms and
Applications. New Jersey: Prentice Hall, 1993.

2008_SI_-_PesquisaOperacional_II_-_o2007 139
Pesquisa Operacional II 1
Atualização: 04/09/2008

Unidade 3: O Problema do Caminho Mínimo:


Algoritmo Label Setting
Prof. Daniel Caetano

Objetivo: Apresentar o algoritmo Label Setting para a resolução de problemas de


caminho mínimo sem ciclos.

Bibliografia:BRADLEY et al.;AHUJA et al.;CHVATAL; GALLO et al.;WINSTON.

INTRODUÇÃO

Conceitos Chave:

- Problema: reduzir caminho


* Caminho para o motoboy
* Caminho no GPS
- Algoritmos Específicos
* Label Setting
* Label Correcting
* Network Simplex
* Out-of-Kilter

Existem diversas situações na vida de um desenvolvedor de software em que ele se


depara com algum problema em que é necessários otimizar um trajeto, visando redução de
custo de material, transporte, tempo de resposta... enfim, problemas que envolvem a redução
de algum tipo de "custo" que varia de acordo com o trajeto escolhido.

Um destes casos surge quando, durante o desenvolvimento de um sistema gerencial


qualquer, o cliente solicita que seja calculado qual o trajeto que seu motoboy deve fazer para
realizar uma dada entrega, dentre as diversas possibilidades.

Um caso similar, mas de abordagem diferente, é o de um desenvolvedor que é


contratado para desnvolver um sistema de navegação por GPS. Em um dado momento, o
GPS sabe localizar a posição do usuário em uma rede, e sabe onde o usuário quer chegar...
mas qual o melhor caminho entre os dois pontos?

Este tipo de problema de melhor caminho, ponto a ponto, pode ser tratado com
algoritmos mais específicos que o Simplex, como o Label Setting, Label Correcting, Network
Simplex, Out-of-Kilter, dentre outros. No caso específico de caminho mínimo entre dois

2008_SI_-_PesquisaOperacional_II_-_o2007 140
Pesquisa Operacional II 2
Atualização: 04/09/2008

pontos sem mais nenhum tipo de restrição, os algoritmos mais adequados são o Label
Correcting e o Label Setting. Por questões didáticas, será apresentado inicialmente o
algoritmo Label Setting e, em aulas posteriores, o Label Correcting.

1. FORMALIZAÇÃO: "O Problema do Motorista de Taxi"

Conceitos Chave:

- Levar um passageiro de uma Origem a um Destino


- Minimizar distância percorrida
- Não se tem informações do próximo passageiro
- Ignorar trânsito

Um taxista trabalha para uma empresa que lhe paga um valor fixo de acordo com a
distância entre os baricentros das sub-regiões da cidade. Obviamente, para este taxista, é um
grande negócio reduzir ao máximo a distância percorrida, economizando combustível e
tempo. Pensando no problema do taxista, a empresa para a qual ele trabalha encomendou um
software que, dada a origem e o destino, forneça o melhor caminho. Assim, apenas com o
custo adicional do software, a empresa está contribuindo para uma qualidade superior de seus
serviços e também para a satisfação de seus funcionários.

O problema a ser resolvido pelo software trata-se, portanto, de um caso específico


dentro dos problemas de fluxo em rede: o problema do caminho mínimo. Este problema tem
ainda características mais específicas, dentro de um problema de caminho mínimo: é um
problema em que um único passageiro será transportado da origem ao destino. E mais: não há
como saber qual será a origem ou destino do próximo passageiro a ser transportado, o que
restringe a otimização tão somente ao caminho mínimo entre dois pontos.

Como apenas uma unidade (o passageiro) deve ser transportada, também não é
necessária uma preocupação com a limitação de capacidade de fluxo nas vias e, por
simplicidade, será desconsiderada a possibilidade de uma via congestionada.

Uma representação física de um possível problema a ser resolvido para o taxista é


mostrado na figura 1.:

Figura 1: Exemplo de um problema a ser resolvido para o taxista

2008_SI_-_PesquisaOperacional_II_-_o2007 141
Pesquisa Operacional II 3
Atualização: 04/09/2008

Em um problema deste nível, com este número reduzido de vias, possibilidades e


restrições... É até possível pensarmos em um cálculo manual. Entretanto, a situação se torna
extremamente mais complexa para um problema maior, como o apresentado na figura 2.

:
Figura 2: Um problema real, mais complexo

Apesar de provavelmente ser possível utilizar o mesmo processo de solução, fazer


todas as iterações necessárias manualmente seria uma tarefa bastante custosa e ineficiente -
para não dizer aborrecida.

Sabe-se que é possível resolver automaticamente problemas deste tipo, já que existem
soluções que resolvem este tipo de problema em tempo real, em sistemas como o Apontador
e o Google Maps, por exemplo.

2. MODELAGEM MATEMÁTICA

Conceitos Chave:

- Representação como Grafo


* Tamanho dos arcos = Distância de um nó a outro
- Entrada e Saída do Sistema
* Solução possível => rede balanceada
- Equilíbrio no nó
- Equações
* Genérica
* Nó de Origem
* Nó de Destino
* Geral

2008_SI_-_PesquisaOperacional_II_-_o2007 142
Pesquisa Operacional II 4
Atualização: 04/09/2008

- Economia
* Custo de um arco
* Minimizar custo total
- Número de Eqüações + Número de Incógnidas => Não pelo Simplex!

O primeiro passo para uma automatização é a modelagem, onde serão desprezadas


todas as características irrelevantes para a resolução, além de serem explicitados todos os
dados que possam ser necessários à solução.

Como a idéia apresentada desde o início é resolver o problema por um algoritmo de


fluxo em rede, modelar o problema como uma rede é praticamente uma necessidade. Para
tanto, será utilizada a representação em grafo, com nós e arcos, sendo que os nós
representaram as interseções e os arcos as vias (interligações entre os nós).

É possível associar as distâncias aos comprimentos dos arcos, possibilitando o cálculo


das distâncias pela soma dos comprimentos dos arcos. Neste instante, a rede do taxista pode
ser representada como na figura 3.

Figura 3: "Modelagem gráfica" da rede

A indicação dos pontos de partida e chegada pode ser feita com duas seta, uma
mostrando que entrou 1 unidade no ponto de partida e uma indicando que saiu uma unidade
no ponto de chegada. Entretanto, do ponto de vista do equilíbrio dos nós (tudo que entra =
tudo que sai), isso cria um problema sério: há um indivíduo entrando em um nó (nó inicial) e
ele simplesmente desaparece (já que a representação dele saindo do nó simplesmente não foi
feita). A mesma incoerência ocorre no nó final, onde um indivíduo sai do sistema sem nunca
ter chegado àquele nó.

É necessário, então, indicar variáveis em cada um dos arcos, especificando se o


indivíduo está passando por aquele arco ou não, de forma que todos os nós estejam
equilibrados: se chegou um indivíduo a um dado nó, este indivíduo também precisa sair
daquele nó, por algum outro arco. Nesta situação, pode-se dizer que a rede estará resolvida,
ou seja, balanceada, como pode ser visto na figura 4.

2008_SI_-_PesquisaOperacional_II_-_o2007 143
Pesquisa Operacional II 5
Atualização: 04/09/2008

.
Figura 4: Rede balanceada, representando uma solução possível para o problema

Para representar isso matematicamente, será definida uma variável para cada arco,
indicando se o indivíduo passa ou não por aquele arco. Por exemplo, a variável Xij pode
indicar se o indivíduo está usando o arco que sai do nó i para o nó j. Se esta variável vale 1,
indica que o indivíduo passa por aquele arco; se ela valer 0, o indivíduo não passa por aquele
arco.

Em um nó podem chegar vários arcos, e também podem sair vários arcos. Assim, para
que um nó esteja em equilíbrio, isto é, tudo que chegar nele tem também que sair, a soma do
fluxo de todos os arcos que chegam neste nó deve ser ser igual à soma do fluxo de todos os
arcos que saem deste nó, como pode ser visto na figura 5.

:
Figura 5: Um nó balanceado: tudo que chega, sai.

Uma forma simples de dizer isso é que "um nó em equilíbrio é aquele em que não fica
ninguém. Todo mundo que chega nele, sai dele". Considerando que A seja o conjunto de
todos os arcos (m,n) de uma rede, pode-se representar matematicamente esta situação para o
nó i da seguinte forma:

:
Esta eqüação pode ser lida da seguinte forma: "Se for somado o fluxo de todos os
arcos que chegam em um nó i e disso for subtraído o fluxo de todos os nós que saem deste
mesmo nó i, o resultado deve ser sempre zero. Em outras palavras, todo mundo que chega em
no nó i, sai do nó i.

Esta representação é boa para nós genéricos, do meio da rede, mas não é válida para
os nós de Origem e de Destino, já que nestes nós há o "aparecimento" e o "desaparecimento"
de indivíduos, respectivamente.

2008_SI_-_PesquisaOperacional_II_-_o2007 144
Pesquisa Operacional II 6
Atualização: 04/09/2008

Assim, nestes nós, a representação matemática do equilíbrio é ligeiramente diferente.


Como no nó de Origem haverá o surgimento de uma unidade e no de Destino haverá o
desaparecimento de uma unidade, será feita a seguinte modificação: no nó origem, será
adicionado uma unidade na eqüação, e no nó destino será subtraída uma unidade. Assim, as
equações serão:

Nó Genérico:

Nó de Origem:

Nó de Destino:

Como é possível observar, o que muda é apenas o lado direito da eqüação: o valor é 0
nos nós genéricos, -1 no nó de origem e 1 no nó de destino. Assim, é possível indicar a
eqüação para todos os nós de forma genérica:

Se i é o nó inicial, b = -1. Se i é o nó final, b = 1. Em todas as outras situações, b = 0.

Como isso, está completo o conjunto de restrições que garantem o balanceamento dos
nós e, portanto, da rede. Entretanto, as restrições garantem uma solução possível; é necessário
definir uma função objetivo que garanta o menor comprimento possível para a solução.

Como xij terá valor 1 se um arco estiver sendo usado e 0 se não estiver sendo usado,
pode-se afirmar que o custo de um arco na solução é:

cij * xij

onde cij é o comprimento do arco que vai de i para j. Isso significa que se o arco
estiver sendo usado, ele terá um custo cij * 1 = cij. Se o arco não estiver sendo usado, seu
custo será cij * 0 = 0. A soma do custo de todos os arcos definidos desta forma, dá o custo da
solução, e a função objetivo - que é minimizar este custo - pode ser representada da seguinte
forma:

2008_SI_-_PesquisaOperacional_II_-_o2007 145
Pesquisa Operacional II 7
Atualização: 04/09/2008

Em outras palavras, esta eqüação significa que deve-se minimizar a soma do custo de
todos os trechos (arcos) que compõem o caminho usado.

Com essa modelagem completa, é possível observar que há praticamente uma equação
de restrição para cada nó do sistema (o equilíbrio de cada nó) e cada uma delas terá tantas
variáveis quantos forem os arcos que chegam e saem do nó ao qual esta restrição é referente.

O grande número de equações e variáveis decorrentes do grande número de nós e


arcos necessários para representar um "problema real" se torna então uma dificuldade a mais,
se for considerada uma soluçãoo usando o algoritmo Simplex.

3. O ALGORITMO LABEL SETTING

Conceitos Chave:

- Escolher o melhor caminho até cada ponto, partindo do início.


* Recursivamente
- Lógica
a) Etiquetar
b) Selecionar nó "sem pai" para o qual se conhece todos os caminhos
c) Calcular melhor caminho
d) Indicar caminho na etiqueta
e) Voltar ao passo (b)

Se a abordagem para a solução por Simplex torna o problema muito complexo, como
proceder? Neste problema, a modelagem matemática será deixada de lado, e ele será atacado
por um outro ponto de vista: e se o objetivo fosse apenas calcular o caminho mínimo no
pequeno problema do taxista, qual seria uma forma eficiente de realizar o processo?

Ora, se for conhecida a distância até um dado nó por cada um dos caminhos possíveis,
é possível determinar qual o melhor caminho até aquele nó, não? Pois o processo é
exatamente este: para todo nó que se conhecer todos os caminhos de chegada, seleciona-se o
melhor. Esta é exatamente a essência do algoritmo Label Setting.

Entretanto, para resolver problemas grandes é necessário que o processo seja


explicitado da forma mais clara e eficiente possível. Uma maneira de sistematizar tal
procedimento é descrita a seguir:

1. Cria-se uma "etiqueta" em todos os nós, com duas posições: uma para indicar qual
a distância acumulada até aquele nó e outra para indicar qual é o nó que o antecede
no melhor caminho, ou seja, seu nó "pai".
2. Indica-se em todos os nós um distância acumulada igual a "0" e o nó pai "-1",
indicando que nenhum dos nós possui ancetessor ainda.

2008_SI_-_PesquisaOperacional_II_-_o2007 146
Pesquisa Operacional II 8
Atualização: 04/09/2008

3. O processo tem início marcando o nó inicial (de partida) como tendo a si mesmo
como nó "pai".
4. Dentre os nós que não possuem antecessores (pai = -1), deve-se selecionar um em
que todos os arcos de chegada estejam ligados a nós com pai. Se todos os nós já
possuírem pais, chegou-se ao fim do processo.
5. Selecionado o nó nas condições descritas no passo 4, calcula-se as distâncias até
este nó por todos os caminhos (arcos de chegada) possíveis, sendo que esta
distância é a soma da distância até o nó origem do arco de chegada, somada ao
comprimento do arco.
6. Anota-se na etiqueta do nó selecionado a menor distância obstida nos cálculos do
passo 5, e marca-se como "nó pai" em sua etiqueta aquele que foi a origem desta
menor distância calculada.
7. Volta ao passo 4.

Ou seja, anota-se em cada nó qual o melhor caminho para chegar até ele e qual é o
valor da distância acumulada até este ponto, até que todos os nós tenham "o melhor
antecessor" indicado.

Apesar de simples, uma descrição de algoritmo nem sempre é muito esclarecedora. Na


seção seguinte será apresentado um exemplo da aplicação do algoritmo no problema do
taxista, com o objetivo de auxiliar na compreensão do algoritmo.

4. RESOLUÇÃO DE UM PROBLEMA

1. Indicação das etiquetas:

O primeiro passo do procedimento será desenhar a rede e desenhar uma pequena


etiqueta com 2 posições ao lado de cada nó da rede: uma para indicar o nó pai do nó
etiquetado e outra para indicar a distância acumulada até o nó etiquetado. Isso pode ser feito
como é mostrado na figura 6.

:
Figura 6: A rede a ser resolvida com as etiquetas desenhadas.

2008_SI_-_PesquisaOperacional_II_-_o2007 147
Pesquisa Operacional II 9
Atualização: 04/09/2008

2. Preenchimento inicial:

Em seguida, deve-se preencher as etiquetas com os valores iniciais para cada nó: para
o nó inicial, indica-se ele mesmo como pai (0) e em todos os outros indica-se "sem pai" (-1).
Indica-se a distância acumulada igual a 0 em todas as etiquetas. O resultado desta etapa pode
ser visto na figura 7.

:
Figura 7: Preenchimento inicial das etiquetas.

3. Cálculo e indicação da primeira etiqueta:

Como se pode observar pela figura anterior, o nó 1 recebe ligação do nó 0 (origem) e


do nó 2. Como o nó 2 ainda não tem pai (-1 na etiqueta), não se pode etiquetar o nó 1 ainda.

O nó 2, por sua vez, recebe ligação do nó 0 e do nó 3. Como o nó 3 ainda não tem pai,
não é possível etiquetar o nó 2 ainda. O nó destino também está totalmente fora de cogitação
neste instante, já que depende dos nós 1, 2 e 3... Nenhum deles ainda calculado.

Finalmente, o nó 3 recebe ligação apenas do nó 0, que já está calculado (tem pai


indicado). Desta forma, é possível calcular qual a distância acumulada, que será a distância
acumulada em 0 (0 km) somada com a distância do caminho de 0 a 3 (22 km). Assim,
indica-se na etiqueta do nó 3 que seu novo pai é o nó 0, e que a distância acumulada até então
é 22 km, como pode ser visto na figura 8.

:
Figura 8: Preenchimento da primeira etiqueta.

2008_SI_-_PesquisaOperacional_II_-_o2007 148
Pesquisa Operacional II 10
Atualização: 04/09/2008

4. Cálculo e indicação da segunda etiqueta:

Neste passo é possível observar que o nó 1 continua sendo de cálculo inviável, já que
o nó 2 (do qual ele depende) continua sem pai indicado.

Entretanto, agora já é possível calcular o nó 2: ele depende do nó 0 e do nó 3, e ambos


já estão calculados e possuem pais. Mas qual será o nó pai do nó 2, o nó 0 ou o nó 3? A
resposta é simples: aquele que gerar uma menor distância acumulada.

Considerando o nó 0 como pai, a distância acumulada em 0 (0 km) somada com a


distância do arco que liga o nó 0 ao nó 2 (15 km) perfaz uma distância total de 15 km.

Considerando o nó 3 como pai, a distância acumulada em 3 (22 km) somada com a


distância do arco que liga o nó 3 ao nó 2 (2 km), perfaz uma distância total de 24 km.

Diante destes valores, a consideração do nó 0 como pai é mais vantajosa, já que 15km
é uma distância menor que 24km. Por este motivo, o nó 0 será o eleito como "melhor
antecessor". Assim, deve ser indicada na etiqueta do nó 2 que seu "pai" é o nó 0 e que a
distância acumulada é 15 km, como pode ser visto na figura 9.

:
Figura 9: Preenchimento da segunda etiqueta.

5. Cálculo e indicação da terceira etiqueta:

Agora restam apenas dois nós a serem calculados (sem pais): o nó 1 e o nó Destino. O
nó destino depende de 1, então está fora de questão no momento. O nó 1, entretanto, depende
do nó 0 e do nó 2, ambos já calculados. Portanto, o nó 1 é o selecionado para esta etapa.

Novamente, há duas possibilidades de caminho. Vindo pelo nó 0, a distância total


acumulada será de 25 km (0 km + 25 km). Vindo pelo nó 2, entretanto, a distância total
acumulada será de 21 km (15 km + 6 km). É natural, portanto, a seleção do nó 2 como pai
para o nó 1, já que 21km é uma distância menor que 25km.

2008_SI_-_PesquisaOperacional_II_-_o2007 149
Pesquisa Operacional II 11
Atualização: 04/09/2008

Assim, deve ser indicado na etiqueta do nó 1 que seu "pai" é o nó 2,e a distância
acumulada é 21 km, como mostrado na figura 10.

Figura 10: Preenchimento da terceira etiqueta.

6. Cálculo e indicação da última etiqueta:

Só resta agora o cálculo do nó Destino, o qual depende dos nós 1, 2 e 3, sendo que
todos eles já estão devidamente calculados. Há, então, três possibilidades de caminho:

- Vindo pelo nó 1: 21 km + 5 km = 26 km
- Vindo pelo nó 2: 15 km + 12 km = 27 km
- Vindo pelo nó 3: 22 km + 5 km = 27 km

Desta forma, o nó selecionado para nó "pai" do nó Destino é o nó 1, que deve ser


indicado na etiqueta como apresentado na figura 11.

:
Figura 11: Preenchimento da última etiqueta.

7. Indicação do Caminho Mínimo:

Pelo resultado do passo anterior, pode-se verificar que o caminho mínimo entre o nó
Origem e o nó Destino tem um comprimento de 26 km. Entretanto, ainda não está explícito
qual é o caminho que tem esta distância total.

2008_SI_-_PesquisaOperacional_II_-_o2007 150
Pesquisa Operacional II 12
Atualização: 04/09/2008

Para identificá-lo, basta observar os valores "pai" das etiquetas, partindo do nó


Destino... E este será o caminho mínimo. Pela figura do passo anterior, pode-se identificar o
seguinte caminho: D-1-2-O, o qual está indicado na figura 12, encerrando a solução do
problema.

Figura 12: Indicação do caminho mínimo.

É claro, entretanto, que este caminho está invertido, sendo o caminho da origem para
o destino, é O-2-1-D.

5. ANÁLISE DOS RESULTADOS

Conceitos Chave:

- De uma origem para todos os destinos


- Aproveitamento de cálculos

Uma rápida análise dos resultados obtidos indica que, partido da chegada e seguindo
em direção sempre do "melhor antecessor" é possível identificar o melhor caminho, tendo o
algoritmo realizado seu trabalho com êxito.

Entretanto, um outro resultado interessante é obtido de sua aplicação: não apenas o


melhor caminho para um único destino foi calculado, mas sim o melhor caminho para
qualquer destino, partindo do mesmo nó inicial.

Esse é um resultado bastante interessante já que em determinadas situações (como


entregas realizadas sempre a partir de uma determinada base) basta uma execução e já serão
obtidos todos os resultados necessários.

Uma outra observação permite verificar que com uma modificação no algoritmo é
possível adicionar novos caminhos e aproveitar cálculos anteriormente realizados. Entretanto,

2008_SI_-_PesquisaOperacional_II_-_o2007 151
Pesquisa Operacional II 13
Atualização: 04/09/2008

neste momento não haverá aprofundamento deste tópico, já que nas aulas seguintes será
apresentado um algoritmo que resolve este problema automaticamente.

6. EXERCÍCIO

1. Usando o algoritmo Label Setting, encontre o caminho mínimo entre os pontos: 1 e


13; 1 e 11; 1 e 9; 1 e 6.

7. BIBLIOGRAFIA

AHUJA, R.K; MAGNANTI, T.L; ORLIN, J.B. Network Flows: Theory, Algorithms
and Applications. New Jersey: Prentice Hall, 1993.

BRADLEY, S. P.; HAX, A. C.; MAGNANTI, T. L. Applied mathematical


programming. Reading, Mass.: Addison-Wesley Pub. Co., 1977.

CHVATAL, V. Linear programming. New York: W. H. Freeman, 1983.

GALLO, G; PALLOTTINO, S. Shortest path methods in transportation models. (M.


Florian, ed.) Transportation Planning Models. North Holland, Elsevier Science Publishers. p.
227-256, 1984.

WINSTON, W. L. Operations research: applications and algorithms. S.I.:


International Thomson Publishing, 1994.

2008_SI_-_PesquisaOperacional_II_-_o2007 152
Pesquisa Operacional II 1
Atualização: 16/09/2008

Unidade 4: O Problema do Caminho Mínimo:


Algoritmo Label Correcting
Prof. Daniel Caetano

Objetivo: Capacitar para a identificação de ciclos em problemas de fluxo em rede e


apresentar o algoritmo Label Correcting para a resolução destes problemas.

Bibliografia:BRADLEY et al.;AHUJA et al.;CHVATAL; GALLO et al.;WINSTON.

INTRODUÇÃO

Conceitos Chave:

- Problema: reduzir caminho...


* Grafo com ciclos
- Label Setting => Inadequado
- Label Correcting
- Identificar existência de ciclos

O método de determinação de caminho mínimo chamado "Label Setting" é capaz de


resolver um grande número de problemas de caminho mínimo, mas possui uma limitação:
não é capaz de resolver problemas que possuam ciclos no grafo.

Nesta unidade será apresentado, de forma sistemática o algoritmo "Label Setting" e


sua inabilidade de resolver problemas com ciclos. Para a solução deste tipo de problema, será
apresentado o algoritmo "Label Correcting".

1. REVISANDO: "O PROBLEMA DO MOTORISTA DE TAXI"

Conceitos Chave:

- Levar um passageiro de uma Origem a um Destino


- Minimizar distância percorrida
- Não se tem informações do próximo passageiro
- Ignorar trânsito

2008_SI_-_PesquisaOperacional_II_-_o2007 153
Pesquisa Operacional II 2
Atualização: 16/09/2008

- Lógica do Label Setting


a) Etiquetar
b) Selecionar nó "sem pai" para o qual se conhece todos os caminhos
c) Calcular melhor caminho
d) Indicar caminho na etiqueta
e) Voltar ao passo (b)

O problema a ser resolvido pode ser considerado o mesmo apresentado na unidade


anterior, o desenvolvimento do software para uma empresa de Taxi, de forma que o cliente
pudesse pagar a viagem antes de executá-la. Para isso, é preciso que o sistema saiba qual é o
caminho que o taxista irá fazer, o que provavelmente será um "caminho mínimo".

Neste problema será transportada apenas uma unidade de carga (o passageiro) e o


caminho mínimo a ser encontrado é entre apenas dois pontos. Não haverá a preocupação com
eventuais limitações de fluxo em cada arco.

1.1. Revendo: o Problema Modelado como um Grafo

O seguinte modelo (Figura 1) havia sido proposto anteriormente para estudo:

Figura 1: "Modelagem gráfica" da rede

E, para a solução, foi apresentado o algoritmo do Label Setting.

1.2. Revendo: o Algoritmo Label Setting

O algoritmo Label Setting pode ser sistematizado da seguinte forma:

1. Cria-se uma "etiqueta" em todos os nós, com duas posições: uma para indicar qual
a distância acumulada até aquele nó e outra para indicar qual é o nó que o antecede
no melhor caminho, ou seja, seu nó "pai".

2008_SI_-_PesquisaOperacional_II_-_o2007 154
Pesquisa Operacional II 3
Atualização: 16/09/2008

2. Indica-se em todos os nós um distância acumulada igual a "0" e o nó pai "-1",


indicando que nenhum dos nós possui antecessor ainda.
3. O processo tem início marcando o nó inicial (de partida) como tendo a si mesmo
como nó "pai".
4. Dentre os nós que não possuem antecessores (pai = -1), deve-se selecionar um em
que todos os arcos de chegada estejam ligados a nós com pai. Se todos os nós já
possuírem pais, chegou-se ao fim do processo.
5. Selecionado o nó nas condições descritas no passo 4, calcula-se as distâncias até
este nó por todos os caminhos (arcos de chegada) possíveis, sendo que esta
distância é a soma da distância até o nó origem do arco de chegada, somada ao
comprimento do arco.
6. Anota-se na etiqueta do nó selecionado a menor distância obtida nos cálculos do
passo 5, e marca-se como "nó pai" em sua etiqueta aquele que foi a origem desta
menor distância calculada.
7. Volta ao passo 4.

2. O PROBLEMA DOS CICLOS

Conceitos Chave:

- Label Setting: Eficiência x Limitação


- Verificação de Ciclos: Representação em camadas
* Caminhamento sempre descendo nas camadas
- Remoção de Ciclos
* Perda de otimalidade

O algoritmo Label Setting é bastante eficiente. Entretanto, na forma como foi


apresentado, ele apresenta uma limitação bastante grande: não permite a resolução de redes
que possuam ciclos, uma vez que nestes casos sempre haverá nós cujos cálculos serão
interdependentes. Analisando a figura 2, é possível verificar que tal rede possui ciclos e,
portanto, não se pode ser aplicado o algoritmo Label Setting.

Figura 2: Representação de uma rede com ciclos

Uma forma prática para verificar se uma rede contém ou não ciclos é analisar a
possibilidade de representá-la em camadas ordenadas, sendo que a movimentação dos arcos

2008_SI_-_PesquisaOperacional_II_-_o2007 155
Pesquisa Operacional II 4
Atualização: 16/09/2008

deve sempre ir de uma camada para a seguinte, nunca para a mesma camada ou a camada
anterior. A rede do problema resolvido pelo algoritmo Label Setting na seção anterior, por
exemplo, pode ser representada em cinco camadas como representado na figura 3.

Figura 3: Uma rede sem ciclos representada em camadas

É possível notar que não há como representar a rede da figura 2 num formato como
este, sendo que inevitavelmente haverá arcos ligando nós de níveis mais altos em direção a
nós de níveis mais baixos, evidenciando assim a existência de ciclos.

Uma alternativa para contornar o problema dos ciclos pode ser a prévia utilização de
um algoritmo de remoção de ciclos e, apenas depois disso, lançar mão da utilização do Label
Setting. Entretanto, esta pode não ser uma forma apropriada, já que a eliminação de ciclos
pura e simples pode remover arcos que fariam parte da melhor solução e, sendo assim,
deteriorando a qualidade da solução do problema.

Por esta razão, é necessária uma alternativa ao Label Setting que seja capaz de lidar
com o problema dos ciclos, garantindo que a solução ótima seja atingida. Esta é a base da
proposta do Label Correcting.

3. O ALGORITMO LABEL CORRECTING

Conceitos Chave:

- Solução para problemas com ciclos


* Modificação na ordem de cálculo e critério de parada
- Três dados na etiqueta: nó pai, distância acumulada e necessidade de recálculo.
- Lógica:
a) Etiquetar
b) Selecionar nó que deve ter seus descendentes recalculados (com menor
distância acumulada)
c) Calcular todos os seus descendentes (marcando suas etiquetas), trocando
eventuais etiquetas existentes, se novo caminho for melhor.

2008_SI_-_PesquisaOperacional_II_-_o2007 156
Pesquisa Operacional II 5
Atualização: 16/09/2008

d) Marcar etiqueta do nó atual como "sem necessidade de recálculo"


e) Voltar ao passo (b)
- Permite adição de arcos "em tempo de execução".

O algoritmo Label Correcting (GALLO; PALOTINO, 1984) foi desenvolvido para


lidar com os casos em que o algoritmo Label Setting não se comporta bem, ou seja, aqueles
que possuem ciclos. De forma geral, o Label Correcting nada mais é que uma variação do
Label Setting, onde foi modificada a ordem de cálculo dos nós e o critério de parada.

Sendo assim, a essência do Label Setting permanece, com algumas pequenas


variações:

- Existe um novo indicador na etiqueta: 0 se o nó não precisa ter seus sucessores


recalculados e 1 se ele precisa ter seus sucessores recalculados.
- A partir de um nó com antecessor (já etiquetado) e que esteja marcado para ter seus
sucessores recalculados, são calculados todos os nós sucessores deste, substituindo a etiqueta
anterior do sucessor se o novo caminho até ele for mais eficiente.

Estas duas modificações fundamentais alteram todo o mecanismo do Label Setting,


transformando-o no que foi chamado de Label Correcting. Uma possível sistematização para
o Label Correcting é:

1. Cria-se uma etiqueta em todos os nós, indicando a distância acumulada "0" e "-1"
como o nó antecessor. Indica-se também em todas as etiquetas que seus sucessores não
precisam ser calculados, com o valor "0".
2. Marca-se o nó 0 (origem) como sendo antecessor de si próprio, indicando "0" em
sua etiqueta, distância total acumulada "0" e indicando que este nó precisa ter seus sucessores
calculados, indicando "1" na etiqueta.
3. Dentre todos os nós marcados para que seus sucessores sejam calculados,
seleciona-se aquele que tem menor distância acumulada. Se não houver qualquer nó com
indicação de recálculo de sucessores, fim do processo.
4. Para o nó selecionado, calcula-se a distância total acumulada para todos os nós
sucessores deste, sendo esta distância a soma da distância total acumulada até o nó atual com
o comprimento do arco que liga este nó ao referido sucessor.
5. Caso o nó sucessor não tenha ainda sido etiquetado com um antecessor ou ainda
que a nova distância seja inferior à anteriormente indicada na etiqueta do sucessor, indica-se
no nó sucessor a nova distância acumulada, o novo nó antecessor e também se deve indicar
que seus descendentes precisam ser recalculados.
6. Voltar ao passo 3.

Embora ligeiramente mais complexo, este algoritmo resolve inclusive casos com
ciclos, embora isso signifique um aumento significativo na quantidade de cálculos
necessários para a solução do problema.

2008_SI_-_PesquisaOperacional_II_-_o2007 157
Pesquisa Operacional II 6
Atualização: 16/09/2008

Uma outra característica positiva deste algoritmo é que ele permite que novos nós e
arcos sejam adicionados na rede, aproveitando-se o resultado da rede já calculada. Para tanto,
basta marcar todos os nós originais aos quais são ligados novos arcos de saída como sendo
necessitando recálculo de seus descendentes.

4. EXEMPLO

Usando o algoritmo Label Correcting, encontrar o caminho mínimo entre os pontos 1


e 4.

Passo 1: O primeiro passo para a resolução é indicar as etiquetas:

2008_SI_-_PesquisaOperacional_II_-_o2007 158
Pesquisa Operacional II 7
Atualização: 16/09/2008

Passo 2: Realizar as marcações iniciais: o nó 1 é o pai de si mesmo (na parte de cima


da etiqueta), com distância acumulada 0 (na parte do meio) e é preciso calcular seus
descendentes (1 na parte de baixo):

Passo 3: Dos nós que possuem descendentes a calcular (apenas o nó 1, por enquanto),
deve-se selecionar aquele que tem a menor distância acumulada: o nó 1, tem distância
acumulada 0. Assim, o nó 1 será usado para cálculo no próximo passo.

Passo 4: A partir do nó selecionado (neste caso, o nó 1), calcula-se todos os seus


descendentes: 2 e 5:
- Nó 2: 0 + 20 = 20 (distância acumulada até 1 + comprimento do arco de 1 a 2)
- Nó 5: 0 + 41 = 41 (distância acumulada até 1 + comprimento do arco de 1 a 5)
Como os nós descendentes calculados ainda não haviam sido preenchidos, deve-se
simplesmente marcar estes valores na etiqueta de cada nó descendente, indicando também seu
antecessor ("pai") como sendo o nó 1. Indica-se ainda que estes 2 nós precisam que seus
descendentes sejam calculados (indicando 1 na parte inferior da etiqueta), e que o nó 1 não
precisa mais ter seus descendentes calculados (indicando 0 na parte inferior da etiqueta):

2008_SI_-_PesquisaOperacional_II_-_o2007 159
Pesquisa Operacional II 8
Atualização: 16/09/2008

Passo 5: Dos nós que possuem descendentes a calcular (2 e 5), selecionar aquele que
tem a menor distância acumulada: o nó 2 tem 20 acumulado e o nó 5 tem 41 acumulado.
Assim, o nó 2 será usado para cálculo no próximo passo.

Passo 6: A partir do nó selecionado (neste caso, o nó 2), calcular todos os seus


descendentes: 3 e 6:
- Nó 3: 20 + 11 = 31 (distância acumulada até 2 + comprimento do arco de 2 a 3)
- Nó 6: 20 + 32 = 53 (distância acumulada até 2 + comprimento do arco de 2 a 6)
Como os nós descendentes calculados ainda não foram preenchidos, deve-se
simplesmente marcar o valor na etiqueta, indicando também seus antecessores ("pais") como
sendo o nó 2. Adicionalmente, indica-se que estes nós precisam que seus descendentes sejam
calculados (indicando 1 na parte inferior das etiquetas), e que o nó 2 não precisa mais ter seus
descendentes calculados (indicando 0 na parte inferior da etiqueta):

Passo 7: Dos nós que possuem descendentes a calcular (3, 5 e 6), selecionar aquele
que tem a menor distância acumulada: o nó 3 tem 31 acumulado; o nó 5 tem 41 acumulado; e
o nó 6 tem 52 acumulado. Assim, o nó 3 será usado para cálculo no próximo passo.
Passo 8: A partir do nó selecionado (neste caso, o nó 3), calcula-se todos os seus
descendentes: 4, 5 e 6:
- Nó 4: 31 + 27 = 58 (distância acumulada até 3 + comprimento do arco de 3 a 4)
- Nó 5: 31 + 9 = 40 (distância acumulada até 3 + comprimento do arco de 3 a 5)
- Nó 6: 31 + 21 = 52 (distância acumulada até 3 + comprimento do arco de 3 a 6)
Como o nó 4 ainda não havia sido calculado, deve-se simplesmente preencher sua
etiqueta da mesma maneira que nos passos anteriores: pai (3) na parte de cima, distância
acumulada (58) no meio e a necessidade de cálculo dos descendentes (1) na parte inferior.
No caso dos nós 5 e 6, entretanto, já havia etiquetas definidas. Antes de substituí-las, é
preciso verificar se o novo caminho até estes nós é melhor do que o anteriormente definido.
No nó 5, o valor anterior de distância acumulada era 41, como é possível ver pela
etiqueta. Seguindo o novo caminho, o valor acumulado fica 40. Como 40 é menor que 41, o
novo caminho é melhor que o antigo. Por esta razão, a etiqueta do nó 5 será corrigida com os
valores novos de pai (3), distância acumulada (40) e a necessidade de recálculo de seus
descendentes.

2008_SI_-_PesquisaOperacional_II_-_o2007 160
Pesquisa Operacional II 9
Atualização: 16/09/2008

No nó 6, o valor anterior de distância acumulada era 52, e seguindo o novo caminho,


ele permanece 52. Desta forma, não se mexe na etiqueta, já que o caminho anterior era tão
bom quanto o novo. Finalmente, o nó 3 deve ser remarcado indicando que seus descendentes
não mais precisam ser recalculados:

Passo 9: Dos nós que possuem descendentes a calcular (4, 5 e 6), deve-se selecionar
aquele que tem a menor distância acumulada: o nó 4 tem 58 acumulado; o nó 5 tem 40
acumulado; e o nó 6 tem 52 acumulado. Assim, o nó 5 será usado no próximo passo.
Passo 10: A partir do nó selecionado (neste caso, o nó 5), calcular todos os seus
descendentes: 2 e 6:
- Nó 2: 40 + 10 = 50
- Nó 6: 40 + 11 = 51
Como todos os nós descendentes calculados já foram preenchidos, deve-se verificar se
os novos caminhos são melhores que os antigos. No nó 2, a distância acumulada anterior era
20, e pelo novo caminho ela fica 50, sendo claramente uma piora. Este nó fica como estava.
No nó 6, a distância acumulada anterior era 52, e a nova é 51. Assim, há uma
melhoria, e este nó deve ter sua etiqueta remarcada para pai como nó 2, distância acumulada
51 e indicar que seus descendentes precisam ser recalculados. Adicionalmente deve-se indicar
que o nó 5 não precisa mais ter seus descendentes calculados:

2008_SI_-_PesquisaOperacional_II_-_o2007 161
Pesquisa Operacional II 10
Atualização: 16/09/2008

Passo 11: Dos nós que possuem descendentes a calcular (4 e 6), selecionar aquele que
tem a menor distância acumulada: o nó 4 tem 58 acumulado; e o nó 6 tem 51 acumulado.
Assim, o nó 6 será usado no próximo passo.
Passo 12: A partir do nó selecionado (neste caso, o nó 6), calcular todos os seus
descendentes: 4:
- Nó 4: 51 + 3 = 54
O nó 4 já tinha uma etiqueta, com uma distância acumulada de 58, e pelo novo
caminho ela se torna 54. Assim, o novo caminho é melhor que o anterior, e a etiqueta do nó 4
deve ser corrigida: 6 (pai), 54 (distância) e 1 (calcular descendentes). O nó 6 deve ser
ajustado para indicar que seus descendentes não mais precisam ser calculados (0):

Passo 13: Sobrou apenas um nó (4) com descendentes a serem calculados, então, o nó
9 será usado no próximo passo.
Passo 14: Ocorre que o nó 4 não tem descendentes, então sua etiqueta pode ser
corrigida para indicar que seus descendentes não precisam ser calculados.

Passo 15: Como não há mais nós com descendentes para calcular, esta é a solução do
problema. O caminho mínimos é definido da mesma forma que no label setting:
1 a 4: 4-6-5-3-2-1... ou 1-2-3-5-6-4, com distância total 54.

2008_SI_-_PesquisaOperacional_II_-_o2007 162
Pesquisa Operacional II 11
Atualização: 16/09/2008

5. ATIVIDADE

1. Usando o algoritmo Label Correcting, encontre o caminho mínimo entre os pontos:


1 e 9; 1 e 5; 1 e 6.

2. Usando o algoritmo Label Correcting, encontre o caminho mínimo entre os pontos:


1 e 7; 1 e 6; 1 e 5.

6. BIBLIOGRAFIA

AHUJA, R.K; MAGNANTI, T.L; ORLIN, J.B. Network Flows: Theory, Algorithms
and Applications. New Jersey: Prentice Hall, 1993.
BRADLEY, S. P.; HAX, A. C.; MAGNANTI, T. L. Applied mathematical
programming. Reading, Mass.: Addison-Wesley Pub. Co., 1977.
CHVATAL, V. Linear programming. New York: W. H. Freeman, 1983.
GALLO, G; PALLOTTINO, S. Shortest path methods in transportation models. (M.
Florian, ed.) Transportation Planning Models. North Holland, Elsevier Science Publishers. p.
227-256, 1984.
WINSTON, W. L. Operations research: applications and algorithms. S.I.:
International Thomson Publishing, 1994.

2008_SI_-_PesquisaOperacional_II_-_o2007 163
Pesquisa Operacional II 1
Atualização: 22/09/2008

Unidade 5: O Problema do Caminho Mínimo:


Algoritmo Network Simplex
Prof. Daniel Caetano

Objetivo: Capacitar para a identificação de problemas de caminho mínimo não


solúveis pelo Label Correcting e introduzir a lógica do processo de solução destes problemas.

Bibliografia:BRADLEY et al.;AHUJA et al.;WINSTON.

INTRODUÇÃO

Conceitos Chave:

- Problema: múltiplas fontes de carga, múltiplos sorvedouros


* Problema mais comum e genérico
- Algoritmo Network Simplex (Simplex para Redes)

Muitas vezes surgem problemas em que não há apenas uma fonte e um sorvedouro de
"carga", como ocorre nas versões do problema do caminho mínimo apresentadas até o
momento. Em alguns casos, existem múltiplas fontes e múltiplos sorvedouros (como ocorria
no problema do transporte); com efeito, este é o problema mais comum, em termos de
transporte, e os vários caminhos mínimos para transporte precisam ser determinados a um
tempo só.

Nestes casos é utilizado um algoritmo chamado "Network Simplex", cujo mecanismos


de cálculo tem muito mais de semelhante com os problemas de caminho mínimo que com o
Simplex propriamente dito. Entretanto, a origem deste método de cálculo é o método Simplex
e, por esta razão, seu nome é Network Simplex (ou Simplex das Redes).

1. O NETWORK SIMPLEX

Conceitos Chave:

- Obtenção de custo mínimo


* Diversos caminhos simultâneos (Ps)
- Método iterativo

2008_SI_-_PesquisaOperacional_II_-_o2007 164
Pesquisa Operacional II 2
Atualização: 22/09/2008

* Início: solução viável


* Troca de arcos para Redução de Custo
= Sai um arco presente
= Entra um não presente
- Problema: solução inicial viável!
- Algoritmo:
a) Solução inicial viável com N-1 arcos (N é o número de nós)
b) P0 = 0
c) Pi = Pi-1 + ci-1,i
d) Para arcos não presentes na solução: DPj = Pi + cij - Pj
e) Se todos os DPj ¶ 0, solução ótima
f) Se arcos tiveram DPj < 0, o mais negativo entrará na solução (ciclo).
g) Balanceamento da rede
h) Remover um dos arcos (voltando a N-1)
i) Voltar ao passo (c)

O método Network Simplex é uma maneira de resolver o problema de fluxo em rede


citado anteriormente, baseado na obtenção do custo mínimo para realizar os diversos
caminhos dentro da rede (chamados de Ps).

Da mesma forma que o Método Simplex, é um método iterativo que, a partir de uma
solução viável, avalia qual seria o ganho da substituição de um dos arcos da solução por um
dos arcos não presentes na solução. Caso a adição de um (ou mais) arcos resultem em uma
solução melhor (redução em um dos Ps), o melhor destes arcos é escolhido e passa a fazer
parte da solução, e o arco correspondente da solução anterior passa a não fazer mais parte da
nova.

A grande dificuldade deste algoritmo, para problemas grandes, reside na necessidade


de se iniciar sua aplicação a partir de uma solução viável, que nem sempre pode ser obtida
com um baixo esforço computacional.

1.1. Algoritmo Network Simplex

O algoritmo Network Simplex pode ser descrito da seguinte forma:

1) Procura-se uma solução com N-1 arcos que não forme ciclos. N é o número de nós.
2) Calcula-se o P para cada um nós, onde Pi = Pi-1 + ci-1,i, lembrando que, caso a
direção não seja indicada, cij = -cji. O P do nó admitido como inicial é sempre considerado
igual a zero.
3) Para cada arco (i, j) não presente na solução, calcula-se qual seria o DPj, se tal arco
(i, j) estivesse presente na solução: DPj = Pi + cij - Pj, lembrando que, caso a direção não seja
indicada, cij = -cji.

2008_SI_-_PesquisaOperacional_II_-_o2007 165
Pesquisa Operacional II 3
Atualização: 22/09/2008

4) Como o objetivo é minimizar o custo do caminho, se nenhum dos DPs for negativo
(as trocas de arcos possíveis não melhorarão a solução), o caminho ótimo foi encontrado.
Caso contrário, continue com o passo 5.
5) Se algum dos DPs for negativo, isso significa que a solução pode ser melhorada
com a substituição do arco que gerou tal DP.
6) Adiciona-se o arco correspondente, criando um ciclo.
7) Realiza-se o balanceamento da rede.
8) Deve-se escolher um dos arcos que fecham o ciclo para sair da solução, voltando a
ter N-1 arcos na solução.
9) Volta ao passo 2.

1.2. Exemplo de Algusn Passos do Algoritmo Network Simplex

Nesta seção será apresentada a aplicação de uma iteração do algoritmo Network


Simplex. Para isso, considere a rede da figura abaixo:

Como não será feita uma aplicação completa, não importa, neste momento, os custos
de cada arco e nem os cálculos dos Ps em si, que são bastante similares ao cálculo dos nós
descendentes do método do caminho mínimo.

1) Procura-se uma solução com N-1 arcos (4, neste caso) que não forme ciclos:

2) Calcula-se o P para cada um nós, onde Pi = Pi-1 + ci-1,i, lembrando que, caso a
direção não seja indicada, cij = -cji. O P do nó admitido como inicial é sempre considerado
igual a zero.

2008_SI_-_PesquisaOperacional_II_-_o2007 166
Pesquisa Operacional II 4
Atualização: 22/09/2008

3) Para cada arco (i, j) não presente na solução, calculamos qual seria o DPj, se tal
arco (i, j) estivesse presente na solução: DPj = Pi + cij - Pj, lembrando que, caso a direção não
seja indicada, cij = -cji.

4) Como o objetivo é minimizar o custo do caminho, se todos os DPs forem não


negativos (as trocas de arcos possíveis não melhorarão a solução), o caminho ótimo foi
encontrado. Caso contrário, continua-se com o passo 5.

5) Se algum dos DPs for negativo, isso significa que a solução pode ser melhorada
com a substituição do arco que gerou tal DP. Para efeito de demonstração, suponha-se que o
arco (4,5) reduziria o custo da solução. O seguinte ciclo seria formado: 1-4-5/1-3-5:

6) Se o objetivo é aumentar o fluxo nos arcos do lado 1-4-5 do ciclo (uma vez que
eles propiciam redução de custo), será necessário diminuir o fluxo dos arcos do lado do
caminho 1-3-5. A nova configuração fica assim:

7) Como não é possível ter um ter fluxo negativo, o maior valor que h pode assumir é
1. Assim, a nova solução fica:

2008_SI_-_PesquisaOperacional_II_-_o2007 167
Pesquisa Operacional II 5
Atualização: 22/09/2008

8) Agora, basta eliminar um dos arcos desnecessários, para eliminar o ciclo e voltar a
ter N-1 arcos na solução:

9) Volta ao passo 2.

2. BIBLIOGRAFIA

AHUJA, R.K; MAGNANTI, T.L; ORLIN, J.B. Network Flows: Theory, Algorithms and
Applications. New Jersey: Prentice Hall, 1993.

BRADLEY, S. P.; HAX, A. C.; MAGNANTI, T. L. Applied mathematical programming.


Reading, Mass.: Addison-Wesley Pub. Co., 1977.

WINSTON, W. L. Operations research: applications and algorithms. S.I.: International


Thomson Publishing, 1994.

2008_SI_-_PesquisaOperacional_II_-_o2007 168
Pesquisa Operacional II 1
Atualização: 22/09/2008

Unidade 6: Emulação e Simulação


Prof. Daniel Caetano

Objetivo: Apresentar os conceitos de emulação e simulação, e capacitar para a


aplicação e uso do método monte carlo.

Bibliografia: MOREIRA.

INTRODUÇÃO

Conceitos Chave:

- Emulação x Simulação
- Problema: Número de Guichês x Tamanho da Fila
* Solução é adequada?
- Métodos Teóricos x Simulação
* Método Monte Carlo

Embora nem sempre seja muito óbvio, os conceitos de simulação e, em menor escala,
de emulação estão presentes na vida da maioria das pessoas. No estudo de pesquisa
operacional, o conceito de simulação é bastante importante e, ainda que o conceito de
emulação não seja tão relacionado, é importante diferenciá-los.

Um problema comum, por exemplo, é verificar se uma solução proposta para um


determinado problema está adequada, em casos que envolvem fatores variáveis. É possível
determinar com mais ou menos simplicidade o número de guichês necessário para atender
uma determinada quantidade de pessoas, mas como se pode determinar o tamanho máximo
provável da fila que será formada?

É claro que há métodos teóricos possíveis para o cálculo de algumas das situações,
mas uma forma mais simples de avaliar tais dados é através do uso de simulação. Assim,
nesta unidade serão apresentados os conceitos envolvidos, além de apresentar um método
bastante comum de geração de valores para simulação, o chamado Método Monte Carlo.

2008_SI_-_PesquisaOperacional_II_-_o2007 169
Pesquisa Operacional II 2
Atualização: 22/09/2008

1. EMULAÇÃO x SIMULAÇÃO

Conceitos Chave:

- Emulação => modelo determinístico


* Resposta idêntica à do objeto modelado
= Impossível diferenciar saídas (real x emulação)
= Dadas entradas iguais, as saídas são sempre as mesmas.
* Exemplo: emulação de hardware por software
- Simulação => modelo determinístico-probabilístico
* Mesma probabilidade de resposta à do objeto modelado
= Impossível diferenciar as saídas (real x simulação)
= Dadas entradas iguais, as saídas possuem a mesma probabilidade.
* Determinísico-Probabilístico?
= Tiro com uma arma
= Direção do vento? Tiro sair pela culatra?
= Trajetória em elipse?

Antes de introduzir o conceito de Simulação, talvez seja interessante introduzir o


conceito de emulação, de forma a evitar qualquer confusão futura. O que é, então, emulação?

Pode-se dizer que emulação é a utilização de um modelo determinístico que responde


exatamente da mesma maneira que um objeto modelado. Isso significa duas coisas:

a) Deve ser impossível diferenciar os resultados obtidos pelo modelo daqueles obtidos
a partir do objeto real.
b) Dado um conjunto de entradas, as saídas são sempre as mesmas, seja no modelo,
seja no objeto real.

Assim, é comum falar em "emulação" no contexto de um software reproduzindo a


função de um hardware; isso significa que o software é um modelo do hardware que, com as
mesmas entradas, produz exatamente as mesmas saídas que o hardware real. Um software que
permite executar os programas de um computador (ou videogame) em outro é, portanto, um
emulador: dada uma mesma entrada (o programa do computador original real), é gerada
exatamente a mesma saída (o programa ou jogo, como é percebido pelo usuário).

Figura 1: Comportamento do objeto real A e de sua emulação

2008_SI_-_PesquisaOperacional_II_-_o2007 170
Pesquisa Operacional II 3
Atualização: 22/09/2008

A figura 1 representa exatamente a situação ocorrida na emulação: para uma mesma


entrada X, a saída será sempre Y (que é uma função de X), seja no objeto real A, seja em sua
emulação. Note que a saída Y ser sempre a mesma para uma entrada X pressupõe que tanto o
objeto real quanto a emulação partem do mesmo estado E original, pois as saídas Y
dependem de X e do estado em que o objeto se encontrava antes de receber esta entrada.

E a simulação? Pode-se dizer que simulação é a utilização de um modelo


determinístico-probabilístico que responde resultados com a mesma probabilidade que um
objeto modelado. Isso significa duas coisas:

a) Deve ser impossível diferenciar os resultados obtidos pelo modelo daqueles obtidos
a partir do objeto real.
b) Dado um conjunto de entradas, as saídas não serão sempre as mesmas (nem no
modelo, nem na realidade). Entretanto, a probabilidade de cada resultado deve ser a mesma
para o objeto real e para o modelo.

Figura 2: Comportamento do objeto real A e de sua simulação

A figura 2 representa a situação ocorrida na simulação: para uma mesma entrada X, as


probabilidades Z de cada saída Y serão sempre as mesmas. Note que isso não significa que
haverá alguma relação direta entre a entrada X e o valor que será apresentado como saída.

Mas por que é dito que o modelo da simulação é determinístico-probabilístico? Bem,


probabilístico porque, como visto, ele tem um fator de aleatoriedade envolvido; quanto ao
determinístico, é porque é comum que problemas de simulação envolvam também relações
determinísticas. Por exemplo, se alguém for simular a distância alcançada pelo tiro de uma
espingarda, apesar de alguns fatores probabilísticos poderem ser considerados (a arma não
disparar, o tiro sair pela culatra, a direção do vento etc.) , fica claro que a trajetória da bala é
uma relação determinística descrita pela física.

2008_SI_-_PesquisaOperacional_II_-_o2007 171
Pesquisa Operacional II 4
Atualização: 22/09/2008

2. SIMULAÇÃO NA PESQUISA OPERACIONAL

Conceitos Chave:

- Problema: Determinado um gargalo de operação => Alternativas


* Testar alternativas?
- Determinístico => Programação Linear
- Probabilístico => Programação Estocástica
* Mais comum: propostas por especialistas, baseadas em indicadores
= Quais os impactos da solução na prática?
= Validar por simulação!
- Modelo de Simulação

Um problema bastante comum na pesquisa operacional envolve determinar o gargalo


de uma operação e tentar gerar alternativas de operação de forma a evitar o gargalo e
aumentar a eficiência do sistema como um todo.

Quando o funcionamento do sistema envolve apenas variáveis determinísticas (cujos


valores podem ser impostos ou são fixos e muito bem conhecidos pelo tomador de decisão),
muitas vezes é possível gerar um modelo de programação linear ou não-linear e resolver o
problema através de um algoritmo computacional de otimização, determinando exatamente
como o sistema deve funcionar.

Entretanto, algumas vezes isso é muito difícil ou, até mesmo, impossível; as razões
para essa dificuldade podem ser várias. Por exemplo, o sistema como um todo pode ser
complexo demais para uma modelagem matemática simples; O sistema pode também
envolver variáveis probabilísticas, que levam a modelagens matemáticas extremamente
complexas e cujos mecanismos de solução são ainda mais complexos.

Nestes casos é comum que especialistas proponham soluções com base em


indicadores e em sua experiência; entretanto, em muitos casos é conveniente ter uma boa
idéia de como o sistema operaria nas novas condições propostas antes de implementar isso na
prática. Com essa avaliação prévia seria possível verificar não apenas se a solução proposta
realmente é boa, mas também perceber de antemão alguns conflitos que possam surgir
seguindo a nova forma de operar.

Para poder realizar essa avaliação e verificação, é necessário criar um modelo de


simulação e usá-lo para, a partir dos resultados da simulação, inferir sobre o comportamento
do sistema real.

2008_SI_-_PesquisaOperacional_II_-_o2007 172
Pesquisa Operacional II 5
Atualização: 22/09/2008

3. O MÉTODO MONTE CARLO

Conceitos Chave:

- Simulação => variáveis probabilísticas


* Distribuição de probabilidade
= Ex.: Chegadas na fila do cinema x hora de início do filme
- Método Monte Carlo
* Base: números uniformemente aleatórios (Tabela)
* Finalidade: obter um sorteio que obedeça a probabilidade desejada
* Exemplo: P(1) = 0,10; P(2) = 0,15; P(4) = 0,25; P(5) = 0,07; P(6) = 0,05
= Soma das probabilidades é sempre 1!
= Tabela de Probabilidades Acumuladas
= Números seqüenciais
= Tabela Prob. Acumulada + Último Número de Cada Seqüência
= Tabela Completa: com intervalo
= Sorteios

Como uma simulação envolve variáveis probabilísticas, é preciso usar algum método
para gerar saídas numéricas que obedeçam à alguma distribuição de probabilidade desejada.
O Método Monte Carlo é apenas uma das maneiras de se realizar essa tarefa, e é baseado na
capacidade de gerar números aleatórios. Estes números podem ser gerados por sorteio,
métodos computacionais etc. Nesta disciplina usaremos os valores da tabela 1.

O Método Monte Carlo consiste em transformar números como estes da tabela em


valores possíveis de um problema e que tenham uma determinada probabilidade de ocorrer. A
título de exemplo da operação, suponhamos que em uma situação real, um sistema responda 6
valores distintos: 1, 2, 3, 4, 5 e 6. Cada um deles tem uma probabilidade (freqüência de saída)
associada: P(1) = 0,10; P(2) = 0,15; P(3) = 0,38; P(4) = 0,25; P(5) = 0,07 e P(6) = 0,05.
Repare que a soma das probabilidades de todos os resultados tem que ser 1,00.

Se for necessário simular uma seqüência de saídas numéricas deste sistema, é preciso
definir uma maneira de encontrar uma seqüência destes 6 números de forma que a
probabilidade de cada um deles sair se mantenha. O Monte Carlo será usado para isso e o
primeiro passo é definir uma tabela com as probabilidades (freqüências) acumuladas:

Valor Probabilidade P. Acumulada


1 0,10 0,10
2 0,15 0,25
3 0,38 0,63
4 0,25 0,88
5 0,07 0,95
6 0,05 1,00

2008_SI_-_PesquisaOperacional_II_-_o2007 173
Pesquisa Operacional II 6
Atualização: 22/09/2008

Agora, é preciso definir 10 valores que serão relacionados ao valor 1, 15 valores que
serão relacionados ao valor 2, 38 valores que serão relacionados ao número 3 e assim por
diante. Isso permite que, ao sortear números entre 0 e 99, o valor 1 tem 10 chances em 100 de
sair (probabilidade 0,10). Da mesma forma, o número 2 tenha 15 chances em 100 de sair
(probabilidade 0,15), o número 3 tenha 38 chances em 100 de sair (probabilidade 0,38) e
assim por diante. Uma maneira fácil de fazer isso é usar números seqüenciais:

Valor Real Valores Sorteados Equivalentes


1 0,1,2,3,4,5,6,7,8,9 (10 valores)
2 10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 (15 valores)
3 25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,
44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62
(38 valores)
4 63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81
82,83,84,85,86,87 (25 valores)
5 88,89,90,91,92,93,94 (7 valores)
6 95,96,97,98,99 (5 valores)

Agora, é possível observar uma relação entre o último valor de cada seqüência com o
valor da probabilidade acumulada multiplicada por 100:

Valor Probabilidade P. Acumulada Último valor


1 0,10 0,10 9
2 0,15 0,25 24
3 0,38 0,63 62
4 0,25 0,88 87
5 0,07 0,95 94
6 0,05 1,00 99

Assim, se considerarmos os números seqüenciais, fica fácil encontrá-los a partir da


probabilidade acumulada: basta pegar o número da probabilidade desconsiderando a vírgula e
subtrair 1, lembrando que o intervalo seguinte começa no próximo número!

Valor Probabilidade P. Acumulada Intervalo


1 0,10 0,10 0-9
2 0,15 0,25 10-24
3 0,38 0,63 25-62
4 0,25 0,88 63-87
5 0,07 0,95 88-94
6 0,05 1,00 95-99

Mas, para que serve isso? Bem, vamos pegar 20 valores da tabela 1; neste caso, vamos
adotar os números da primeira coluna, de cima para baixo, desprezando a coluna da centena.
Os valores estão representados a seguir:

2008_SI_-_PesquisaOperacional_II_-_o2007 174
Pesquisa Operacional II 7
Atualização: 22/09/2008

# Valor Valor 2
1 041 41
2 802 02
3 712 12
4 936 36
5 849 49
6 741 41
7 339 39
8 111 11
9 474 74
10 968 68
11 620 20
12 973 73
13 598 98
14 134 34
15 734 34
16 156 56
17 766 66
18 675 75
19 566 66
20 104 04

Agora, vamos converter o "Valor 2" (de dois dígitos) para os valores de 1 a 6, usando
para isso os intervalos determinados previamente:

Valor Probabilidade P. Acumulada Intervalo


1 0,10 0,10 0-9
2 0,15 0,25 10-24
3 0,38 0,63 25-62
4 0,25 0,88 63-87
5 0,07 0,95 88-94
6 0,05 1,00 95-99

Por exemplo: 41 cai no intervalo do número 3, então ele representa o número 3. 02 cai
no intervalo do número 1, então ele representa o número 1... e assim por diante. O resultado:

# Valor Valor 2 Simulado


1 041 41 3
2 802 02 1
3 712 12 2
4 936 36 3
5 849 49 3
6 741 41 3
7 339 39 3
8 111 11 2
9 474 74 4
10 968 68 4
11 620 20 2
12 973 73 4
13 598 98 6
14 134 34 3
15 734 34 3
16 156 56 3
17 766 66 4
18 675 75 4
19 566 66 4
20 104 04 1

2008_SI_-_PesquisaOperacional_II_-_o2007 175
Pesquisa Operacional II 8
Atualização: 22/09/2008

Pela freqüência, é possível calcular a probabilidade de cada número na simulação,


dividindo o número de ocorrências do valor pelo número total de ocorrências (20):

Valor Ocorrências Prob. Simulação


1 2 2/20 = 0,10
2 3 3/20 = 0,15
3 8 8/20 = 0,40
4 6 6/20 = 0,30
5 0 0/20 = 0,00
6 1 1/20 = 0,05

Comparando com as probabilidades teóricas:

Valor Ocorrências Prob. Simulação Prob. Teórica Diferença


1 2 2/20 = 0,10 0,10 0,00
2 3 3/20 = 0,15 0,15 0,00
3 8 8/20 = 0,40 0,38 +0,02
4 6 6/20 = 0,30 0,25 +0,05
5 0 0/20 = 0,00 0,07 -0,07
6 1 1/20 = 0,05 0,05 0,00

Como é possível ver, o resultado da simulação foi bem próximo daquele teórico. E é
importante ressaltar que, como em qualquer experimento probabilítico, quanto maior o
número de resultados, mais próxima as probabilidades dos resultados simulados serão das
probabilidades teórica do objeto real simulado.

Como é sempre necessário um grande número de "rodadas" para garantir que os


resultados da simulação sejam próximos aos do sistema real, é usual que as simulações sejam
programadas e resolvidas por computador.

Vale notar, entretanto, que o número alto de execuções apenas garante a proximidade
dos resultados probabilísticos do modelo com aqueles definidos pela teoria (ou que se
esperaria na realidade); um grande número de execuções jamais corrigirá erros conceituais no
modelo.

2008_SI_-_PesquisaOperacional_II_-_o2007 176
Pesquisa Operacional II 9
Atualização: 22/09/2008

Tabela 1: Números Aleatórios de 3 dígitos (fonte: http://www.random.org/integers/)


041 256 229 284 562 531 669 300 520 654
802 376 779 418 034 993 417 062 028 645
712 264 379 872 740 194 544 157 331 535
936 002 586 108 439 625 262 017 270 092
849 244 047 366 777 436 081 926 009 774
741 883 991 015 663 792 869 039 065 087
339 769 559 108 777 791 771 242 066 620
111 495 429 329 506 384 056 314 587 680
474 675 607 890 001 264 125 194 442 897
968 888 964 839 922 692 920 733 129 724
620 576 818 734 897 114 087 296 430 087
973 756 934 421 834 605 477 318 479 268
598 156 321 522 219 137 470 565 484 127
134 924 799 938 497 398 735 952 729 403
734 657 774 149 921 578 976 908 037 682
156 160 094 327 805 679 498 081 581 762
766 289 025 624 226 388 940 754 270 931
675 874 767 207 773 058 866 151 261 965
566 136 773 798 790 646 473 149 362 584
104 439 068 247 829 778 841 944 472 450
772 567 592 260 102 836 764 594 139 337
161 416 424 996 745 909 483 723 200 651
229 650 668 680 432 040 957 482 750 432
025 751 539 352 871 272 489 516 432 058
091 870 925 741 324 527 772 692 407 756
469 095 372 667 292 234 057 754 004 104
813 187 518 701 126 763 835 074 587 074
334 515 849 176 907 004 579 674 319 664
683 176 231 552 712 597 440 604 640 615
445 027 364 720 880 497 790 063 139 585
123 498 003 081 151 476 939 626 116 520
271 452 930 487 190 387 448 858 557 512
864 143 598 593 988 907 753 238 475 511
326 489 706 327 910 228 436 943 821 689
469 775 274 126 886 20 708 933 089 888
707 478 231 802 754 094 318 829 229 272
774 174 531 665 511 196 748 861 503 544
162 250 289 261 055 313 944 571 658 310
437 350 072 279 446 866 290 745 494 942
734 415 348 913 706 874 423 895 791 651
812 962 660 893 692 215 723 771 657 924
831 937 789 319 539 663 914 596 648 670
073 245 604 589 527 886 029 318 878 113
089 309 632 338 639 565 528 394 164 888
532 981 847 211 624 560 603 607 458 065
334 733 405 581 218 851 554 902 834 568
404 787 216 340 405 513 753 148 376 151
248 552 866 655 493 558 838 235 986 867
137 368 298 201 919 300 668 565 572 872
296 426 275 918 389 246 377 881 741 299

4. UMA APLICAÇÃO DO MÉTODO MONTE CARLO

Uma distribuição muito importante na simulação de eventos é a distribuição de


Poisson. A distribuição de Poisson é uma distribuição discreta, isto é, que associa
probabilidades a um dado número. Na teoria de filas ela é usada para determinar a
probabilidade de um certo número de pessoas chegarem num mesmo período de tempo.

Assim, será apresentado como exemplo a simulação de chegadas de Poisson através


de Monte Carlo, de forma que se possa simular as chegadas em uma fila, por exemplo.

2008_SI_-_PesquisaOperacional_II_-_o2007 177
Pesquisa Operacional II 10
Atualização: 22/09/2008

Figura 3: Distribuição de probabilidade de Poisson para diferentes médias (l)

4.1. Exercício Exemplo (MOREIRA, 2007 - modificado)

A chegada de clientes à bilheteria de um teatro obedece a uma distribuição de


Poisson, com taxa de 1,2 cliente por minuto. Executar 30 minutos de simulação, verificando
quantos clientes chegam a cada minuto.

Solução:

Considerando k o número de clientes que chegam por minuto, a distribuição de


Poisson nos diz que:
P(k) = (lk * e-l) / k!

Se a taxa média de chegadas é 1,2, isso significa que l = 1,2 e, lembrando, que e é
um número especial que vale 2,7183. Podemos reescrever esta expressão da seguinte forma:

P(k) = (1,2k * 2,7183-1,2) / k!


Que pode, ainda, ser simplificada da seguinte forma:

P(k) = (1,2k * 0,30) / k!


Com essas modificações, fica fácil calcular a probabilidade para cada valor de k, ou
seja, para k=0, k=1, k=2, k=3 ... lembrando que P(k=0) é a probabilidade de nenhuma pessoa
chegar em um minuto; P(k=1) é a probabilidade de uma única pessoa chegar em um minuto;
P(k=2) é a probabilidade de duas pessoas chegarem em um minutos; P(k=3) é a probabilidade
de três pessoas chegarem em um minuto... e assim por diante.

A tabela a seguir representa os resultados já calculados, com uma faixa de números


associada:

2008_SI_-_PesquisaOperacional_II_-_o2007 178
Pesquisa Operacional II 11
Atualização: 22/09/2008

k P(k) Prob. Acum. Faixa Numérica


0 0,30 0,30 00-29
1 0,36 0,66 30-65
2 0,22 0,88 66-87
3 0,09 0,97 88-96
4 0,03 1,00 97-99

Como é possível observar, a probabilidade cresce de 0 para 1, e depois decresce


bastante rápido. Esse comportamento é esperado, já que a média de chegadas é 1,2: espera-se
que a maior parte dos minutos chegue um número de pessoas próximo de 1.

Agora serão executados "30 minutos", ou seja, 30 "chutes" de quantas pessoas


chegam por minuto, para determinar uma taxa de chegadas simulada. Os "chutes" vieram da
tabela da aula anterior, da esquerda para a direita, da 13a. linha em diante (para baixo),
pegando apenas os dois dígitos da esquerda de cada número:

Minuto # Acaso Chegadas Minuto # Acaso Chegadas


1 59 1 16 39 1
2 15 0 17 73 2
3 32 1 18 95 3
4 52 1 19 72 2
5 21 0 20 40 1
6 13 0 21 73 2
7 47 1 22 65 1
8 56 1 23 77 2
9 48 1 24 14 0
10 12 0 25 92 3
11 13 0 26 57 1
12 92 3 27 97 4
13 79 2 28 90 3
14 93 3 29 3 0
15 49 1 30 68 2

Sabendo que a soma das chegadas dividida pelo total de minutos nos indica a média
de chegadas por hora, podemos calculá-la: 42 / 30 = 1,4, próximo da média teórica, de 1,2.

4.2. OPCIONAL: Exercício com Duas Variáveis (MOREIRA, 2007-modificado):

Um certo projeto, com duração de um ano meses e um investimento inicial de R$


200.000,00, são conhecidas as distribuições de freqüências da receita e despesa final do ano.
Estas distribuições são apresentadas nas tabelas a seguir. Determinar a distribuição de
freqüência da relação benefício/custo (quociente do lucro final dividido pelo investimento
inicial), tomando como base 10 rodadas de simulação.

2008_SI_-_PesquisaOperacional_II_-_o2007 179
Pesquisa Operacional II 12
Atualização: 22/09/2008

Distribuição de Freqüências da Receita:


Receita Freq. Estimada Freq. Acumul. Faixa Numérica
800.000 0,20 0,20 00-19
700.000 0,40 0,60 20-59
600.000 0,25 0,85 60-84
500.000 0,15 1,00 85-99

Distribuição de Freqüências da Despesa:


Despesa Freq. Estimada Freq. Acumul. Faixa Numérica
400.000 0,10 0,10 00-09
500.000 0,40 0,50 10-49
600.000 0,30 0,80 50-79
700.000 0,20 1,00 80-99

O processo será sortear intercaladamente números para receitas e despesas,


preenchendo a tabela a seguir, calculando o lucro final e o coeficiente para cada par
receita-despesa.

# Acaso Receita # Acaso Despesa Lucro Ben/Custo


99 500.000 72 600.000 -100.000 -0,5
67 600.000 51 600.000 0 0
68 600.000 65 600.000 0 0
88 500.000 13 500.000 0 0
70 600.000 24 500.000 100.000 0,5
51 700.000 42 500.000 200.000 1
10 800.000 44 500.000 300.000 1,5
72 600.000 88 700.000 -100.000 -0,5
89 500.000 11 500.000 0 0
12 800.000 20 500.000 300.000 1,5

Observando a freqüência de cada resultado, é possível computar a distribuição de


probabilidade, sendo que o número de ocorrência de cada resultado dividido pelo total de
ocorrências nos fornece a probabilidade daquele resultado, como pode ser visto na tabela
abaixo:
Benefício/Custo # Ocorrências Freqüência
-5 2 0,20
0 4 0,40
0,5 1 0,10
1 1 0,10
1,5 2 0,20
Total 10 1,00

2008_SI_-_PesquisaOperacional_II_-_o2007 180
Pesquisa Operacional II 13
Atualização: 22/09/2008

5. ATIVIDADE

Em um determinado dia da semana, chegam a um guichê de pedágio, em média, 2,3


carros por minuto. Admitindo que a chegada de carros ao guichê obedeça a uma distribuição
de Poisson, realizar uma simulação abrangendo 20 minutos de operação do guichê,
calculando, ao fim a média de chegadas. Analise o resultado, frente à media conhecida
fornecida pelo problema. Dica: segundo Poisson, P(k) = (lk * e-l) / k!

6. BIBLIOGRAFIA

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_II_-_o2007 181
Pesquisa Operacional II 1
Atualização: 22/09/2008

Unidade 7: Heurísticas e Meta-Heurísticas


Prof. Daniel Caetano

Objetivo: Apresentar os conceitos de emulação e simulação, e capacitar para a


aplicação do Algoritmo Genético.

INTRODUÇÃO

Conceitos Chave:

- Limitações do Simplex
- Complexidade Computacional
* Problemas NP-Completos / NP-Hard
- Otimizar => Função Objetivo + Restrições
* Solução Ótima x Boa Solução

Na pesquisa operacional, o objeto de estudo praticamente sempre será a otimização de


algum tipo de operação. Relembrando, otimizar significa encontrar a melhor solução possível
para um dado problema, onde a "melhor solução" é definida de acordo com o critério da
função objetivo e deve respeitar as restrições impostas.

Assim, do ponto de vista matemático, a otimização exige métodos de cálculo exatos


que garantam a otimalidade da solução, ou seja, que a solução encontrada será a melhor
possível.

Entretanto, nem sempre é possível encontrar um método que garanta que a solução
encontrada é a solução ótima; nestes casos, o cientista da pesquisa operacional precisará
encontrar um outro caminho: o caminho das heurísticas.

1. MÉTODOS HEURÍSTICOS

Conceitos Chave:

- "chutar com propriedade e conhecimento"


- Heurística: método matemático
* Conhecimentos sobre o problema => Solução

2008_SI_-_PesquisaOperacional_II_-_o2007 182
Pesquisa Operacional II 2
Atualização: 22/09/2008

- Método Heurístico
* Similar ao algoritmo de otimização, mas não garante otimalidade
- Exemplo da montanha
* Ótimo Local x Ótimo Global
* Múltiplos ótimos locais
* Intensificação x Diversificação
= Armazenar solução melhor, ao fim de cada intensificação
* Diversificação => Movimentos Aleatórios?
* Critério de Parada => "após n diversificações..."
* Não há como garantir a otimalidade
- Soluções ligadas a problemas específicos.

A palavra heurística é uma palavra que é, freqüentemente, traduzida livremente como


significando algo como "chutar com propriedade e conhecimento". É claro que esta não é
tradução correta, mas representa bem o sentido dos métodos heurísticos.

Pode-se definir um método heurístico, mais formalmente, como sendo um método


matemático que se utiliza de conhecimentos sobre o problema a ser resolvido para tentar
encontrar a melhor solução. Assim, um método heurístico é muito similar a um algoritmo de
otimização, com a diferença fundamental que o método heurístico não garante que o
resultado final encontrado seja ótimo.

Como um exemplo concreto, é possível considerar que uma pessoa queira chegar ao
topo de uma montanha, representada na figura 1. Entretanto, para representar a situação real
de um problema onde não se tem a menor idéia de quão perto da melhor solução se está,
pode-se considerar que esta pessoa terá de saber se chegou a este topo apenas olhando para
baixo.

Figura 1: Sujeito precisa chegar ao topo, mas só pode olhar pra baixo

Uma das estratégias que ele pode seguir (heurística) é olhar à sua volta e, enquanto
ver uma subida próxima de si, ele sobe. Quando não encontrar mais subidas próximas de si,
ele para e, dentro de seu critério, estará no topo. Mas o que acontece se ele seguir este critério
no caso da figura acima?

2008_SI_-_PesquisaOperacional_II_-_o2007 183
Pesquisa Operacional II 3
Atualização: 22/09/2008

Figura 2: Sujeito no meio da subida (esquerda) e no fim da subida (direita)

É possível observar um estado intermediário na figura 2 (esquerda). Neste estado,


quando o sujeito olha ao seu redor, vê uma subida logo à sua direita... e continua subindo.
Quando ele chegar ao estágio representado na figura 2 (direita), entretanto, ao olhar ao seu
redor o sujeito só verá descidas. Neste ponto, então, ele parará, acreditando ter chegado ao
topo. Entretanto, como é possível ver na figura, este não é o topo real!

Este tipo de problema é sempre uma ameaça, quando se usa heurísticas. É tão comum
que existe até uma nomenclatura: às situações que parecem "ótimas" segundo os critérios da
heurística, mas não são a melhor solução possível, dá-se o nome de ótimos locais. Ao ótimo
real, ou seja, a melhor solução possível, dá-se o nome de ótimo global.

Um problema pode ter vários ótimos locais (como em uma cadeia de montanhas!),
mas normalmente terá um único ótimo global.

Assim, fica claro perceber que a heurística proposta para a subida da montanha não é
muito boa: dada uma solução inicial qualquer (sujeito na base da montanha), ela sabe
melhorar essa solução até um determinado ponto (sujeito no topo da montanha menor). Este
processo em que uma solução é melhorada através de critérios de "observação local" é
chamado de intensificação.

Entretanto, uma vez que a intensificação conduziu a um ótimo local, a heurística


proposta não permite fugir deste ótimo local. Assim, é necessário possibilitar um mecanismo
para isso, normalmente chamado de diversificação.

Normalmente as heurísticas proporcionam a diversificação através de um movimento


que independe de qualquer "indicador" do problema. Por exemplo, no caso da montanha, este
critério de diversificação poderia ser: "assim que você chegar a um possível topo, ande um
número de metros aleatório para a direita e recomece a intensificação". Se a distância
percorrida para a direita não for suficientemente grande, o resultado será que o sujeito voltará
para o mesmo ótimo local, como pode ser visto na figura 3.

2008_SI_-_PesquisaOperacional_II_-_o2007 184
Pesquisa Operacional II 4
Atualização: 22/09/2008

Figura 3: Se o critério de diversificação não for suficiente, ela será ineficiente

Supondo, entretanto, que na vez seguinte a caminhada aleatória seja mais longa, é
possível que talvez a intensificação seguinte leve ao pico mais alto, como pode ser visto na
figura 4.

Figura 4: Com uma diversificação bem sucedida, é possível fugir do ótimo local

Adicionalmente, é preciso definir quando o método heurístico terá seu fim, ou seja,
quando ele deverá parar de procurar por soluções melhores. A esta regra é dado o nome de
critério de parada. No caso do sujeito na montanha pode ser algo como: "Depois que você
tentar diversificar a solução por um número X de vezes e não conseguir melhorar a solução,
pare e recupere a melhor solução".

É claro que, dependendo dos métodos e critérios escolhidos, a solução ótima pode ou
não ser alcançada, e isto pode ocorrer mais rapidamente ou mais lentamente. Entretanto, é
importante ressaltar que, para métodos heurísticos, não há como garantir otimalidade,
embora seja visível que bons métodos encontrarão boas soluções.

Uma característica importante dos métodos heurísticos é que, usualmente, eles são
bastante ligados a um problema específico. Isto é: para cada problema a ser resolvido, é
comum ter de desenvolver uma nova herística. Existem muitas heurísticas conhecidas e
consagradas para problemas clássicos da pesquisa operacional, mas para problemas práticos
elas dificilmente se aplicarão sem modificações.

2008_SI_-_PesquisaOperacional_II_-_o2007 185
Pesquisa Operacional II 5
Atualização: 22/09/2008

2. META-HEURÍSTICAS

Conceitos Chave:

- Heurísticas => intimamente ligadas aos problemas


- Heurísticas Genéricas? => Meta-Heurísticas
* Processos genéricos de intesificação e diversificação
* Adaptadas aos problemas específicos
- Baseadas em fenômenos naturais => "evolução de soluções"
* Algoritmo Genético
* Têmpera Simulada
* Colônia de Formigas

- Algoritmo Genético
* Intensificação => Cruzamento
* Diversificação => Mutação
* Processo
a) Geração da População Inicial
b) Cruzamento entre Cromossomos
c) Cálculo de Fitness
d) Seleção de Cromossomos
e) Mutação de Cromossomos
f) Voltar ao passo (b) até completar N gerações
* Gerações? Pais => Filhos
* Solução "Ótima": melhor obtida em todo o processo
- Exemplo: bin-pack (mochila binária)

Como anteriormente apresentado, as heurísticas normalmente preicam ser adaptadas


(ou mesmo construídas do zero) em cada problema prático. Isso ocorre porque as heurísticas
comuns buscam usar características do domínio do problema para proporcionar intensificação
e diversificação mais eficiente.

Entretanto, nas últimas décadas, foram propostas algumas heurísticas genéricas que,
aparentemente, resolvem uma vasta gama de problemas. Estas, que são chamadas de
meta-heurísticas definem processos genéricos de intensificação e diversificação que
proporcionam bons resultados em muitos casos.

É claro que, em todas elas, é possível adicionar característica específicas do problema,


melhorando seu resultado, mas o fato é que o mecanismo geral que elas propõem para a
intensificação e diversificação é, em grande parte, independente do problema sendo resolvido.

Estas meta-heurísticas são comumente oriundas de fenômenos naturais: usam o


conceito de evolução da natureza para "evoluir soluções". Alguns exemplos são:

2008_SI_-_PesquisaOperacional_II_-_o2007 186
Pesquisa Operacional II 6
Atualização: 22/09/2008

Algoritmo Genético, que usa os conceitos de evolução genética darwiniano para


encontrar soluções cada vez melhores a partir de soluções iniciais quaisquer.

Têmpera Simulada, que usa os conceitos de entropia (advindas do forjamento de


armas de aço) para encontrar soluções cada vez melhores.

Colônia de Formigas, que usa o os conceitos dos feromônios das formigas (usados
para marcar os melhores caminhos até a comida) para marcar possíveis melhores soluções.

Existe hoje uma grande quantidade destas meta-heurísticas, e estudá-las todas foge ao
escopo deste curso. Será apresentada, entretanto, uma breve introdução ao Algoritmo
Genético.

2.1. Algoritmo Genético

Dentre as heurísticas e meta-heurísticas, uma que tem tido bastante destaque nos
tempos atuais é o chamado Algoritmo Genético, que se baseia nos critérios de evolução das
espécies para promover a evolução de soluções.

A idéia do algoritmo genético é representar as soluções como cromossomos e o


processo de intensificação é obtido através do cruzamento entre soluções (ou seja: a
formação de novas soluções com partes de soluções antigas) e a diversificação é obtida
através da mutação (ou seja, modificando intencionalmente o valor de algum gene de um
cromossomo).

O processo do algoritmo genético é:

1) Geração da População Inicial, criando cromossomos que representam as soluções


(muitas vezes, soluções aleatórias).
2) Cruzamento entre cromossomos diferentes, gerando outros cromossomos.
3) Cálculo do Fitness, que é um valor que indica "o quão bom" cada cromossomo é
(em geral, o cálculo é oriundo da função objetivo).
4) Seleção dos cromossomos melhor adaptados (eliminando os mais fracos, ou seja,
aqueles com pior valor de fitness)
5) Mutação dos cromossomos, introduzindo mudanças aleatórias em alguns
cromossomos aleatórios.
6) Volta ao passo 2.

Este processo deve ser repetido N vezes, sendo N chamado de número de gerações.
Ao final da execução, adota-se a melhor solução obtida em todas as rodadas como sendo a
possível "solução ótima".

Para compreender, nada melhor que um exemplo. Existe um caso muito estudado na
pesquisa operacional chamado de problema da mochila binária. É, tipicamente, o problema
do ladrão que tem um saco muito fraco: ele quer maximizar o lucro de seu roubo, mas não

2008_SI_-_PesquisaOperacional_II_-_o2007 187
Pesquisa Operacional II 7
Atualização: 22/09/2008

pode pegar tudo o que quiser, porque o saco é fraco e aguenta apenas 50kg. Assim, vem a
dúvida: o que ele deve "roubar" para ter mais lucro?

Imagine que na casa o ladrão tenha 6 objetos:


Número Nome Peso (kg) Valor (R$)
0 Piano 2000 4000
1 Faqueiro de prata 15 1500
2 TV de LCD 25 3500
3 DVD Player 3 250
4 Home Theater 10 1000
5 Relógio Cuco 3 500

Para o algoritmo genético, como há 6 itens, serão usados cromossomos com 6 genes,
sendo que o gene 0 indica se o piano será pego ou não; o gene 1 indica se o faqueiro será
pego ou não... e assim por diante. Assim, considere o seguinte cromossomo:

Número do Gene: 0 1 2 3 4 5
Valor do Gene: 0 1 1 1 0 0

Este cromossomo significaria que estariam sendo levados os itens 1, 2 e 3 (Faqueiro,


TV e DVD).

1) O primeiro passo é gerar alguns cromossomos. Aqui serão gerados apenas 3:

Cromossomo 1: 1 0 0 1 1 0
Cromossomo 2: 0 1 1 1 0 0
Cromossomo 3: 0 1 0 0 1 1

2) O segundo passo é cruzar os cromossomos entre si. Cada cruzamento gera dois
novos cromossomos. Neste caso, os cruzamentos serão aleatórios: 1 com 3 e 2 com o 3.
Primeiramente, 1 com 3:
|
Cromossomo 1: 1 0 0 | 1 1 0
Cromossomo 3: 0 1 0 | 0 1 1
|
Ponto de Divisão

Cromossomo 4: 1 0 0 0 1 1 ( 1 | 3)
Cromossomo 5: 0 1 0 1 1 0 ( 3 | 1)

2008_SI_-_PesquisaOperacional_II_-_o2007 188
Pesquisa Operacional II 8
Atualização: 22/09/2008

Agora o 2 com o 3:
|
Cromossomo 2: 0 1 1 | 1 0 0
Cromossomo 3: 0 1 0 | 0 1 1
|
Ponto de Divisão

Cromossomo 6: 0 1 1 0 1 1 ( 2 | 3)
Cromossomo 7: 0 1 0 1 0 0 ( 3 | 2)

Como resultado, essa será população total:

Cromossomo 1: 1 0 0 1 1 0
Cromossomo 2: 0 1 1 1 0 0
Cromossomo 3: 0 1 0 0 1 1
Cromossomo 4: 1 0 0 0 1 1
Cromossomo 5: 0 1 0 1 1 0
Cromossomo 6: 0 1 1 0 1 1
Cromossomo 7: 0 1 0 1 0 0

3) O terceiro passo é o cálculo do fitness, ou seja, o quão boa é cada solução


encontrada. No caso, pode-se considerar que quanto maior o valor dentro da mochila, melhor:

Número Nome Peso (kg) Valor (R$)


0 Piano 2000 4000
1 Faqueiro de prata 15 1500
2 TV de LCD 25 3500
3 DVD Player 3 250
4 Home Theater 10 1000
5 Relógio Cuco 3 500
Fitness
Cromossomo 1: 1 0 0 1 1 0 5250
Cromossomo 2: 0 1 1 1 0 0 5250
Cromossomo 3: 0 1 0 0 1 1 3000
Cromossomo 4: 1 0 0 0 1 1 5500
Cromossomo 5: 0 1 0 1 1 0 2750
Cromossomo 6: 0 1 1 0 1 1 6500
Cromossomo 7: 0 1 0 1 0 0 1750

Em princípio, o melhor nesta geração é o cromossomo 6.

4) O quarto passo é a seleção, onde serão eliminados os cromossomos menos aptos.


Serão eliminados 4 cromossomos, para voltar ao número original de 3 cromossomos. Uma
forma de escolher os cromossomos para eliminar seria pegar os com menor valor de fitness.
Entretanto, é comum iniciar eliminando primeiramente os cromossomos inviáveis que, neste
caso, são aqueles cujo peso não é suportado pelo saco:

2008_SI_-_PesquisaOperacional_II_-_o2007 189
Pesquisa Operacional II 9
Atualização: 22/09/2008

Fitness Peso
Cromossomo 1: 1 0 0 1 1 0 5250 2013
Cromossomo 2: 0 1 1 1 0 0 5250 43
Cromossomo 3: 0 1 0 0 1 1 3000 28
Cromossomo 4: 1 0 0 0 1 1 5500 2013
Cromossomo 5: 0 1 0 1 1 0 2750 28
Cromossomo 6: 0 1 1 0 1 1 6500 53
Cromossomo 7: 0 1 0 1 0 0 1750 18

São 3 os cromossomos que estouram o peso máximo de 50kg: 1, 4 e 6 (que parecia ser
o melhor candidato!). Assim, serão eliminados estes 3 primeiramente, faltando um para ser
eliminado.
Fitness Peso
Cromossomo 2: 0 1 1 1 0 0 5250 43
Cromossomo 3: 0 1 0 0 1 1 3000 28
Cromossomo 5: 0 1 0 1 1 0 2750 28
Cromossomo 7: 0 1 0 1 0 0 1750 18

Assim, a melhor solução, por enquanto, é representada pelo cromossomo 2. É


necessário eliminar mais um, entretanto. Será eliminado o mais inapto de todos, que é o
cromossomo 7, ficando desta forma a população:

Cromossomo 2: 0 1 1 1 0 0 5250 43
Cromossomo 3: 0 1 0 0 1 1 3000 28
Cromossomo 5: 0 1 0 1 1 0 2750 28

5) O próximo passo é a mutação, que alterará aleatoriamente alguns valores 0 para 1 e


1 para 0. O resultado da mutação será usado para novos cruzamentos e o processo se repetirá.
Sempre que for encontrada uma solução viável melhor que as anteriores, ela deve ser
armazenada e, ao final de N gerações, a resposta será o melhor cromossomo de todas as
gerações.

Parando aqui na primeira geração, a melhor solução seria a do cromossomo 2, com


peso de 43, lucro de 5250, carregando os seguintes bens: Faqueiro, TV e DVD Player. Isso
está próximo da solução ótima, que seria Faqueiro, TV e Home Theater, com um lucro total
de 6000 e um peso de exatamente 50.

Entretanto, com os parâmetros definidos, a solução ótima jamais seria possível só


através dos cruzamentos:
Cromossomo Ótimo: 0 1 1 0 1 0 6000 50

A partir destes cromossomos:


Cromossomo 2: 0 1 1 1 0 0 5250 43
Cromossomo 3: 0 1 0 0 1 1 3000 28
Cromossomo 5: 0 1 0 1 1 0 2750 28

2008_SI_-_PesquisaOperacional_II_-_o2007 190
Pesquisa Operacional II 10
Atualização: 22/09/2008

A não ser através das mutações. Assim, pode-se dizer que a solução do cromossomo
2 seria um ótimo local, sendo que a solução do cromossomo ótimo seria o ótimo global.
Como dito anteriormente, a mutação é o que propicia o processo de diversificação,
permitindo fugir dos ótimos locais, na tentativa de encontrar um ótimo global.

3. ATIVIDADE

Uma empresa de transporte precisa transportar alguns equipamentos para um cliente,


mas nem todos os equipamentos podem ser colocados ao mesmo tempo no barco, o que
obrigará duas viagens: uma inicia amanhã e a outra apenas na semana que vem, quando o
barco voltar.

Ocorre que estes equipamentos serão vendidos e o cliente solicitou que o primeiro
transporte contivesse o maior valor possível embarcado, de forma que ele possa vender e
recuperar mais rapidamente a maior parte do valor investido.

Sabendo que o barco aguenta até 550kg de carga, quais equipamentos deverão ser
embarcados?

Nome Peso (kg) Valor (R$)


Equipamento 0 400 4000
Equipamento 1 30 700
Equipamento 2 60 800
Equipamento 3 200 2500
Equipamento 4 150 1000
Equipamento 5 120 500

Use algoritmo genético, usando três cromossomos iniciais, de 6 genes cada, e dois
cruzamentos, com partição no meio do cromossomo, realizando uma iteração inteira.
Explique o critério usado na seleção, já que ao final deve restar apenas 2 cromossomos.
Indique, ao fim, a melhor solução encontrada.

Use a folha na próxima página.

2008_SI_-_PesquisaOperacional_II_-_o2007 191
Pesquisa Operacional II 11
Atualização: 22/09/2008

Nome:
Genes Iniciais

Cromossomo 1:
Cromossomo 2:
Cromossomo 3:

Resultado do Cruzamento:

Cromossomo ____ e ____: 4:


5:
Cromossomo ____ e ____: 6:
7:

População: Fitness Peso

Cromossomo 1: ______ ______


Cromossomo 2: ______ ______
Cromossomo 3: ______ ______
Cromossomo 4: ______ ______
Cromossomo 5: ______ ______
Cromossomo 6: ______ ______
Cromossomo 7: ______ ______

Seleção:

Critério: ______________________________________________
________________________________________________________
Cromossomo 1:
Cromossomo 2:

Melhor Solução:

Cromossomo:

Que representa os seguintes equipamentos na primeira viagem: __________________


________________________________________________________
_______________________________________________________.

2008_SI_-_PesquisaOperacional_II_-_o2007 192
Pesquisa Operacional II 1
Segundo Semestre de 2007

Notas da Aula 9: Teoria de Filas - Uma Introdução


Prof. Daniel Caetano

Objetivo: Apresentar os conceitos básicos da teoria de filas.

Bibliografia:

- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.


Thomson Pioneira, 2007.

Introdução

Todas as pessoas estão acostumadas, de uma forma ou de outra, com as filas: no


banco, no pedágio, no restaurante self-service... entretanto, não são apenas pessoas que ficam
nas filas: bagagens esperam por avisão, produtos esperam até serem vendidos etc. É claro que
os produtos "não se importam" de esperar, mas esta espera de produtos - que em alguns casos
se chama estoque - implica em custos adicionais.

Por esta razão, normalmente o desejo é controlar, reduzir ou até mesmo eliminar as
filas de um processo qualquer, sejam elas compostas por pessoas ou não. Entretanto, para
estudar o comportamento das filas e conseguir alcançar tais objetivos, é preciso conhecer a
teoria das filas, algo que começará a ser apresentado nesta aula.

1. Comportamento Básico das Filas

Antes de mais nada, é preciso introduzir uma nomenclatura. Denominaremos de


clientes toda a entidade que pode ter de esperar para ser processada. Denominamos fila ao
conjunto dos clientes que estão esperando para serem processados. Denominamos postos de
atendimento ao número de unidades de processamento.

Por exemplo, numa fábrica de brinquedos, os componentes do brinquedo são os


clientes e as máquinas são os postos de atendimento. Num banco, por outro lado, os clientes
são as pessoas que pretendem usar o banco e os caixas são os postos de atendimento.

Em um sistema de filas, é possível sempre determinar uma taxa de chegada de


clientes (especificada pela letra grega lâmbda: k), ou seja, quantos clientes chegam em um
determinado intervalo de tempo (ex.: 5 clientes por hora).

2008_SI_-_PesquisaOperacional_II_-_o2007 193
Pesquisa Operacional II 2
Segundo Semestre de 2007
Da mesma forma, é possível determinar uma taxa de atendimento de clientes
(especificada pela letra grega mi: l), ou seja, quantos clientes são atendidos em um
determinado intervalo de tempo (ex.: 6 clientes por hora).

Se as taxas de chegada e atendimento forem fixas, ou seja, não variarem de forma


alguma, é possível prever o comportamento do sistema diretamente. Por exemplo: se a taxa
de chegada for menor que a taxa de atendimento, não haverá formação de fila e, se ela exisitir
inicialmente, ela será dissipada. Essa e outras situações são simples de perceber quando
observamos exemplos numéricos.

a) Taxa de Chegadas < Taxa de Atendimento (k < l)

Consideremos um serviço que funciona por 8 horas em um dia, em que a taxa de


chegadas é fixa, de 5 pessoas por hora, e a taxa de atendimento, também fixa, é de 6
pessoas por hora. Imaginemos que há, inicialmente, 6 pessoas na fila. Ao fim do dia, o
que terá acontecido com a fila?

Bem, ao fim das 8 horas, terão chegado ao sistema as 6 pessoas da fila inicial, MAIS
5 * 8 pessoas = 46 pessoas no total. Ao fim de 8 horas, o sistema teve uma capacidade
de atendimento de 6 * 8 = 48 pessoas. Ora, se as chegadas são fixas e o atendimento
também e o número de pessoas que o sistema consegue atender em um dia é de 48
pessoas e chegaram apenas 46, é claro que todas foram atendidas e a fila foi
diminuindo ao longo do dia, até chegar em nenhuma fila ao final do dia.

b) Taxa de Chegadas = Taxa de Atendimento (k = l)

Consideremos agora o mesmo serviço, que funciona por 8 horas em um dia, em que a
taxa de atendimento, fixa, é de 6 pessoas por hora. Porém, hoje, é um dia especial (dia
de vencimento de contas, por exemplo) e a taxa de chegadas, ainda fixa, será de 6
pessoas por hora. Imaginemos que há, inicialmente, 6 pessoas na fila. Ao fim do dia, o
que terá acontecido com a fila?

Bem, ao fim das 8 horas, terão chegado ao sistema as 6 pessoas da fila inicial, MAIS
6 * 8 pessoas = 54 pessoas no total. Ao fim de 8 horas, o sistema teve uma capacidade
de atendimento de 6 * 8 = 48 pessoas. Ora, se as chegadas são fixas e o atendimento
também e o número de pessoas que o sistema consegue atender em um dia é de 48
pessoas e chegaram 54, é claro que sobraram, ao fim do dia, 54 - 48 = 6 pessoas na
fila. Ou seja, a fila permaneceu a mesma.

c) Taxa de Chegadas > Taxa de Atendimento (k > l)

Consideremos agora o mesmo serviço, que funciona por 8 horas em um dia, em que a
taxa de atendimento, fixa, é de 6 pessoas por hora. Porém, hoje, é um dia especial (dia
de pagamento, por exemplo) e a taxa de chegadas, ainda fixa, será de 7 pessoas por
hora. Imaginemos que há, inicialmente, 6 pessoas na fila. Ao fim do dia, o que terá
acontecido com a fila?

2008_SI_-_PesquisaOperacional_II_-_o2007 194
Pesquisa Operacional II 3
Segundo Semestre de 2007

Bem, ao fim das 8 horas, terão chegado ao sistema as 6 pessoas da fila inicial, MAIS
7 * 8 pessoas = 62 pessoas no total. Ao fim de 8 horas, o sistema teve uma capacidade
de atendimento de 6 * 8 = 48 pessoas. Ora, se as chegadas são fixas e o atendimento
também e o número de pessoas que o sistema consegue atender em um dia é de 48
pessoas e chegaram 62, é claro que sobraram, ao fim do dia, 62 - 48 = 14 pessoas na
fila. Ou seja, ao fim do dia, a fila cresceu!

Esta relação entre taxa de chegadas k e taxa de atendimento l, como pode ser visto, é
bastante importante. Por esta razão, é definido o valor chamado de taxa de ocupação do
sistema (representado pela letra grega rô: q), definido da seguinte forma:

q=k/l

E, resumidamente:

Se q < 1, a fila tende a diminuir.


Se q = 1, a fila tende a se manter.
Se q > 1, a fila tende a aumentar.

2. Aleatoriedade nas Filas

Pela informação apresentada anteriormente, fica a impressão que se não houver uma
fila inicial e uma taxa de ocupação q < 1, ou seja, a taxa de chegadas é inferior à taxa de
atendimento, nunca haverá a formação de uma fila. Entretanto, isso na prática não é verdade!
Mas por quê?

No exemplo da seção anterior, onde foram apresentadas as comparações e o índice q,


foram definidas taxas de chegada e atendimento fixas, ou seja, sem variação alguma. Isso
significa que, em cada hora, chegariam 5 clientes, ou seja, chegaria exatamente 1 cliente a
cada 60/5 = 12 minutos. Da mesma forma, a cada hora seriam atendidos 6 clientes, ou seja,
seria atendido 1 cliente exatamente a cada 60/6 = 10 minutos. Nesta situação, fica claro que
se um cliente chegou no momento 0 minutos, o segundo cliente chegará apenas no momento
12 minutos. Considerando que o primeiro cliente foi atendido imediatamente, quando o
segundo cliente chegar, o atendimento do primeiro já terá acabado por 2 minutos!

Ou seja, se a taxa de atendimento é maior que a taxa de chegadas, há momentos de


ociosidade dos atendentes (decorrência de a taxa de ocupação ser menor que 1)! E ainda
assim pode ocorrer a formação de filas?! A resposta é SIM!

E a resposta é sim porque, na prática, as chegadas (quase) nunca são fixas; também
não o são os atendimentos. Normalmente dizemos que a taxa de chegada média e a taxa de
atendimento média são conhecidas. Isso significa que se dissermos que a taxa de chegadas
média é de 5 clientes por hora, isso significa que os clientes chegam em média a cada 12

2008_SI_-_PesquisaOperacional_II_-_o2007 195
Pesquisa Operacional II 4
Segundo Semestre de 2007
minutos. Se eles chegam em média neste intervalo de tempo, isso significa que o intervalo
entre dois clientes pode ser 10 minutos, 9 minutos, 13 minutos ou 15 minutos. Em outras
palavras, o intervalo entre chegadas não é fixo.

Vejamos numericamente. Suponhamos que o tempo de atendimento é fixo, de 10


minutos por cliente (taxa de atendimento de 6 por hora). Imaginemos que o primeiro cliente
chegue no momento 0 minutos, o segundo no momento 9 minutos, o terceiro no momento 19
minutos e o quarto no momento 36 minutos. Observe na tabela abaixo o comportamento do
sistema (simulação).

Momento Cliente 1 Cliente 2 Cliente 3 Cliente 4


0 Chegada /
Início Atendimento
9 Sendo atendido Chegada / Fila

10 Fim Atendimento Início Atendimento

19 Sendo Atendido Chegada / Fila

20 Fim Atendimento Início Atendimento

30 Fim Atendimento

36 Chegada /
Início Atendimento
46 Fim Atendimento

Observe que o tempo de atendimento foi sempre de 10 minutos (fixo, como indicado).
O intervalo entre chegadas não foi fixo. Da primeira chegada para a segunda foi de 9 minutos.
Da segunda para a terceira foi de 10 minutos e da terceira para a quarta foi de 17 minutos. O
intervalo de chegadas médio foi de (9+10+17)/3 = 12 minutos. Ou seja, q = 10/12 < 1,
indicando que a fila teria tendência a diminuir.

No entanto, do momento 9 ao 10 e do momento 19 ao 20 ocorreu a formação de fila.


Essa é uma característica importante de ser compreendida, principalmente porque também a
taxa de atendimento é variável (e não fixa, como foi considerada nesta simulação),
aumentando ainda mais a chance de formação de filas, ainda que momentâneas.

Mas então, o valor de q não tem significado? Mas é claro que tem! O valor de q
significa a tendência da fila ao longo do tempo; Observe que quando q < 1, como no
exemplo da tabela, até ocorrem filas eventuais (podendo até ser filas "grandes"), mas a
tendência ao longo do tempo é que as filas diminuam, já que, em média, o sistema é capaz de
atender mais pessoas do que chegam.

3. Custos Envolvidos em Filas

Como dito anteriormente, as filas precisam ser gerenciadas ou controladas, pois elas
implicam em custos. Em essência, os gerentes têm alguns problemas que precisam de
soluções. Antes de analisar os custos, veremos estes problemas.

2008_SI_-_PesquisaOperacional_II_-_o2007 196
Pesquisa Operacional II 5
Segundo Semestre de 2007
O primeiro deles é referente à área destinada a fila. Estas áreas são adequadas? O
tamanho é suficiente? Sua localização atrapalha o serviço prestado?

O segundo é referente às prioridades. Devem ser criadas filas com prioridade para
usos especiais, como office-boys ou idosos?

O terceiro é referente ao número de postos de atendimento. Quantos postos devem ser


adotados?

Finalmente, o quarto problema, é se vale a pena investir para reduzir o tempo de


atendimento, com adoção de medidas tecnológicas e melhor treinamento do pessoal.

Como é possível observar, é claro que uma área maior para a fila, com um enorme
número de postos de atendimento e atendimento preferencial, com tempo de atendimento
baixo oriundo de um excelente treinamento de pessoal e alta tecnlogia são características que
todo cliente iria preferir. Dizemos que, quanto mais suas características se aproximam do
ideal do cliente, maior é o seu nível de serviço. Deve-se buscar, portanto, o aumento do nível
de serviço, ou seja, uma melhora do atendimento.

Entretanto, a melhoria destas características - que levam ao aumento do nível de


serviço - quase sempre implica em um aumento no custo do atendimento (ou custo de
atender). Quanto maior o nível de serviço, maior o custo de atendimento.

Por outro lado, um maior nível de serviço, ou seja, um melhor atendimento, diminui
as chances de perda de receita porque um cliente foi embora (devido à fila, por exemplo).
Além disso, um serviço melhor faz com que a imagem da empresa perante o cliente seja
também melhor (um banco sem filas é considerado um banco melhor pelo cliente, por
exemplo). A existência de fila, então, tem um custo também, chamado de custo da fila (ou
custo de não antender), que diminui com o aumento do nível de serviço.

O custo total, dado pela soma do custo do atendimento com o custo da fila, deve ter,
portanto, um pondo de equilíbrio, onde o nível de serviço seja tal que o aumento de custo de
atendimento seja compensado pelo benefício da redução do custo de fila. Isso é representado
na figura 1 (MOREIRA, 2007).

Figura 1: Equilíbrio entre custo de atender e não atender

2008_SI_-_PesquisaOperacional_II_-_o2007 197
Pesquisa Operacional II 6
Segundo Semestre de 2007

Nem sempre é simples chegar a este nível de serviço ótimo, seja pela dificuldade em
definir claramente os custos de atendimento e de fila, seja pela dificuldade em definir qual é,
na prática, este nível de serviço ótimo.

Ma prática, busca-se aumentar o nível de serviço até um ponto em que os custos deste
aumento não sejam exagerados. De qualquer forma, sempre se busca uma taxa de ocupação
inferior a 1, garantindo que as filas tendam a se dissipar ao longo do tempo.

Nas próximas aulas veremos um pouco mais sobre o funcionamento das filas e como
tirar algumas conclusões a partir das características do sistema e das taxas de chegada e
atendimento.

4. Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_II_-_o2007 198
Pesquisa Operacional II 1
Segundo Semestre de 2007

Notas da Aula 10: Teoria de Filas II - Obtendo Informações


Prof. Daniel Caetano

Objetivo: Apresentar os cálculos mais básicos sobre filas.

Bibliografia:

- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.


Thomson Pioneira, 2007.

Introdução

A Teoria de Filas é um ramo amplo da Pesquisa operacional e existe um grande


número de autores trabalhando nesta área. Entretanto, nesta aula estaremos preocupados em
conceituar um modelo bastante simples de fila, deixando para outros cursos um maior
aprofundamento nos diferentes tipos de fila.

1. Um Modelo para uma Fila Simples

O modelo mais simples de fila é o representado na figura abaixo:

Figura 1: Modelo de uma fila simples

Os clientes "surgem" da fonte de clientes, e chegam apresentam um certo


comportamento de chegada. Como nem sempre podem ser atendidos de imediato, há um
critério de seleção para o atendimento (normalmente é a ordem de chegada). Os clientes
serão atendidos no posto de atendimento, que terá um determinado comportamento de
atendimento. Finalmente, os clientes deixam o local. É um estudo destes elementos que
permite identificar os fundamentos da teoria de filas.

Fonte de Clientes: a fonte de clientes é a população de clientes potenciais da fila. A


fonte pode ser finita ou infinita. A fonte é considerada infinita quando o tamanho da fila não
influencia na probabilidade de chegada de mais um cliente à fila, o que ocorre quando o
número de clientes na fila é uma fração muito pequena da população total da fonte. Isso

2008_SI_-_PesquisaOperacional_II_-_o2007 199
Pesquisa Operacional II 2
Segundo Semestre de 2007
ocorre, normalmente, em sistemas abertos ao público em geral, como cinemas, postos de
gasolina etc. Por outro lado, a fonte pode ser finita, quando o tamanho da fila influencia na
probabilidade de chegada de outro cliente à fila, situação que ocorre quando o número de
clientes na fila é uma parcela importante da população na fonte. Por exemplo, se um técnico é
responsável por 3 máquinas que operam sempre em pares (uma está sempre "descansando"),
se uma quebrar e estiver na fila para reparo (ou em atendimento), as outras duas terão de
trabalhar sem parar, aumentando a chance de outra delas quebrar.

Comportamento de Chegada: o primeiro aspecto do comportamento de chegada a


ser observado é se as chegadas são em grupo (como quando um ônibus de viagem chega a um
restaurante) ou isoladas/mistas (como na fila do cinema). A consideração destes dois casos é
distinto, mas as filas de chegadas mistas podem ser vistas como as de chegadas isoladas.
Entretanto, há mais fatores a serem considerados. Por exemplo, se o cliente é paciente (depois
que chegou à fila, não sai mais dela até ser atendido) ou impaciente (pode ir embora antes de
ser atendido). Nesta aula consideraremos que as chegadas são isoladas (ou mistas), que os
clientes são pacientes.

Vale aqui lembrar que nas chegadas deve ser considerada a distribuição de
probabilidades das chegadas. Em geral, quando consideramos que as chegadas são
independentes (população infinita), consideramos as chegadas como um processo
poissoniano, ou seja, respeitando a distribuição de poisson, que dá a probabilidade de um
determinado número de clientes chegar num dado intervalo de tempo. Chamando de k o
número médio de clientes que chegam em um dado intervalo, ou seja, a taxa média de
chegadas, a fórmula abaixo (de Poisson) fornece a probabilidade de qualquer número x de
clientes chegarem naquele mesmo intervalo:

P(x) = (kx * e-k) / x!


Em alguns casos queremos determinar a probabilidade de o intervalo entre duas
chegadas ser menor que um determinado tempo. Neste caso, o tempo entre chegadas obedece
à distribuição exponencial, e a probabilidade pode ser calculada pela fórmula:

P(t ü T) = 1 - e-kT
Processo de Seleção: Em qualquer fila, sempre precisa existir um criério de seleção,
ou seja, qual é a regra para que se saiba quem será o próximo cliente a ser atendido. No caso
mais usual, considera-se as filas do tipo FIFO (First In Fist Out, ou seja, Primeiro a Entrar
Primeiro a Sair). Esta não é a única forma, entretanto. É comum haver preferência para
idosos, por exemplo. Adicionalmente, há locais (como pronto-socorros) onde a adoção de um
sistema FIFO é inadequado. Nesta aula consideraremos as filas do tipo FIFO.

Postos de Atendimento: posto de atendimento é o local onde será feito o atendimento


dos clientes da fila. É chamado de canal único quando houver apenas um posto de
antedimento. Por outro lado, é chamado de canal múltiplo quando houver dois ou mais postos
de atendimento paralelo. Adicionalmente, dá se o nome de atendimento único quando todo o

2008_SI_-_PesquisaOperacional_II_-_o2007 200
Pesquisa Operacional II 3
Segundo Semestre de 2007
atendimento for feito em apenas um posto, e atendimento múltiplo quando for necessário
passar por vários postos para o atendimento ser completo. Em todos estes casos,
consideramos, entretanto, filas únicas, sendo o caso de filas múltiplas (como as dos
supermercados) um outro caso distinto. Nesta aula estudaremos apenas o caso de fila única,
canal único, atendimento único.

Este posto de atendimento tem, entretanto, um comportamento, que pode ser definido
pela taxa de atendimento l, ou seja, quantos clientes este posto consegue atender em um
dado intervalo de tempo. Em muitos casos também é considerado que o atendimento também
é um processo de poisson, e a fórmula para determinar a probabilidade de y clientes serem
atendidos num dado intervalo de tempo é:

P(y) = (ly * e-l) / y!


Em alguns casos queremos determinar a probabilidade de o tempo de atendimento ser
menor que um determinado tempo. Neste caso, o tempo de atendimento obedece à
distribuição exponencial, e a probabilidade pode ser calculada pela fórmula:

P(t ü T) = 1 - e-lT

2. Características de Análise em uma Fila

Ainda que tenhamos definido um modelo, em filas não é possível "otimizar" a fila,
como seria feito em um problema de programação linear. Mas para que serve o "modelo",
então? Nas filas, o modelo serve para fornecer indicadores de desempenho para que
possamos avaliar o comportamento da fila, buscando que ela tenha melhores características
operacionais, ou seja, um melhor comportamento, dentro de uma determinada faixa de custo.

Através do modelo temos as relações entre as diferentes características do sistema de


fila e sabemos como a mudança de uma característica afetará as outras. As características
mais importantes, mas não únicas, de uma fila de canal único são:

a) Utilização do sistema: q, indica a porcentagem de uso do sistema, a probabilidade


do sistema estar sendo usado e a probabilidade de que um cliente que chega seja atendido.
q=k / l
b) A probabilidade de que o sistema esteja ocioso: P(0).
P(0) = 1 - q

c) Probabilidade de que o sistema esteja com N clientes: P(n), sendo que o número de
clientes no sistema é o número de clientes em fila mais o número de clientes sendo atendidos.
P(n) = (k / l)n*P(0)

2008_SI_-_PesquisaOperacional_II_-_o2007 201
Pesquisa Operacional II 4
Segundo Semestre de 2007

d) Probabilidade de que a fila não tenha mais que k clientes: P(n=k).


P(n=k) = 1-(k / l)k+1

e) Número médio de clientes na fila (tamanho médio da fila): Lf.


Lf = k2 / ( l * (l-k) )

f) Número médio de clientes no sistema (da fila e atendidos): L.


L = Lf + k/l

g) Tempo médio de espera na fila: Wf.


Wf = Lf / k

h) Tempo médio de espera no sistema (da chegada ao fim do atendimento): W.


W=L/k

3. Exercício Exemplo (Livro)

Trampolândia, a capital da Conchinchina, mantém um serviço de ponte aérea com


algumas das maiores cidades do país. O principal aeroporto da cidade é o Pouso Seguro, que
concentra todo o serviço de ponte aérea. Isso faz com que o tráfego aéreo fique um pouco
congestionado.
A intensidade do tráfego aéreo é função da hora do dia, mas o momento mais crítico
está entre as 17 e 18 horas dos dias úteis, exatamente durante o retorno das pessoas que
deixaram a capital pela ponte aérea para trabalhar fora. Os aviões que chegam ficam em uma
"fila", aguardando a vez de aterrissar. Eles ficam sobrevoando em grandes círculos nas
proximidades do aeroporto Pouso Seguro, até que a torre de controle libere alguma pista para
pouso.
Para esse horário (entre 17 e 18 horas), a taxa média de chegada dos aviões é de um a
cada 3 minutos. A torre de controle, por sua vez, consegue aterrissar, em média, um avião por
minuto. Supondo que tanto a taxa de chegada quanto a taxa de pouso obedeçam à distribuição
de Poisson, determinar:

a) A taxa de utilização do sistema de aterrisagem no aeroporto;


b) A probabilidade de que não haja nenhum avião pousando ou esperando para pouso.
c) A probabilidade de que haja apenas 1 avião aterrissando ou aguardando para pouso.
d) A probabilidade de que não haja mais que 3 aviões aguardando ordem de pouso.
e) O número médio de aviões aguardando ordem de pouso.
f) O número médio de aviões pousando ou aguardando ordem de pouso.
g) O tempo médio que o avião precisa ficar esperando para poder pousar.
h) O tempo médio decorrido entre a chegada do avião e o término de seu pouso.

2008_SI_-_PesquisaOperacional_II_-_o2007 202
Pesquisa Operacional II 5
Segundo Semestre de 2007
Solução:

a) A taxa de chegadas k é de 1 avião a cada 3 minutos e a taxa de pouso


(atendimento) l é de 1 pouso por minuto. Para calcular a taxa de utilização, precisamos que
os intervalos temporais sejam os mesmos, ou seja, precisamos determinar a taxa média de
pousos em 3 minutos. Ora, se a taxa de pouso média é de um pouso por minuto, podemos
dizer que a taxa média de pousos l é de 3 pousos a cada 3 minutos.
q = k/l = 1/3 (utilização de 33,3%)
b) A probabilidade de não haver nenhum avião no sistema é:
P(0) = 1 - q = 1-1/3 = 2/3 (probabilidade de 66,7%)

c) A probabilidade de que haja apenas um avião pousando ou esperando é:


P(n) = (k / l)n*P(0) = (1/3)1*2/3 = 1/3 * 2/3 = 2/9 (probabilidade de 22,2%)

d) A probabilidade de que não haja mais que 3 aviões "em fila", ou seja, aguardando:
P(n=k) = 1-(k / l)k+1 = P(n=3) = 1-(1/3)3+1 = 1 - (1/3)4 = 1 - 1/81 = 80/81 (98,8%)

e) Número médio de aviões "em fila", ou seja, aguardando pouso:


Lf = k2 / ( l * (l-k) ) = 12 / ( 3 * (3-1) ) = 1/6 (0.17 aviões)

f) Número médio de aviões no sistema, ou seja, aguardando ou aterrissando:


L = Lf + k/l = 1/6 + 1/3 = 3/6 = 1/2 (0.5 aviões)

g) Tempo médio "em fila", ou seja, de espera para pouso:


Wf = Lf / k = (1/6) / 1 = 1/6 (como o intervalo é de 3 minutos, 3 * 1/6 = 0.5 minuto)

h) Tempo médio no sistema, ou seja, da chegada ao término do pouso:


W = L / k = (1/2)/1 = 1/2 (como o intervalo é de 3 minutos, 3*1/2 = 1.5 minutos)

4. Bibliografia

MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed. Thomson


Pioneira, 2007.

2008_SI_-_PesquisaOperacional_II_-_o2007 203