2. Objetivos
• Apresentar o problema da mochila e suas
variantes.
• Mostrar alternativas de solução para a variante
0-1.
• Mostrar o funcionamento de um código MPI
para o problema.
• Abordagem utilizando CUDA.
3. Aplicação
• Logística
• Criptografia
• Engenharia Naval
• Gerenciamento de Projetos
• Finanças
• Entre outras
4. • Suponha que um gerente de uma empresa possua no
seu orçamento c reais para investir em projetos
dentro do seu departamento. Após uma pesquisa
realizada por sua equipe, o gerente recebe um
relatório com n diferentes projetos que trariam
reduções de custo ou aumento de produtividade ao
departamento como um todo. Associado a cada
projeto j existe um retorno de pj reais e um custo
para sua realização de cj reais. O gerente pode
encontrar uma distribuição ótima de seu orçamento
resolvendo um problema da mochila binária
5. Variações
• Problema da Mochila Limitada
• Problema da Mochila Ilimitada (UKP)
• Problema da Soma de Subconjuntos
• Problema da Mochila 0-1
6. • Problema da Mochila Limitada
Dados um conjunto N de n objetos com valores positivos pj, pesos wj, cada um tendo
bj cópias, e uma mochila de capacidade inteira e positiva c, determine um vetor (x1,
x2, ..., xn), 0 ≤ xj ≤ bj ∈N, que satisfaça as condições:
7. • Problema da Mochila Ilimitada
Dados um conjunto N de n objetos com valores positivos pj, pesos wj, e uma mochila
de capacidade inteira e positiva c, determine um vetor (x1, x2, ..., xn), xj ∈N, que
satisfaça as condições:
Este problema é uma generalização do Problema da Mochila Limitada no qual bj = ∞, ∀j ∈ N
8. • Problema da Soma de Sub-conjuntos
Dados um conjunto N de n objetos com pesos wj , e uma mochila de capacidade
inteira e positiva c, determine um vetor (x1 ,x2 , ..., xn),xj ∈{0, 1}, que satisfaça as
condições:
Este problema é um caso particular do 0-1KP em que wj = pj, ∀j ∈ N.
9. • Problema da Mochila 0-1:
▫ Dados um conjunto N de n objetos com valores
positivos pj, pesos wj e uma mochila de capacidade
inteira e positiva c, determine um vetor (x1, x2, ..., xn
que encontre:
𝑛
𝑚𝑎𝑥 𝑝 𝑗 𝑥𝑗
𝑗=1
𝑛
Respeitando as condições 𝑗=1 𝑤𝑗 𝑥 𝑗 ≤ 𝑐
e 𝑥 𝑗 ∈ 0, 1 , 𝑗 = 1, … , 𝑛
10. Pesquisas em busca de soluções
Problema
da
Mochila
Aproximação Heurística
Estudos
Soluções
Exatas
Branch
and Programação Algoritmos
Bound Dinâmica Genéticos
11. Problema da Mochila
• Dados:
▫ uma mochila de compartimento único e com uma
capacidade máxima.
▫ conjunto de itens, cada qual com um peso e um
valor associados.
• Quais itens podem ser carregados na mochila
sem exceder sua capacidade e maximizando o
valor a ser carregado?
12. • Dois tipos:
▫ Mochila 0-1: itens indivisíveis. Resolvido com
programação dinâmica.
▫ Mochila fracionária: itens podem ser divididos.
Resolvido com uma estratégia gulosa.
13. Programação Dinâmica
• Utilizada quando o problema pode ser definido
recursivamente em termos de soluções para
subproblemas menores (subestrutura ótima).
• Deve-se encontrar e armazenar soluções para os
subproblemas e, então, utilizá-las na solução de
problemas maiores.
• Mais eficiente do que soluções que utilizam
estratégias de força-bruta.
14. • Ideias básicas:
▫ Subestrutura ótima: a solução ótima para o
problema é construída a partir de soluções ótimas
para os subproblemas.
▫ Subproblemas “overlapping”: poucos
subproblemas com muitas instâncias recorrentes
de cada.
▫ Construção de uma tabela com as “subsoluções”
usada para solucionar os problemas maiores.
15. Problema da Mochila 0-1
• Também conhecido como problema da mochila
booleana.
• Dado um valor inteiro W e os conjuntos:
▫ S = {1, 2, 3, ..., n}
▫ W = {w1, w2, w3, ..., wn}
▫ V = {v1, v2, v3, ..., vn}
• onde W é a capacidade da mochila, S é um conjunto
de objetos, W é o conjunto dos pesos de tais objetos e
V é o conjunto de seus valores. Devemos encontrar
quais os itens de S devem ser colocados na mochila
visando maximizar o valor carregado, sem exceder a
capacidade da mochila.
16. • Problema NP-completo.
• Pode ser resolvido em O(nW) => solução
pseudo-polinomial.
• Alternativas para solução exata:
▫ Força-bruta.
▫ Programação dinâmica (DP): melhor
comportamento quando os parâmetros são
correlacionados.
▫ Branch-and-bound (B&B): mais eficiente quando
os valores de w e v são indepentemente gerados.
17. Algoritmo Força-Bruta
• Forma direta e ingênua para resolver o
problema.
• Todas as combinações possíveis de itens são
geradas. A combinação com o maior valor e que
caiba na mochila será a solução ótima.
• Com n itens => 2n possíveis combinações.
• Complexidade: 0(2n)
Algoritmo exponencial.
Muito caro!!!!
18. Tentando definir um subproblema
• Podemos considerar um subproblema definido
como:
▫ Sk = conjunto de itens numerados de 1 a k, onde
1<=k<=n.
• É possível encontrar a solução final Sn em
termos dos subproblemas Sk?
A resposta é não....
19. Objeto 1 2 3 4 5
Peso 2 3 4 5 9
Valor 3 4 5 8 10
S4 = {1, 2, 3, 4} => Peso total: 14 e Valor: 20
S5 = {1, 3, 4, 5} => Peso total: 20 e Valor: 26
S4 não faz parte da solução
de S5
20. Fórmula Recursiva com Subproblemas
• Devemos considerar outro parâmetro: o peso de
cada conjunto de subitens.
• O subproblema consiste em computar f(r, c):
{
▫ f(r, c) = f(r-1, c), se wr > W
f(r, c) = max{f(r-1, c), f(r-1, c-wr) + vr}
• A melhor solução Sr com peso c é:
▫ a melhor solução Sr-1 com peso c, ou
▫ a melhor solução Sr-1 com peso c-wr mais o valor
do item r
21. Algoritmo de Gilmore e Gomory
• Primeiro algoritmo a usar DP para resolver o
problema da mochila 0-1.
• Seja f(r, c) a solução ótima considerando o
conjunto de objetos [1, r] e o peso c., com
1<=r<=n e 0<=c<=W. A solução ótima para o
problema será f(n, W).
• A relação de recorrência para solução:
▫ f(r, c) = max{f(r-1, c), f(r-1, c-wr) + vr}
• Tempo: O(nW)
22. para c de 0 ate W faca
F[0,w] = 0
fimpara
para r de 1 ate n faca
F[i,0] = 0
fimpara
para r de 1 ate n faca
para c de 0 ate W faca
se (wi <= W) entao// item i can be part of the solution
se (F[r-1,c-wi] + vr > F[r-1,c]) entao
F[r,c] = F[r-1,c-wi] + vr
senao
F[r,c] = F[r-1,c]
fimse
else
F[r,c] = F[r-1,c] // wi > W
fimse
fimpara
fimpara
23. Exemplo
• Sejam uma mochila de capacidade 10 e 5 objetos
com seus pesos e valores representados na
seguinte tabela:
Objeto 1 2 3 4 5
Peso 8 3 6 4 2
Valor 100 60 70 15 15
48. Algoritmo Wavefront
• Algoritmo paralelo utilizando programação
dinâmica.
• Segue o modelo de programação BSP/CGM.
• Considerando n itens, capacidade W e p
processadores:
▫ O(p) rodadas de comunicação
▫ O(W n/p) de computação
• O vetor de pesos é replicado para todos os
processadores.
• O vetor v é dividido em p partes.
49. Figura 11 – Divisão da matriz em faixas para cada processador.
50. • Comunicação wavefront ou sistólica.
• Cada processador se comunica com, no máximo,
dois processadores.
• Problema: Processador Pi precisa de informação
do processador Pi-1 para calcular sua primeira
coluna.
• Solução: Particionar as submatrizes dos
processadores em blocos.
51. Figura 12 – Particionamento em blocos de m/p linhas.
• Problema: Baixo nível de paralelismo.
55. Referências
• Cáceres, E.N.; Nishibe, C. 0-1 Knapsack
Problem: BSP/CGM Algorithm and
Implementation. Proc of the 17th IASTED
International Conference on Parallel and
Distributed Computing and Systems (PDCS
2005), pp. 331-335, 2005.
• http://www.cse.unl.edu/~goddard/Courses/CS
CE310J