Você está na página 1de 14

UNIVERSIDADE PRESBITERIANA MACKENZIE

CAMILLA FINCATTI






PROBLEMA DA MOCHILA









So Paulo
2010


CAMILLA FINCATTI








PROBLEMA DA MOCHILA






Trabalho Acadmico
apresentado no Curso de Matemtica-
Fsica, do Centro de Cincias e
Humanidades de Universidade
Presbiteriana Mackenzie, como requisito
parcial da disciplina de Tpicos de
Programao Matemtica ministrada
pela Prof
a
. Angela Hum.



So Paulo
2010


SUMRIO

1 INTRODUO ............................................................................................... 4
2 ENUNCIADO E TIPOS DO PROBLEMA ....................................................... 6
3 DEFINIO MATEMTICA ........................................................................... 7
4 ALGORITMOS ............................................................................................... 8
4.1 SOLUO USANDO BACKTRACKING ......................................................... 8
4.2 SOLUO USANDO O MTODO GULOSO ................................................. 8
4.3 SOLUO USANDO PROGRAMAO DINMICA ...................................... 9
5 EXEMPLO MATEMTICO ........................................................................... 10
6 EXEMPLO PRTICO C++ ........................................................................... 12
7 CONSIDERAES FINAIS ......................................................................... 13

4
1 INTRODUO
O problema da mochila (Knapsack problem, em ingls) constitui uma
classe de problemas dos mais estudados em otimizao combinatria e em
subproblemas de outros problemas prticos. um dos 21 problemas NP-completos
1

de Richard Karp
2
, descritas no seu artigo de 1972.
O nome surgiu devido o modelo de uma situao em que necessrio
carregar uma mochila com capacidade limitada, com um conjunto objetos de pesos
e valores diferentes. O objetivo ocupar a mochila com o maior valor possvel, no
ultrapassando o seu peso mximo. Definir o subconjunto de objetos cujo peso no
ultrapasse o limite da mochila e ao mesmo tempo maximizando o seu valor total,
corresponde a resolver o problema da mochila.
Muitos problemas reais podem ser formulados com o problema da
mochila ou uma variao deste.
As aplicaes mais conhecidas so os problemas de investimento de
capital, corte e empacotamento, carregamento de veculos, controle oramental e de
subproblemas como por exemplo, planejamento de produo, desenvolvimento de
circuitos eletrnicos, entre outros.
Por ser um problema combinatrio, pode ser resolvido por enumerao
exaustiva, ou seja, tentando todas as solues possveis, e posteriormente
comparando-as para obter a melhor soluo. Porm, a determinao exaustiva
destas solues completamente invivel, mesmo em pequenas dimenses. Por
exemplo, um problema com apenas 20 itens pode possuir aproximadamente
1.048.576 solues.
A Programao Dinmica (ou funo recursiva) de Bellman foi a
primeira tcnica mas eficiente para resoluo do problema, na dcada de 50. Logo,
foram propostos inmeros melhoramentos: definio do limite superior para o valor

1
Na teoria da complexidade computacional, a classe de complexidade NP-completo
o subconjunto dos problemas de deciso em NP de tal modo que todo problema em NP se pode
reduzir, com uma reduo de tempo polinomial, a um dos problemas NP-completo.
2
Richard Manning Karp, um informtico estadunidense que publicou diversos
trabalhos fundamentais sobre a complexidade computacional.
5
timo da funo objetivo, por Dantzig em 1957; a resoluo do problema pela
tcnica de partio e refinamento sucessivos, por Kolesar em 1967; a resoluo de
problemas de grandes dimenses, pela tcnica de partio e refinamento, por
Harowit e Sahni na dcada de 70; atravs da fixao do valor de algumas variveis
para reduo da dimenso do problema, por Martello e Toth em 1977; o algoritmo
baseado na ordenao de apenas um subconjunto de itens, por Balas e Zemel em
1980; um novo algoritmo que resolve instncias complexas, iniciado por Pissinger
em 1995 e concludo por Martello e Toth em 1998. O problema foi base para o
primeiro algoritmo de criptografia assimtrica (chave pblica).
Todos esses estudos foram dedicados apenas a resoluo do
problema mono-restrio, porm, os problemas reais exigem vrias restries. Um
exemplo de aplicao do problema da mochila multi-restries (ou multi-objetivo)
seria uma seleo de pessoal, ou seja, a escolha de candidatos que possam melhor
atender os objetivos estratgicos de uma empresa. Nesses problemas multi-
restries no h uma soluo que otimize simultaneamente todos as restries.
Existem algumas solues admissveis em que a melhoria do valor de uma das
restries prejudica o valor de outras, ou seja, as restries entram em conflito.
Uma das caractersticas destes problemas o aumento do nmero de
solues existentes o que dificulta sua resoluo.
Existem diversos mtodos para anlise desse tipo de problema que
sero detalhados a seguir. Estes mtodos podem ser classificados como exatos ou
aproximados.


6
2 ENUNCIADO E TIPOS DO PROBLEMA
O problema da mochila pode ser enunciado conforme os exemplos:
Um viajante deve levar consigo, apenas uma mochila. Essa
mochila possui uma capacidade limitada e deve ser carregada
apenas com objetos que sero teis durante a viagem. Cada
objeto nico e possui um peso e um determinado valor. Que
objetos dever ser levados pelo viajante de forma a maximizar o
valor da mochila?
Um continer com capacidade limitada deve ser carregado com
diversos produtos de pesos e tamanhos diferentes. Como deve-
se proceder para carregar o mximo possvel de produtos,
desperdiando o mnimo possvel de espao.
Um computador est sobrecarregado de arquivos e os mesmos
devem ser transferidos para mdias em CD, e sabe-se que ser
necessrio mais de um CD. Como deve-se proceder para
carregar o mximo possvel de arquivos em cada CD,
desperdiando o mnimo possvel de espao em cada mdia.
Existem diferentes tipos de problemas da mochila que ocorrem
dependendo da distribuio de itens e mochilas.
Problema da mochila 0/1: cada item pode ser escolhido no
mximo 1 vez;
Problema da mochila limitado: h uma quantidade limitada para
cada tipo de item;
Problema da mochila com mltipla escolha: os itens devem ser
escolhidos de classes disjuntas;
Problema da mochila mltiplo: vrias mochilas so preenchidas
simultaneamente
Problema da mochila com multi-restries: problema de
programao inteira geral com coeficientes positivos.


7
3 DEFINIO MATEMTICA
Os dados do problema da mochila, podem ser expressos em termos
matemticos. Os objetos so contados pelo ndice variando de 1 a . Cada item
tem um peso

e um valor

. A capacidade da mochila denotada por .


A formulao mais comum do problema o problema simples da
mochila (problema da mochila 0/1), que restringe o nmero (objeto)

como zero ou
um.
Seja

o peso do -simo objeto e

seu valor, se o objeto

aparece
na mochila, ento

= 1 caso contrrio

= 0.
Assim, o problema da mochila pode ser formulado algebricamente da
seguinte maneira:
: =


Onde chamada de funo objetivo.
:

{0,1}


Isso quer dizer que a soma dos pesos dos objetos selecionados no
exceda a capacidade da mochila.


8
4 ALGORITMOS
O problema da mochila pode ser solucionado atravs dos seguintes
algoritmos:
4.1 SOLUO USANDO BACKTRACKING
Backtracking um algoritmo refinado da busca por enumerao
exaustiva (fora bruta), onde boa parte das solues so eliminadas sem serem
explicitamente analisadas. Se aplica em problemas cuja soluo pode ser definida
atravs de uma sequncia de decises, que pode ser modelada por uma rvore
que representa todas as possveis sequncias de deciso.

Figura 1 rvore de pesquisa binria
Caso exista mais de uma disponvel para cada uma das decises, a
busca exaustiva da rvore exponencial. A eficincia dessa soluo depende da
possibilidade de limitar a busca eliminando os ramos que no levam a soluo
desejada.
4.2 SOLUO USANDO O MTODO GULOSO
O mtodo guloso um algoritmo de menor complexidade e que pode
ser aplicado a uma grande variedade de problemas, que na maioria possuem
entradas e necessrio obter um subconjunto que satisfaa alguma restrio.
Qualquer subconjunto que satisfaa esta restrio chamado de soluo vivel. A
soluo vivel deve maximizar ou minimizar uma dada funo objetivo (chamada de
soluo tima). O mtodo guloso trabalha em estgios, considerando uma entrada
por vez. Em cada estgio tomada uma deciso considerando se uma entrada
9
particular uma soluo tima. Isso ocorre considerando as entradas em uma
ordem determinada por um processo de seleo, que baseada numa medida de
otimizao que pode ou no ser a funo objetivo. Frequentemente essas medidas
de otimizao resultaro em algoritmos que geraro solues sub-timas.
4.3 SOLUO USANDO PROGRAMAO DINMICA
um mtodo aprimorado de utilizar recursividade que ao invs de
executar uma funo diversas vezes, na primeira chamada da funo o resultado
armazenado e nas demais chamadas, o retorno ser o resultado e no uma
requisio ser resolvida, ou seja, armazenando os resultados anteriores, elimina-
se a repetio de contas, tornando assim o mtodo mais eficiente. Nesse mtodo,
uma soluo tima definida por uma sequncia de decises timas locais. Na
programao dinmica possvel avaliar todas as solues, garantindo um
resultado exato.









10
5 EXEMPLO MATEMTICO
Oramento de capital com variveis inteiras: VVC, empresa de capital
empreendedor est avaliando oportunidades de investimento para os prximos trs
anos. A empresa tem um oramento de $200 milhes para este ano, $250 milhes
para o ano que vem e mais $150 milhes para o outro ano, e est interessada e
definir onde os investimentos devem ser realizados.
Vamos considerar que a VVC esteja interessada em adquirir ou no
participaes que so definidas pela tabela abaixo. A empresa est interessada em
maximizar o valor presente lquido (VPL) de seus investimentos.

OPORTUNIDADES DE INVESTIMENTO PARA A VVC
Investimento
Investimento
VPL Investimento Ano 0 Ano 1 Ano2
A 12 34 12 20
B 54 94 67 15
C 65 28 49 34
D 38 0 8 17
E 52 21 42 56
F 98 73 25 76
G 15 48 53 29
TOTAL 334 298 256 247

Em essncia, o que a VVC quer saber se ela deve investir em uma
determinada oportunidade de investimento ou no. Chamaremos

= , , , , , , de realizao do investimento . Mais especificamente,


=
1
0
= , , , , , , .
Por exemplo, se

= 1, o investimento realizado, ao passo que, se

= 1, o investimento no realizado.
As restries devem garantir que para cada ano o investimento total
no exceda o oramento do ano. Exemplo:
Para o ano 0:
12

+ 54

+ 65

+ 38

+ 52

+ 98

+ 15

200

11
Para os outros anos:
34

+ 94

+ 28

+ 0

+21

+73

+ 48

250
12

+ 67

+ 49

+ 8

+42

+25

+ 53

150

A funo-objetivo estabelece que VPL dos investimentos deve ser
mximo.
: = 20

+ 15

+ 34

+ 17

+ 56

+ 76

+ 29


A formulao completa pode ser definida como:
: = 20

+ 15

+ 34

+ 17

+ 56

+ 76

+ 29

: 12

+ 54

+ 65

+ 38

+ 52

+ 98

+ 15

200
34

+ 94

+ 28

+ 0

+ 21

+ 73

+ 48

250
12

+ 67

+ 49

+ 8

+ 42

+ 25

+ 53

150

{0,1} = , , , , , , .




12
6 EXEMPLO PRTICO C++
// Recebe como parametros o numero de objetos n,
// o array de objetos com seus respectivos pesos e valores,
// e a capacidade W da mochila
double mochilaFracNlogN(int n, Object * obj, int W){
double weight = 0.0; // Peso armazenado na mochila
double total = 0.0; // Valor total armazenado na mochila
int i;

// Ordena os objetos com relacao a razao entre valor/peso
// Complexidade O(n*log(n))
qsort(obj, n, sizeof(Object), ratioCmp);

// Coloca o maior numero de objetos de forma completa na mochila,
// em ordem de razao valor/peso => Complexidade O(n)
for(i=0; i<n; i++){
// Case nao seja possivel colocar o objeto atual na mochila,
// entao sai do laco
if(obj[i].weight + weight > W) break;

obj[i].frac = 1.0; // Coloca todo o objeto i na mochila
total += obj[i].value; // Atualiza o valor total na mochila
weight += obj[i].weight; // Atualiza o peso total na mochila
}

// Se nem todos os objetos couberam na mochila,
// coloca apenas uma fracao do melhor objeto, em termos de valor/peso,
//ainda nao considerado
if(i < n){
// Coloca apenas a fracao possivel do objeto i na mochila
obj[i].frac = (W - weight)/(double)obj[i].weight;
// Atualiza o valor total da mochila
total += ((double) obj[i].value) * obj[i].frac;
}

// retorna o valor total armazenado na mochila
return total;
}



13
7 CONSIDERAES FINAIS
Alguns mtodos podem ser construdos visando resoluo de
problemas exponenciais, entretanto podem no obter uma soluo exata, mas sim
uma soluo aproximada. Este trabalho apresentou trs algoritmos para resoluo
do problema da mochila. O primeiro algoritmo atravs de fora bruta (enumerao
exaustiva), o segundo atravs do mtodo guloso, que um algoritmo de
aproximao, e o terceiro atravs do mtodo de programao dinmica.
Existem muitos problemas derivados do problema da mochila, o que
faz com que o seu conhecimento se torne uma poderosa ferramenta na busca de
solues destes.
Conclu-se que existe uma variedade de aplicaes do problema em
diversas reas do conhecimento, demonstrando que pode-se adaptar o problema da
mochila conforme as diferentes necessidades.

14
REFERNCIAS BIBLIOGRFICAS

COLIN, Emerson C. Pesquisa Operacional. 1. ed. Rio de Janeiro: LTC, 2007.

Problme du sac dos. Disponvel em: < http://fr.wikipedia.org/wiki/_
Problme_du_sac__dos >. Acesso em: 16 maio 2010.

PAA 2007.1 - Projeto 1 - Mochila Fracionria. Disponvel em:
<http://danielamaral.wikidot.com/paa-2007-1-projeto-1-mochila-fracionaria>. Acesso
em: 16 maio 2010.

UNIVERSIDADE DE SO PAULO. Instituto de Matemtica e Estatstica. So Paulo.
Disponvel em: < http://www.ime.usp.br/~regis/Publications/wscad2002.pdf >. Acesso
em: 17 maio 2010.

Knapsack problems - Por Hans Kellerer,Ulrich Pferschy,David Pisinger. Disponvel
em: <http://books.google.com.br/>. Acesso em: 17 maio 2010.

Você também pode gostar