2008 SI - PesquisaOperacional I e II - O2007
2008 SI - PesquisaOperacional I e II - O2007
2008 SI - PesquisaOperacional I e II - O2007
Atualização: 22/02/2008
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.
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.
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 2
Pesquisa Operacional 3
Atualização: 22/02/2008
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
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.
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.
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.
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.
3. Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 5
Pesquisa Operacional 1
Atualização: 22/02/2008
Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.
Introdução
2008_SI_-_PesquisaOperacional_I_-_o2007 6
Pesquisa Operacional 2
Atualização: 22/02/2008
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.
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.
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
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:
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.
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:
Ou ainda...
CTP = 3,5 * x
3,5*x ü 70
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!
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.
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.
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
c1 = x1 * p1
c2 = x2 * p2
c3 = x3 * p3
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
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
...
[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
...
x1 ¶ 0
x2 ¶ 0
x3 ¶ 0
[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
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
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 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
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 total de M1 = 4 * xA + 6 * xB
Tempo total de M1 ü 24
Juntando ambos...
Limitação de Horas de M2 : 16
2008_SI_-_PesquisaOperacional_I_-_o2007 14
Pesquisa Operacional 10
Atualização: 22/02/2008
Tempo total de M2 = 4 * xA + 2 * xB
Tempo total de M2 ü 16
Juntando ambos...
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:
Condição de Não-Negatividade
2008_SI_-_PesquisaOperacional_I_-_o2007 15
Pesquisa Operacional 11
Atualização: 22/02/2008
Modelo Final
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
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.
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
4. Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 17
Pesquisa Operacional 1
Atualização: 07/03/2008
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
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
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.
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
X (xA) Y (xB)
0 4
6 0
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
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.
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:
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
É 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:
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.
Sujeito a: x¶4
y¶5
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
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.
[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.
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?
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
2008_SI_-_PesquisaOperacional_I_-_o2007 27
Pesquisa Operacional 1
Atualização: 07/03/2008
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.
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 29
Pesquisa Operacional 3
Atualização: 07/03/2008
2. A Modelagem
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
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
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:
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.
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 31
Pesquisa Operacional 5
Atualização: 07/03/2008
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.
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
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:
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 33
Pesquisa Operacional 7
Atualização: 07/03/2008
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.
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
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) 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
2008_SI_-_PesquisaOperacional_I_-_o2007 35
Pesquisa Operacional 1
Atualização: 12/03/2008
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
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:
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:
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:
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:
Juntando ambos...
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:
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...
Condição de Não-Negatividade
Modelo Final
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
2008_SI_-_PesquisaOperacional_I_-_o2007 38
Pesquisa Operacional 4
Atualização: 12/03/2008
Problema
Solução
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?
2008_SI_-_PesquisaOperacional_I_-_o2007 39
Pesquisa Operacional 5
Atualização: 12/03/2008
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:
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:
2008_SI_-_PesquisaOperacional_I_-_o2007 40
Pesquisa Operacional 6
Atualização: 12/03/2008
Juntando ambos...
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 necessárias: 1 * xA + 7 * xB + 4 * xC + 10 * xD
Horas disponíveis: 72
Juntando ambos...
2008_SI_-_PesquisaOperacional_I_-_o2007 41
Pesquisa Operacional 7
Atualização: 12/03/2008
Condição de Não-Negatividade
xA ¶ 0; xB ¶ 0; xC ¶ 0 ; xD ¶ 0 <= Não-negatividade
Modelo Final
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
Problema
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
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:
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:
Juntando ambos...
2008_SI_-_PesquisaOperacional_I_-_o2007 44
Pesquisa Operacional 10
Atualização: 12/03/2008
Juntando ambos...
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:
Modelo Final
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
Problema 1
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
Onde xS1 significa o volume não utilizado do navio e xS2 o peso livre do navio.
2008_SI_-_PesquisaOperacional_I_-_o2007 46
Pesquisa Operacional 12
Atualização: 12/03/2008
Problema 2
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
[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
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
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
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
2008_SI_-_PesquisaOperacional_I_-_o2007 49
Pesquisa Operacional 1
Atualização: 12/03/2008
Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.
Introduçã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, 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
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
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
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.
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
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
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 algoritmo é:
2008_SI_-_PesquisaOperacional_I_-_o2007 53
Pesquisa Operacional 5
Atualização: 12/03/2008
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
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
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.
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
2008_SI_-_PesquisaOperacional_I_-_o2007 56
Pesquisa Operacional 8
Atualização: 12/03/2008
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".
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.
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).
2008_SI_-_PesquisaOperacional_I_-_o2007 57
Pesquisa Operacional 9
Atualização: 12/03/2008
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 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 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:
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:
Recalculando XS3:
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
2008_SI_-_PesquisaOperacional_I_-_o2007 61
Pesquisa Operacional 13
Atualização: 12/03/2008
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 62
Pesquisa Operacional 14
Atualização: 12/03/2008
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:
2008_SI_-_PesquisaOperacional_I_-_o2007 64
Pesquisa Operacional 16
Atualização: 12/03/2008
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.
XA = 3
XB=2
XS1 = 0
XS2 = 0
XS3 = 1
Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 65
Pesquisa Operacional 1
Atualização: 12/03/2008
Introdução
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.
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.
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:
É importante lembrar que apenas o lado direito não pode ser negativo. Os
coeficientes das variáveis podem.
2. Restrições do Tipo ¶
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.
4XA + 10XB ¶ 45
2008_SI_-_PesquisaOperacional_I_-_o2007 67
Pesquisa Operacional 3
Atualização: 12/03/2008
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:
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":
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:
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 =
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:
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:
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.
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.
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.
Exercício L3
Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 70
Pesquisa Operacional I 1
Primeiro Semestre de 2007
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.
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
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
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
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
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
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
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
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
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
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.
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
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
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
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
2008_SI_-_PesquisaOperacional_I_-_o2007 77
Pesquisa Operacional I 8
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 0 1/2 1/2 -1/2 11/2
0 XB 0 1 -1 0 1 4
Linha Z
Linha 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.
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
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
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
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
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
2008_SI_-_PesquisaOperacional_I_-_o2007 80
Pesquisa Operacional I 11
Primeiro Semestre de 2007
Somando ambas...
XA XB XE bj
2 1 0 15
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
5. Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 82
Pesquisa Operacional I 1
Primeiro Semestre de 2007
Resolução do Exercício L4
Resolução
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:
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
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
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
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.
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:
2008_SI_-_PesquisaOperacional_I_-_o2007 85
Pesquisa Operacional I 4
Primeiro Semestre de 2007
-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
2008_SI_-_PesquisaOperacional_I_-_o2007 86
Pesquisa Operacional 1
Atualização: 12/03/2008
1. Apresentação do 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.
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.
= 25*D3 + 40*D4
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.
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 90
Pesquisa Operacional 5
Atualização: 12/03/2008
Neste momento, basta clicar no botão "Resolver". Após isso, aparecerá a seguinte
janela:
2008_SI_-_PesquisaOperacional_I_-_o2007 91
Pesquisa Operacional 6
Atualização: 12/03/2008
2008_SI_-_PesquisaOperacional_I_-_o2007 92
Pesquisa Operacional 1
Atualização: 12/03/2008
Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.
Introdução
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.
1. Um Problema de Atribuição
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
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:
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:
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:
O que foi dito sobre o trabalho 1, pode também ser dito sobre o trabalho 2 e sobre o
trabalho 3:
Xij c { 0, 1}
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
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.
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.
Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 97
Pesquisa Operacional 1
Atualização: 12/03/2008
Bibliografia:
- MOREIRA, D.A. Pesquisa Operacional: Curso Introdutório. [S.I.]: Ed.
Thomson Pioneira, 2007.
Introdução
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.
2008_SI_-_PesquisaOperacional_I_-_o2007 98
Pesquisa Operacional 2
Atualização: 12/03/2008
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.
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
Máquina \ Trabalho T1 T2 T3
M1 10 5 8
M2 12 9 15
M3 9 12 10
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
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
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-----------
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-----------
Máquina \ Trabalho T1 T2 T3
M1 3 0| 0
M2 1 0| 3
M3 -----------0----------- -----------3|----------- -----------0-----------
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
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
Máquina \ Trabalho T1 T3
M1 3 0
M3 0 0
Resultando em:
Máquina \ Trabalho T1
M3 0
2008_SI_-_PesquisaOperacional_I_-_o2007 102
Pesquisa Operacional 6
Atualização: 12/03/2008
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.
Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 103
Pesquisa Operacional 1
Atualização: 12/03/2008
Resolução da Lista 3
Prof. Daniel Caetano
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.
Função Objetivo:
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á:
2008_SI_-_PesquisaOperacional_I_-_o2007 104
Pesquisa Operacional 2
Atualização: 12/03/2008
Restrições:
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 é:
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 é:
2*xP + 4*xJ
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:
2008_SI_-_PesquisaOperacional_I_-_o2007 105
Pesquisa Operacional 3
Atualização: 12/03/2008
Como xP é o número de horas trabalhadas por Pedro, este valor deve ser menor que 8:
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.
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:
2008_SI_-_PesquisaOperacional_I_-_o2007 106
Pesquisa Operacional 4
Atualização: 12/03/2008
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:
3. Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 107
Pesquisa Operacional 1
Atualização: 12/03/2008
Resolução da Lista 4
Prof. Daniel Caetano
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.
Modelagem Matemática
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
O que foi dito sobre a equipe 1, pode também ser dito sobre a equipe 2 e sobre a
equipe 3:
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:
Bem, o que foi dito sobre o projeto A, pode também ser dito sobre o projeto B e sobre
o projeto C:
Xij c { 0, 1}
2008_SI_-_PesquisaOperacional_I_-_o2007 109
Pesquisa Operacional 3
Atualização: 12/03/2008
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:
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
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
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 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 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
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 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.
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 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
Bibliografia
2008_SI_-_PesquisaOperacional_I_-_o2007 113
Pesquisa Operacional II 1
Atualização: 13/08/2008
Apresentação da Disciplina
Prof. Daniel Caetano
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
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
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
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.
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.
- 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
- Problemas Gerais
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.
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?
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.
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 119
Pesquisa Operacional II 7
Atualização: 13/08/2008
3. BIBLIOGRAFIA
2008_SI_-_PesquisaOperacional_II_-_o2007 120
Pesquisa Operacional II 1
Atualização: 18/08/2008
INTRODUÇÃO
Conceitos Chave:
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?
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:
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.
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 124
Pesquisa Operacional II 1
Atualização: 25/08/2008
INTRODUÇÃO
Conceitos Chave:
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:
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:
2008_SI_-_PesquisaOperacional_II_-_o2007 126
Pesquisa Operacional II 3
Atualização: 25/08/2008
13 * X11
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.
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á:
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:
2008_SI_-_PesquisaOperacional_II_-_o2007 127
Pesquisa Operacional II 4
Atualização: 25/08/2008
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á:
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.
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
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.
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
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
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.
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
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
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 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.
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
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
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
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!
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
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
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
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
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.
Conceitos Chave:
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.
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
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
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
INTRODUÇÃO
Conceitos Chave:
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.
Conceitos Chave:
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.
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 141
Pesquisa Operacional II 3
Atualização: 04/09/2008
:
Figura 2: Um problema real, mais complexo
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:
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!
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ó.
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
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:
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.
Conceitos Chave:
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.
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.
4. RESOLUÇÃO DE UM PROBLEMA
:
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.
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.
:
Figura 8: Preenchimento da primeira etiqueta.
2008_SI_-_PesquisaOperacional_II_-_o2007 148
Pesquisa Operacional II 10
Atualização: 04/09/2008
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.
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.
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.
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.
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
:
Figura 11: Preenchimento da última etiqueta.
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
É claro, entretanto, que este caminho está invertido, sendo o caminho da origem para
o destino, é O-2-1-D.
Conceitos Chave:
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.
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
7. BIBLIOGRAFIA
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 152
Pesquisa Operacional II 1
Atualização: 16/09/2008
INTRODUÇÃO
Conceitos Chave:
Conceitos Chave:
2008_SI_-_PesquisaOperacional_II_-_o2007 153
Pesquisa Operacional II 2
Atualização: 16/09/2008
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
Conceitos Chave:
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.
É 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.
Conceitos Chave:
2008_SI_-_PesquisaOperacional_II_-_o2007 156
Pesquisa Operacional II 5
Atualização: 16/09/2008
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
2008_SI_-_PesquisaOperacional_II_-_o2007 158
Pesquisa Operacional II 7
Atualização: 16/09/2008
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.
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 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
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
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
INTRODUÇÃO
Conceitos Chave:
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ó.
1. O NETWORK SIMPLEX
Conceitos Chave:
2008_SI_-_PesquisaOperacional_II_-_o2007 164
Pesquisa Operacional II 2
Atualização: 22/09/2008
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.
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.
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.
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 168
Pesquisa Operacional II 1
Atualização: 22/09/2008
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.
É 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:
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 170
Pesquisa Operacional II 3
Atualização: 22/09/2008
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 171
Pesquisa Operacional II 4
Atualização: 22/09/2008
Conceitos Chave:
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 172
Pesquisa Operacional II 5
Atualização: 22/09/2008
Conceitos Chave:
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.
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:
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:
Agora, é possível observar uma relação entre o último valor de cada seqüência com o
valor da probabilidade acumulada multiplicada por 100:
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:
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:
2008_SI_-_PesquisaOperacional_II_-_o2007 175
Pesquisa Operacional II 8
Atualização: 22/09/2008
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.
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
2008_SI_-_PesquisaOperacional_II_-_o2007 177
Pesquisa Operacional II 10
Atualização: 22/09/2008
Solução:
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:
2008_SI_-_PesquisaOperacional_II_-_o2007 178
Pesquisa Operacional II 11
Atualização: 22/09/2008
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 179
Pesquisa Operacional II 12
Atualização: 22/09/2008
2008_SI_-_PesquisaOperacional_II_-_o2007 180
Pesquisa Operacional II 13
Atualização: 22/09/2008
5. ATIVIDADE
6. BIBLIOGRAFIA
2008_SI_-_PesquisaOperacional_II_-_o2007 181
Pesquisa Operacional II 1
Atualização: 22/09/2008
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
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:
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.
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
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 184
Pesquisa Operacional II 4
Atualização: 22/09/2008
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:
- 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)
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.
2008_SI_-_PesquisaOperacional_II_-_o2007 186
Pesquisa Operacional II 6
Atualização: 22/09/2008
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.
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.
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?
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
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)
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
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
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
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?
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.
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:
Seleção:
Critério: ______________________________________________
________________________________________________________
Cromossomo 1:
Cromossomo 2:
Melhor Solução:
Cromossomo:
2008_SI_-_PesquisaOperacional_II_-_o2007 192
Pesquisa Operacional II 1
Segundo Semestre de 2007
Bibliografia:
Introdução
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.
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).
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.
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.
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:
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ê?
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.
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.
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.
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?
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.
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).
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
2008_SI_-_PesquisaOperacional_II_-_o2007 198
Pesquisa Operacional II 1
Segundo Semestre de 2007
Bibliografia:
Introdução
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.
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(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.
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(t ü T) = 1 - e-lT
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.
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
2008_SI_-_PesquisaOperacional_II_-_o2007 202
Pesquisa Operacional II 5
Segundo Semestre de 2007
Solução:
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%)
4. Bibliografia
2008_SI_-_PesquisaOperacional_II_-_o2007 203