AULA 12
MODELOS DE PROGRAMAÇÃO LINEAR
Autor: Anibal Tavares de Azevedo
PESQUISA OPERACIONAL
PROBLEMAS DE PROGRAMAÇÃO INTEIRA
(Integer) Space: The last frontier
Programação Inteira: A última fronteira
PROBLEMAS PROGRAMAÇÃO INTEIRA
Designação Mochila
Caixeiro
PROBLEMAS PROGRAMAÇÃO INTEIRA
Designação Mochila
Caixeiro
i j xij
Variáveis de Decisão
Xij= Quantidade transportada do nó i para o nó j.
Transporte
x i j
Origem
(fábrica) Destino
(mercado)
1
2
x22
1
2 x21
x12 x11
Variáveis de Decisão
Xij= Quantidade transportada da fábrica i para o mercado j.
Transporte
1
2
x22
1
2 x21
x12 x11
∑
∑
=
=
= n
j j m
i
i d
f
1
1 n = no. de mercados
m = no. de fábricas
Restrição (implícita): tudo o que for produzido nas fábricas (fi) deve ser consumido pelos mercados (di).
Transporte
Transporte
∑
∑
=
=
= n
j j m
i
i d
f
1 1
Modelo anterior supõe implicitamente que tudo que é produzido será consumido. Neste caso, o modelo de
transporte é dito balanceado.
Existem, porém, 2 casos nos quais esta restrição não é satisfeita:
Caso 1 Capacidade >
Demanda Caso 2 Capacidade <
Demanda
m i
f x
n
j
i
ij , 1, ,
1
= L
∑
≤=
n j
d x
m
i
j
ij , 1, ,
1
= L
∑
==
m i
f x
n
j
i
ij , 1, ,
1
= L
∑
==
n j
d x
m
i
j
ij , 1, ,
1
= L
∑
≤= Não precisa
transportar tudo !
Não pode atender todos !
Transporte
1
2
x22
1
2 x21
x12 x11
3 mercado “fantasma”
Caso 1
Transporte
1
2
1
2 x11
3
x21 + x22 + x23 + x24 = f2
4 x12
x13 x14 x21 x22 x23 x24
3
x31 x32 x33 x34
x11 + x12 + x13 + x14 = f1
x31 + x32 + x33 + x34 = f3
Excedente
Transporte
1
2
1
2 x11
3
x12 + x22 + x32 = d2
4 x12
x13 x14 x21 x22 x23 x24
3
x31 x32 x33 x34
x11 + x21 + x31 = d1
x14 + x24 + x34 = d4 x13 + x23 + x33 = d3 Capacidade - Demanda
S.a.:
x11 + x12 + x13 + x14 = 2.000 x21 + x22 + x23 + x24 = 3.000 x31 + x32 + x33 + x34 = 1.500 x11 + x21 + x31 = 2.000
x12 + x22 + x32 = 2.000 x13 + x23 + x33 = 1.000 x14 + x24 + x34 = 1.500
MODELO COMPLETO DETALHADO
Transporte
Min 25x11 + 20x12 + 30x13 + 30x21 + 25x22 + 25x23 + 20x31 + 15x32 + 23x33
Cap. fábrica
Cap. mercado
Capacidade - Demanda Excedente
Transporte
1
2
x22
1
2 x21
x12 x11
3
fábrica “fantasma”
x32 x31
Caso 2
Min
S.a.:
MODELO COMPLETO GERAL
Transporte
m i
f x
n
j
i
ij , 1, ,
1
= L
∑
≤=
n j
d x
m
i
j
ij , 1, ,
1
= L
∑
≤=
∑∑
= = mi n
j
ij ijx c
1 1
n = no. de mercados m = no. de fábricas
Cap. fábrica
Cap. mercado
Custo de transporte
Min
S.a.:
MODELO COMPLETO GERAL
Transporte
m i
f x
x
n
j
i in
ij , 1, ,
1
1 = = L
∑
+= +
n j
d x
x
m
i
j j m
ij , 1, ,
1
1 = = L
∑
+= +
∑∑
= =
m
i n
j
ij ijx c
1 1
Custo de transporte
Ax
b
Matriz A com elementos -1, 1 e 0 é dita matriz unimodular.
Vetor só com elementos
inteiros
X é solução inteira !!
(Bazaraa, 2nd, p.429)
i j
xij
Variáveis de Decisão
Xij= 1 se operário i realiza a tarefa j e 0 caso contrário.
x i j
Operário Tarefa
Problema de Designação
1
2
x22
1
2 x21
x12 x11
n
m= n = no. de tarefas
m = no. operários
Restrições : todas as tarefas j devem ser alocadas a pelo menos 1 operário e vice-versa.
Problema de Designação
1 1
2 x12
x11
Restrições : todas os operários i devem ser alocados a pelo menos 1 tarefa !
Problema de Designação
x
11+ x
12= 1
Alocação do operário 1
2
x22
1
2 x21
Restrições : todas os operários i devem ser alocados a pelo menos 1 tarefa !
Problema de Designação
x
21+ x
22= 1
Alocação do operário 2
1
2
1 x21
x11
Restrição : todas as tarefas j devem ser alocadas a pelo menos 1 operário !
Problema de Designação
x
11+ x
21= 1
Alocação para a tarefa 1
1
2
x22
2 x12
Restrição : todas as tarefas j devem ser alocadas a pelo menos 1 operário !
Problema de Designação
x
12+ x
22= 1
Alocação para a tarefa 2
Min
S.a.:
MODELO COMPLETO GERAL
Problema de Designação
m i
x
m
j
ij 1 , 1, ,
1
= L
∑
==
m j
x
m
i
ij 1 , 1, ,
1
= L
∑
==
∑∑
= = mi m
j
ij ijx c
1 1
custo para realizar a tarefa
m j
i
xij =1 ou 0 , , =1,L,
Pelo menos 1 tarefa (j) para cada operário(i)
Pelo menos 1 operário(i) para
cada tarefa (j)
Min
S.a.:
MODELO COMPLETO GERAL
Problema de Designação
m i
x
m
j
ij 1 , 1, ,
1
= L
∑
==
m j
x
m
i
ij 1 , 1, ,
1
= L
∑
==
∑∑
= =
m
i n
j
ij ijx c
1 1
custo para realizar a tarefa
m j
i
xij =1 ou 0 , , =1,L,
X é solução inteira !!
(Bazaraa, 2nd, p.429) Caso particular do modelo de transporte:
m = n e vetor b só com elementos 1
i j
x i j
Máquina Tarefa
Problema de Designação
i j xij
Variáveis de Decisão
Xij= 1 se a máquina i realiza a tarefa j e 0 caso contrário.
x i j
Máquina Tarefa
Problema de Designação
A Machine Company tem 4 máquinas e 4 tarefas para serem realizadas. Cada máquina deve ser designada para completar uma tarefa. O tempo requerido para completar cada tarefa por cada máquina é dado na tabela dada a seguir. A Machine Company deseja minimizar o tempo total de processamento para realizar as 4 tarefas.
Formule e resolva o problema de programação linear correspondente.
Problema de Designação
xij
Máquina Tarefa 1 Tempo[h]
Tarefa 2 Tempo[h]
Tarefa 3 Tempo[h]
Tarefa 4 Tempo[h]
1 14 5 8 7
2 2 12 6 5
3 7 8 3 9
4 2 4 6 10
Tabela 1: Dados do problema de Designação
Problema de Designação
1 1
2 x12
x11
Restrições : todas os operários i devem ser alocados a pelo menos 1 tarefa !
Problema de Designação
x
11+ x
12= 1
Alocação da máquina 1
1
2
1 x21
x11
Restrição : todas as tarefas j devem ser alocadas a pelo menos 1 operário !
Problema de Designação
x
11+ x
21= 1
Alocação para a tarefa 1
S.a.:
x11 + x12 + x13 + x14 = 1 x21 + x22 + x23 + x24 = 1 x31 + x32 + x33 + x34 = 1 x41 + x42 + x43 + x44 = 1 x11 + x21 + x31 + x41 = 1 x12 + x22 + x32 + x42 = 1 x13 + x23 + x33 + x43 = 1 x14 + x24 + x34 + x44 = 1
MODELO COMPLETO DETALHADO Min 14x11 + 5x12 + 8x13 + 7x14 +
2x21 + 12x22 + 6x23 + 5x24 + 7x31 + 8x32 + 3x33 + 9x34 + 2x41 + 4x42 + 6x43 + 10x44
Restrições de máquinas
Transporte
Restrições de tarefas
Tempo total
Min
S.a.:
MODELO COMPLETO GERAL
Problema de Designação
m i
x
m
j
ij 1 , 1, ,
1
= L
∑
==
m j
x
m
i
ij 1 , 1, ,
1
= L
∑
==
∑∑
= =
m
i m
j
ij ijx t
1 1
Tempo total
Restrições de máquinas Restrições de
tarefas
m j
i
xij ≥ 0 , , =1,L,
GLPK Lab for Windows
# MODELO DO PROBLEMA DE DESIGNAÇÃO
# Este problema encontra o menor custo de transporte
# que atende as requisões de demanda e produção.
set I; /* máquina */
set J; /* tarefa */
param a{i in I}; /* alocação das i máquinas */
param b{j in J}; /* alocação das j tarefas */
param d{i in I, j in J}; /* tempo de realização */
/* Tempo de realização em horas */
param c{i in I, j in J} := d[i,j];
#Parametros para impressao dos resultados do modelo em arquivos.
param file, symbolic, default "ResumoDesignacao.txt";
/* Alocação da máquina i para a tarefa j */
var x{i in I, j in J} >= 0;
/* Minimização do tempo total de processamento */
minimize cost: sum{i inI, j in J} c[i,j] * x[i,j];
/* Alocação da máquina i */
s.t. supply{i inI}: sum{j in J} x[i,j] = a[i];
/* Alocação da tarefa j */
s.t. demand{j inJ}: sum{i in I} x[i,j] = b[j];
PARTE 1 - FORMULAÇÃO Índices das variáveis
Dados do modelo
Variáveis Modelo
GLPK Lab for Windows
solve;
/* RELATORIO */
printf '\n'
>> file;
printf '---\n'
>> file;
printf 'Solucao Encontrada \n'
>> file;
printf '---\n'
>> file;
printf ' \n'
>> file;
printf '---\n'
>> file;
printf " Máquina Tarefa Tempo \n"
>> file;
printf{i in I} " %8s %8d %10g\n", i, sum{j in J} j * x[i,j], sum{j in J} c[i,j] * x[i,j]
>> file;
printf '---\n'
>> file;
printf 'Custo total (z): ' >> file;
printf ' %10.2f \n', cost >> file;
printf '---\n'>> file;
printf '\n' >> file;
PARTE 2 - FORMULAÇÃO Corresponde ao índice da tarefa assinalada à máquina i
GLPK Lab for Windows
data;
set I := Maq1 Maq2 Maq3 Maq4;
set J := 1 2 3 4;
param a := Maq1 1 Maq2 1 Maq3 1 Maq4 1;
param b := 1 1 2 1 3 1 4 1;
param d : 1 2 3 4 :=
Maq1 14 5 8 7 Maq2 2 12 6 5 Maq3 7 8 3 9 Maq4 2 4 6 10;
end; PARTE 3 - FORMULAÇÃO
GLPK Lab for Windows
data;
set I := Maq1 Maq2 Maq3 Maq4;
set J := 1 2 3 4;
param a := Maq1 1 Maq2 1 Maq3 1 Maq4 1;
param b := 1 1 2 1 3 1 4 1;
param d : 1 2 3 4 :=
Maq1 14 5 8 7 Maq2 2 12 6 5 Maq3 7 8 3 9 Maq4 2 4 6 10;
end; PARTE 3 - FORMULAÇÃO
Dados do Modelo
GLPK Lab for Windows
PARTE 4 - RESULTADOS
Máquina Tarefa 1 Tempo[h]
Tarefa 2 Tempo[h]
Tarefa 3 Tempo[h]
Tarefa 4 Tempo[h]
1 14 5 8 7
2 2 12 6 5
3 7 8 3 9
4 2 4 6 10
Solução encontrada para o problema de Designação
Problema de Designação
TEMA 1:Suponha que uma empresa de consultoria deseja alocar n consultores para n projetos diferentes e que cada consultor tem interesses e afinidades para cada projeto medidos de acordo com a tabela dada abaixo. Otimizar a soma das preferências.
Problema de Designação
Cij Proj1 Proj2 Proj3 Proj4
1 2 5 8 7
2 14 12 5 6
3 7 3 8 9
4 6 10 2 4
xij
Designação Generalizada
xij
1 tarefa – 1 operário e 1 operário – 1 ou mais tarefas (cap. bi)
Designação Generalizada
M – operários N – Tarefas
xij
xij
1 tarefa – 1 operário e 1 operário – 1 ou mais tarefas (cap. bi)
Designação Generalizada
M – operários N – Tarefas
xij
bi – capacidade de recursos do operário i
xij
1 tarefa – 1 operário e 1 operário – 1 ou mais tarefas (cap. bi)
Designação Generalizada
M – operários N – Tarefas
xij
aij – recurso gasto pelo operário i para realizar a tarefa j
1 1
2 x12
x11
Restrições : todas os operários i devem ser alocados a pelo menos 1 tarefa !
a
11x
11+a
12x
12≤≤≤≤ b
1Alocação do operário 1
Designação Generalizada
Capacidade do operário 1
E
1
2
1 x21
x11
Restrição : todas as tarefas j devem ser alocadas a pelo menos 1 operário !
x
11+ x
21= 1
Alocação para a tarefa 1
Designação Generalizada
OU
Min
S.a.:
MODELO COMPLETO GERAL
m i
b x a
n
j
i ij
ij , 1, ,
1
= L
∑
≤=
n j
x
m
i
ij 1 , 1, ,
1
= L
∑
==
∑∑
= =
m
i n
j
ij ijx c
1 1
Custo total
Capacidade e recursos gastos
pelo operário i Cada tarefa j tem
1 operário
n j
m i
xij ≥ 0 , =1,L, , =1,L,
Designação Generalizada
Min
S.a.:
MODELO COMPLETO GERAL
m i
b x a
n
j
i ij
ij , 1, ,
1
= L
∑
≤=
n j
x
m
i
ij 1 , 1, ,
1
= L
∑
==
∑∑
= = mi n
j
ij ijx c
1 1
n j
m i
xij ≥ 0 , =1,L, , =1,L,
Ax
Matriz A com elementos -1, 1 e 0 é dita matriz unimodular,
mas com aij isto não acontece mais com A !!
Designação Generalizada
Min
S.a.:
MODELO COMPLETO GERAL
m i
b x a
n
j
i ij
ij , 1, ,
1
= L
∑
≤=
n j
x
m
i
ij 1 , 1, ,
1
= L
∑
==
∑∑
= =
m
i n
j
ij ijx c
1 1
n j
m i
xij ≥ 0 , =1,L, , =1,L,
USAR MÉTODOS DE PROGRAMAÇÃO
INTEIRA !!
Designação Generalizada
A Compact Consulting Company tem 2 consultores e 4 tarefas para serem realizadas. Cada consultor deve ser designado para completar uma tarefa. Os custos cij, os recursos necessários para cada consultor realizar cada tarefa aij e a capacidade de cada consultor bi são dados nas tabelas a seguir.
Formule e resolva o problema de programação linear correspondente.
Problema de Designação
xij
cij T1 T2 T3 T4
1 15 61 3 94
2 21 28 76 48
Designação Generalizada
aij T1 T2 T3 T4
1 31 69 14 87
2 23 20 71 86
bi Cap.
1 1000
2 1000
GLPK Lab for Windows
# MODELO DO PROBLEMA GERAL DE DESIGNAÇÃO
# Este problema encontra a alocação que produz menor custo total de realização das tarefas respeitando a capacidade de cada consultor e utilização de recursos.
set I; /* consultor */
set J; /* tarefa */
param b{i in I}; /* capacidade i consultores */
param d{j in J}; /* alocação das j tarefas */
param c{i in I, j in J}; /* custo de realização */
param a{i in I, j in J}; /* utilização de recursos */
#Parametros para impressao dos resultados do modelo em arquivos.
param file, symbolic, default "ResumoDesignacaoGeral.txt";
/* Alocação da máquina i para a tarefa j */
var x{i in I, j in J} binary;
/* Minimização do tempo total de processamento */
minimize cost: sum{i in I, j in J} c[i,j] * x[i,j];
/* Alocação do consultor i */
s.t. supply{i in I}: sum{j in J} a[i,j] * x[i,j] <= b[i];
/* Alocação da tarefa j */
s.t. demand{j in J}: sum{i in I} x[i,j] = d[j];
Índices das variáveis
Dados do modelo
Variáveis binárias Modelo
PARTE 1 - FORMULAÇÃO
GLPK Lab for Windows
solve;
/* RELATORIO */
printf '\n'
>> file;
printf '---\n'
>> file;
printf 'Solucao Encontrada \n'
>> file;
printf '---\n'
>> file;
printf ' \n'
>> file;
printf '---\n'
>> file;
printf " Consultor Tarefa Alocação(1-Sim/0-Não) \n"
>> file;
printf{i in I, j in J} " %8s %8d %10g\n", i, j, x[i,j]
>> file;
printf '---\n'
>> file;
printf 'Custo total (z): ' >> file;
printf ' %10.2f \n', cost >> file;
printf '---\n'>> file;
printf '\n' >> file; PARTE 2 - FORMULAÇÃO
Índice do consultor i assinalada à tarefa j
GLPK Lab for Windows
data;
set I := C1 C2;
set J := 1 2 3 4;
param b := C1 1000 C2 1000;
param d := 1 1 2 1 3 1 4 1;
param c : 1 2 3 4 :=
C1 15 61 3 94 C2 21 28 76 48;
param a : 1 2 3 4 :=
C1 31 69 14 87 C2 23 20 71 86;
end; PARTE 3 - FORMULAÇÃO
GLPK Lab for Windows
data;
set I := Maq1 Maq2 Maq3 Maq4;
set J := 1 2 3 4;
param a := Maq1 1 Maq2 1 Maq3 1 Maq4 1;
param b := 1 1 2 1 3 1 4 1;
param d : 1 2 3 4 :=
Maq1 14 5 8 7 Maq2 2 12 6 5 Maq3 7 8 3 9 Maq4 2 4 6 10;
end; PARTE 3 - FORMULAÇÃO
Dados do Modelo
GLPK Lab for Windows
PARTE 4 - RESULTADOS
TEMA 2: Considere existem 3 agentes (m = 3) para realizar 8 tarefas (n = 8). Os custos (cij), os recursos necessários para realizar a tarefa j pelo agente i (aij) e as capacidades i de cada um dos agentes (bi) são dados pelas tabelas dadas a seguir.
cij T1 T2 T3 T4 T5 T6 T7 T8
1 15 61 3 94 86 68 69 51
2 21 28 76 48 54 85 39 72
3 21 21 46 43 21 3 84 44
xij
Designação Generalizada
TEMA 2:Dados relativos à aij e bi.
aij T1 T2 T3 T4 T5 T6 T7 T8
1 31 69 14 87 51 65 35 54
2 23 20 71 86 91 57 30 74
3 20 55 39 60 83 67 35 32
xij
bi Cap.
1 100
2 100
3 100
Designação Generalizada
PROBLEMAS PROGRAMAÇÃO INTEIRA
Designação Mochila
Caixeiro
Problema da Mochila
Quais itens devem ser colocados na mochila ?
Utilidade Volume
Fornecer uma nota para cada item (subjetivo !)
Medir para cada item (objetivo, mas dá muito trabalho !)
Heurística Problema da Mochila
Para o trabalho:
Para o praia:
Criar lista:
Heurística Problema da Mochila
Utilidade(U) Volume(V) Razão U/V Item
7 7
5 6
3 4
CAP. MAX = 10 CAP. USADA =
Heurística Problema da Mochila
Utilidade(U) Volume(V) Razão U/V Item
7 7 1.0
5 6 0.83
3 4 0.75
CAP. MAX = 10 CAP. USADA = 7
Heurística Problema da Mochila
Utilidade(U) Volume(V) Razão U/V Item
7 7 1.0
5 6 0.83
3 4 0.75
MAS...
CAP. MAX = 10 CAP. USADA = 10
Itens Mochila
P1
P2
P3
P4
x1= 1
x4= 0
Variável de decisão:
Item i participa (1) ou não (0) da Mochila
Problema da Mochila
Itens Mochila
P1
P2
P3
P4
x1= 1
x4= 0
Problema da Mochila
Máximo de itens na mochila
M
Max
S.a.:
MODELO COMPLETO GERAL
∑
= n ≤i
i
ix b
v
1
∑
= ni
i ix u
1
Utilidade total
Capacidade da mochila
Problema da Mochila
n i
xi =1 ou 0 , =1,L,
Max
S.a.:
MODELO COMPLETO GERAL
Ax
Matriz A com elementos -1, 1 e 0 é dita matriz unimodular,
mas com vi isto não acontece mais com A !!
Problema da Mochila
∑
= n ≤i
i
ix b
v
1
∑
= ni
i ix u
1
Utilidade total
n i
xi =1 ou 0 , =1,L,
# MODELO DO PROBLEMA DA MOCHILA
#
# Este problema encontra a mochila com o maior utilidade,
# respeitando a capacidade da mesma.
#
/* input data */
param n, integer, >= 1; # número de itens param p, integer, >= 1; # capacidade da mochila set E:={1..n}; # conjunto de itens param u{E} >=0; # utilidade dos itens param v{E} >=0; # volume dos itens
#Parametros para impressao dos resultados do modelo em arquivos.
param file, symbolic, default "ResumoMochila.txt";
/* Variável */
var x{E} binary;
/* Função Objetivo */
maximize TotalUtility: sum{i in E} u[i]*x[i];
/* Capacidade da Mochila */
s.t. capacity: sum{i inE} v[i]*x[i] <= p;
solve;
GLPK Lab for Windows
PARTE 1 - FORMULAÇÃO
# MODELO DO PROBLEMA DA MOCHILA
#
# Este problema encontra a mochila com o maior utilidade,
# respeitando a capacidade da mesma.
#
/* input data */
param n, integer, >= 1; # número de itens param p, integer, >= 1; # capacidade da mochila set E:={1..n}; # conjunto de itens param u{E} >=0; # utilidade dos itens param v{E} >=0; # volume dos itens
#Parametros para impressao dos resultados do modelo em arquivos.
param file, symbolic, default "ResumoMochila.txt";
/* Variável */
var x{E} binary;
/* Função Objetivo */
maximize TotalUtility: sum{i in E} u[i]*x[i];
/* Capacidade da Mochila */
s.t. capacity: sum{i inE} v[i]*x[i] <= p;
solve;
GLPK Lab for Windows
PARTE 1 - FORMULAÇÃO Dados do modelo
Variáveis Binárias Modelo
GLPK Lab for Windows
/* RELATORIO */
printf '\n'
>> file;
printf '---\n'
>> file;
printf 'Solucao Encontrada \n'
>> file;
printf '---\n'
>> file;
printf ' \n'
>> file;
printf '---\n'
>> file;
printf " Item Alocação (1-Sim/0-Não) \n"
>> file;
printf{i in E} " %8s %8d \n", i, x[i]
>> file;
printf '---\n'
>> file;
printf 'Utilidade total (z): ' >> file;
printf ' %10.2f \n', TotalUtility >> file;
printf '---\n' >> file;
printf '\n' >> file; PARTE 2 - FORMULAÇÃO
Indica qual item foi alocado ou não na mochila !
GLPK Lab for Windows
/* Data section */
data;
param n:=3;
param p:=10;
param u:=[1] 7 [2] 5 [3] 3;
param v:= 1 7 2 6 3 4;
end;
PARTE 3 - FORMULAÇÃO
GLPK Lab for Windows
/* Data section */
data;
param n:=3;
param p:=10;
param u:=[1] 7 [2] 5 [3] 3;
param v:= 1 7 2 6 3 4;
end;
PARTE 3 - FORMULAÇÃO Dados do Modelo
GLPK Lab for Windows
PARTE 4 - RESULTADOS
TEMA 3: Considere que existem 8 itens para armazenar em uma mochila com uma capacidade de 100. Elaborar um programa para resolver o problema com os dados abaixo.
1 2 3 4 5 6 7 8
u 41 33 14 25 32 32 9 19
v 47 40 17 27 34 23 5 44
xi
Problema da Mochila
Gestão de um Portfólio de Projetos
A mesma formulação do problema da
mochila pode ser utilizada para determinar a composição de um portfólio de projetos:
Gestão de um Portfólio de Projetos
Projetos Portfólio
P1
P2
P3
P4
x1= 1
x4= 0
Variável de decisão:
Projeto i participa (1) ou não (0) do Portifólio
Gestão de um Portfólio de Projetos
Projetos Portfólio
P1
P2
P3
P4
Máximo de projetos do portfólio.
x1= 1
M
x4= 0