Escolar Documentos
Profissional Documentos
Cultura Documentos
FACULDADE DE ENGENHARIA
CAMPUS JOÃO MONLEVADE
PESQUISA OPERACIONAL
Caio Veloso
Dante Silva
Gustavo Amora
Marcelo Viana
Matheus Barbosa
Matheus Cardoso
PESQUISA OPERACIONAL
João Monlevade
2013
1. Fluxo Custo Mínimo
1.1 - Estudo:
Este problema possui papel principal entre os modelos de otimização, uma vez que este engloba uma enorme
quantidade de aplicações e pode ser resolvido de maneira extremamente eficiente. O Problema de Fluxo de Custo Mínimo
é um Problema de Programação Linear, logo o Simplex pode ser utilizado para sua resolução.
Considerações:
1. A rede é representada por um Dígrafo (orientada) e conectada.
2. No mínimo um dos nós é um “nó de fornecimento” (origem).
3. No mínimo um dos nós é um “nó de demanda” (destino).
4. Todos os nós restantes são “nós Transshipment” (entreposto, intermediário).
5. A rede possui arcos, tanto quanto forem necessários, com capacidade suficiente para habilitar todos os fluxos
gerados nos nós de fornecimento para alcançar os nós de demanda.
6. O custo do fluxo através de cada arco é proporcional a quantidade daquele fluxo, onde o custo por
unidade de fluxo é conhecido.
7. O objetivo é minimizar o custo total de enviar o fornecimento disponível através da rede para satisfazer a demanda
dada (um objetivo alternativo é maximizar o lucro total para fazer isto).
1.2 – Modelo:
Considere um Dígrafo conectado, onde nos n nós incluem-se no mínimo um nó de fornecimento e no mínimo um nó de
demanda. As variáveis de decisão (de controle) são xij = fluxo no arco (i,j). As informações necessárias são:
Z=
2
4
9
3
1
3
2
>> A = [1 1 1 0 0 0 0; -1 0 0 1 0 0 0; 0 -1 0 -1 1 0 0; 0 0 -1 0 0 1 -1; 0 0 0 0 -1 -1 1; 1 0 0 0 0 0 0; 0 0 0 0 1 0 0]
A=
1 1 1 0 0 0 0
-1 0 0 1 0 0 0
0 -1 0 -1 1 0 0
0 0 -1 0 0 1 -1
0 0 0 0 -1 -1 1
1 0 0 0 0 0 0
0 0 0 0 1 0 0
b=
50
40
0
-30
-60
10
80
>>lb = zeros(7,1)
lb =
0
0
0
0
0
0
0
>> [x, vf, i1, i2, i3] = linprog(Z, A, b, [], [], lb)
Optimization terminated.
x=
0.0000
40.0000
10.0000
40.0000
80.0000
0.0000
20.0000
vf =
490.0000
i1 =
i2 =
iterations: 6
algorithm: 'large-scale: interior point'
cgiterations: 0
message: 'Optimization terminated.'
constrviolation: 3.4319e-012
i3 =
2.1 - Definição:
Os problemas de caminho mais curto com um só objetivo são fundamentais e frequentes quando se estudam problemas em
redes, por exemplo de transportes ou de comunicações. Este problema surge quando se pretende determinar o caminho
mais curto, mais barato ou mais viável, entre um ou vários pares de nós de uma rede.
Estes problemas surgiram a partir de adaptações a uma grande variedade de problemas práticos, não só como modelos
únicos mas também como subproblemas de problemas mais complexos. Por exemplo, surgiram nas indústrias de
telecomunicações e de transportes sempre que se pretendia enviar uma mensagem, ou um veículo, entre dois locais
geograficamente distantes, o mais rápido ou o mais barato possível.
O planeamento do tráfego urbano fornece um outro exemplo importante : os modelos utilizados para o cálculo do fluxo de
tráfego padrão são problemas de optimização não linear, ou modelos de equilíbrio complexos. Contudo, a maioria das
abordagens algorítmicas para determinar tráfegos urbanos padrão consiste, sob hipóteses simplificadoras, em resolver um
grande número de problemas de caminho mais curto como subproblemas (um para cada par de nós origem−destino na rede)
[1].
Existem três tipos de problemas de caminho mais curto :
• de um nó para outro,
• de um nó para todos os outros (árvore dos caminhos mais curtos),
• entre todos os pares de nós.
2.2 - Modelo genérico
2.3 - Soluções
Uma fábrica de artigos de decoração, localizada em Lambari (MG), deve entregar uma grande quantidade de peças na
cidade de Baependi (MG). A empresa quer saber qual o caminho que seu caminhão de entregas deve fazer para minimizar a
distância total percorrida. A figura a seguir, extraída de Lachtermacher (2004), representa, na forma de rede, as ligações
entre as cidades da região.
Solução:
(a) Variáveis de decisão:
X ij =1; se o arco (i; j) pertencer ao caminho;0; caso contrário.
(b) Função objetivo:
min f(x) = 41x12 + 44x13 + 50x15 + 37x24 + 27x35 + 45x46 + 4x56
(c) Restrições:
c.1) Equilíbrio de fluxo nos nós:
Considerando o nó 1 como o nó origem e n como o nó destino, pode-se modelar o problema de caminho mínimo
genericamente como:
2.4 - Matlab
C=
41
44
50
37
27
45
4
>> A= [ 1 1 1 0 0 0 0 ; 1 0 0 -1 0 0 0; 0 1 0 0 -1 0 0; 0 0 0 1 0 -1 0 ; 0 0 1 0 1 0 -1; 0 0 0 0 0 1 1]
A=
1 1 1 0 0 0 0
1 0 0 -1 0 0 0
0 1 0 0 -1 0 0
0 0 0 1 0 -1 0
0 0 1 0 1 0 -1
0 0 0 0 0 1 1
b=
1
0
0
0
0
1
>> lb=zeros(6,1)
lb =
0
0
0
0
0
0
X=
0
0
1
0
0
0
1
vf =
54
i1 =
1
i2 =
iterations: 0
nodes: 1
time: 0.8268
algorithm: 'LP-based branch-and-bound'
branchStrategy: 'maximum integer infeasibility'
nodeSrchStrategy: 'best node search'
message: 'Optimization terminated.'
3 – Designação:
3.1: Estudo:
Um caso especial do modelagem é aquele em que cada origem tem uma unidade disponível e cada destino necessita também
de uma unidade. É o caso de escalar vendedores para regiões de vendas, máquinas para diversos locais etc. Essa
característica torna o algoritmo de soluções bastante simples. Antes de aplicá-lo, devemos verificar se o modelo está
equilibrado. No modelo de designação, o número de origens deve ser igual ao número de destinos devido a sua característica.
Caso isso não ocorra, devemos construir origens ou destinos auxiliares, com custo de transferência zero.
3.3 – Exemplo:
Deseja-se designar quatro operários para quatro tarefas, de maneira que o número total de homens-hora seja mínimo. Cada
homem desempenha cada tarefa em um determinado número de horas, conforme indicam os dados da matriz de custos da
figura 1:
Figura 1: Matriz de custos
Na seqüência, determinam-se os menores números de cada linha, indicados ao lado da matriz de custos da figura 1, e efetua-
se a subtração destes de todos os elementos das linhas correspondentes, obtendo-se a Matriz de Custos Modificada da Figura
2.
Agora se deve identificar o menor número em cada coluna, conforme a Figura 3, e pela subtração destes em cada coluna tem-
se a nova Matriz de Custos Modificada da Figura 4.
Figura 4: Identificação dos Menores Números de cada Coluna
O tempo total a ser gasto é determinado pelo produto da matriz de custos inicial pela matriz X:
T = 5.1 + 3.1 + 9.1 + 3.1 = 20 horas.
O mesmo valor pode ser obtido somando-se as constantes que foram subtraídas de cada linha e cada coluna.
3.4 - Matlab:
m_custos = [ 5 24 13 7; 10 25 3 23; 28 9 8 5; 10 17 15 3 ];
m_custos_mod = m_custos;
for i = 1:4
m_custos_mod(i, :) = m_custos_mod(i, :) - elemento(i);
end
m_custos_mod
m_custos_mod2 = m_custos_mod;
for i = 1:4
m_custos_mod2(:, i) = m_custos_mod2(:, i) - elemento2(i);
end
m_custos_mod2
X = double((m_custos_mod2 == 0));
for i = 1:4
for j = 1:4
if( X(i,j) == 1)
if((sum(X(i,:)) > 1)&&(sum(X(:,j)) > 1))
X(i,j) = 0;
end
end
end
end
tempo_gasto = sum(sum(m_custos.*X))
tempo_gasto2 = sum(elemento) + sum(elemento2)
Resultado:
m_custos_mod =
0 19 8 2
7 22 0 20
23 4 3 0
7 14 12 0
m_custos_mod2 =
0 15 8 2
7 18 0 20
23 0 3 0
7 10 12 0
X=
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
tempo_gasto =
20
tempo_gasto2 =
20
4 – P-MEDIANA
5
a) Formulação Genérica
Sendo que:
-Na primeira linha , ocorre a minimização das distancias ponderadas entre
clientes e os postos que oferecem serviço por exemplo.
-Na segunda linha, cada cliente i é alocado a somente uma instalação j.
-Na terceira linha, Garante que somente p instalações oferecem o serviço
proposto;
-Na quarta linha , Afirmam que um cliente somente é atendido num local onde
existe uma instalação que oferece o serviço.
Teitz e Bart
Com o intuito de apresentar o problema das p-medianas de forma clara e
simples será proposto um exemplo didático a ser resolvido pelo método mais
citado na literatura, a heurística de Teitz e Bart.
Exemplo Numérico
Dado:
1
E o número de transmissão:
Passo 3) Encontrar o
E rotular x4 como “testado” e volte ao passo 2 até que não se tenham mais nós
rotulados como “não testados”.
Atualmente:FO=951 e S=(x2,x3,x4}
Passo 3)
Passo 3)
Matlab
A partir deles constrói-se a matriz das distâncias euclidianas que será utilizada como
entrada de dados para o desenvolvimento do algoritmo:
iário
Europa 5,7 2,8 0,0 5,4 2,2 4,2 3,6
Jardim 2,2 3,0 5,4 0,0 7,2 2,2 5,8
Lagoa 7,8 5,0 2,2 7,2 0,0 6,4 3,2
Leblon 1,4 1,4 4,2 2,2 6,4 0,0 6,1
Mantiqu
eira 7,3 5,0 3,6 5,8 3,2 6,1 0,0
clc;closeall; clear;
bairros = [1 3 5 3 7 2 8; ...
7 5 3 8 2 6 5];
tb = length(bairros);
d = zeros(tb,tb);
'MarkerSize',8);
end
% Calcula a distância euclidiana dos bairros
for i = 1 : tb
for j = 1 : tb
d(i,j) = distH([bairros(1,i) bairros(2,i)],[bairros(1,j) bairros(2,j)]);
end
end
[n m] = size(d);
custo = zeros(n,m);
% Variáveis principais
total = zeros(1,n);
F = zeros(p,1); % Guarda as posições de cada mediana (as facilidades)
menor = zeros(p,1); % Guarda o custo total de cada mediana
disposicao = zeros(p,1);
cont = 1;
for qtd = 1 : p
total(i) = sum(custo(:,i));
end
[menor(qtd) F(qtd)] = min(total);
fprintf('Custo da 1ª facilidade: %2.2f\n',menor(qtd));
fprintf('E sua posição: %d\n', F(qtd));
break;
end
% Passo 1: Se for maior que 2-mediana calcule todos as p-medianas
for i = 1 : n
total(i) = sum(custo(:,i));
end
[menor(qtd) F(qtd)] = min(total);
% Passo 2: zera toda linha
for i = 1 : n
custo(F(qtd),i) = 0;
end
% Passo 3: Calcula o min de cada custo em relação a facilidade
% encontrada
for i = 1 : n
for j = 1 : m
custo(i,j) = min(custo(i,j),custo(i,F(qtd)));
end
end
fprintf('Custo da %dª facilidade: %2.2f\n',qtd ,menor(qtd));
fprintf('E sua posição: %d\n', F(qtd));
end
% Encontrou as Facilidades. Agora vamos determinar a localização dos
% usuários em relação as Facilidades
Facilidades = zeros(2,length(F));
for i = 1: length(F)
Facilidades(:,i) = bairros(:,F(i));
end
plot(Facilidades(1,i),Facilidades(2,i),'ro');
holdon
plot(bairros(1,j),bairros(2,j),'b+')
grid on
end
end