Problema Da Mochila
March 23, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Problema Da Mochila...
Description
Problema da Mochila An´ alise alise de Algoritmos Ygor de Mello Canalli Nova Igua¸cu, cu, 4 de Setembro de 2013 Resumo
Este relat´ orio orio ´e produto de um trabalho trabalho da disciplina disciplina de An´alise alise de Algoritmos, do curso de Ciˆ C iˆ encia encia da Computa¸ C omputa¸c˜ c˜ ao da Universidade Federal ao Rural Rural do Rio de Janeir Janeiro, o, Departa Departamen mento to de Tecn ecnolo ologias gias e Lingua Linguagen gens. s. Faremos uma breve an´alise alise do problema da mochila bin´aria aria e fracion´aria. aria.
1
Introdu oducao c ¸ao
Ser´ a feita uma breve an´alise alise dos duas vers˜oes oes do problema da mochila: bin´aria aria e fracion´aria. aria. Veremos, que apesar de serem muito semelhantes, as solu¸c˜ c˜oes oes s˜aaoo muito muito diferente diferentes. s. Para Para a vers˜ vers˜ ao ao bin´ aria, aria, atacaremos atacarem os atrav´es es de uma t´ecnica ecnica de programa¸c˜ c˜ao ao din´ amica, amica, para a vers˜ao ao fracion´aria, aria, algoritmos gulosos.
2
Problema Problema da mochila mochila bin´ aria aria
O problema da mochila booleana, ou simplesmente problema da mochila (do inglˆes es knapstack problem ) ´e um problema de otimiza¸c˜ cao a˜o linear inteira cujo ob jetivo ´e decidir quais objetos colocar numa mochila com capacidade limitada, onde cada objeto possui seu respectivo peso e valor associados, maximizando o valor dos objetos escolhidos sem ultrapassar a capacidade da mochila. Este ´e um problema naturalmente intrat´ avel, avel, e portanto n˜ao a o h´ a conhecimento mento de um algoritmo que o resolv resolva de maneira maneira eficiente. eficiente. Atacarem Atacaremos os o problema blem a atrav´ atr av´es es da t´ecnica ecni ca de programa prog rama¸¸c˜ c˜ao ao dinˆamica. amica.
2.1 2.1
Formal ormaliza iza¸ c˜ c ¸ao a ˜o
Seja p = ( p1 , p2 , . . . , pn ) o vetor dos pesos de n objetos, e v = (v1 , v2 , . . . , vn ) seus respectivos valores . Seja Seja x = (x1 , x2 , . . . , xn ) um vetor de inteiros onde xi ∈ [0, [0, 1], com 1 ≤ i ≤ n, ´e 1 caso o objeto obj eto i ser´ a colocado na mochila e 0 caso contr´ario. ario. Seja c ∈ N a capacidade da mochila. Objetivo: Determinar o vetor x que maximize n
x · v = x1 v1 + x2 v2 + · · · + xn vn
x v =
i i
i=1
1
Sujeito a:
x · p ≤ c Chamamos mochila vi´ ˜o que atenda a` restri¸c˜ao acima. avel uma solu¸ca
2.2
Programa¸ c˜ ao dinˆ amica
Podemos resolver o problema atrav´es da t´ecnica de programa¸c˜ao dinˆ amica. A id´eia ´e guardar uma tabela as solu¸c˜oes da sub-instˆ ancias dos problema, isto ´e, na k-´esima linha resolveremos de maneira ´otima a mochila de peso 0 ≤ k ≤ n. Se o i-´esimo elemento estiver na solu¸ca˜o ´otima o valor desta solu¸c˜ao ser´a vi mais o valor da melhor solu¸c˜ao para o problema da mochila com capacidade c− pi , considerando apenas os i −1 primeiros itens. Caso contr´ario (i.e., o i-´esimo elemento n˜ao est´a na solu¸c˜ao), o valor da solu¸c˜ao ser´a o mesmo da instˆancia do problema com capacidade c tomando apenas os i − 1 primeiros objetos. Seja t a tabela das solu¸co˜es do problema da mochila, onde t(i, k) ´e a solu¸c˜ao do problema da mochila referente aos i primeiros objetos com capacidade k. Portanto, vale a seguinte recorrˆencia:
0, t(i, k) = t(imax−{1,t(ik),− 1, k), t(i − 1, k − p ) + v }, i
i
se i = 0 ou k = 0 se pi > k se pi ≤ k
Como o c´alculo de t(i, k) depende de t(i − 1, k) e t(i − 1, k − pi ), preenchemos a tabela linha a linha, sem que sejam feitas chamadas repetidas, acessando os valores obtidos em itera¸c˜oes anteriores: 0 0
.. . i−1
0 .. .
.. .
0 0 .. .
n
0
i
··· ···
k − pi
0
··· ···
··· ··· ··· ···
k
0
··· ···
c
0
··· ···
Preenchendo a tabela desta forma, temos o algoritmo abaixo, que realiza Θ(nc) opera¸co˜es aritim´eticas, visto que este sempre acessa todas as c´elulas da tabela.
2
aria Algoritmo 1 Problema da mochila bin´ Entrada: Vetor de valores v = (v1 , . . . , v n ). Vetor de pesos p = ( p1 , . . . , pn ).
Capacidade da mochila c. Quantidade de objetos n c˜ao ´otima do problema Sa´ ıda: Solu¸ ´ ria(v,p,c,n) c˜ ao Mochila-Bina 1: fun¸ para k = 0 at´e c fa¸ ca 2: t(0, k) = 0 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
fim para e n fa¸ para i = 1 at´ ca
t(i, 0) = 0 fim para e n fa¸ para i = 1 at´ ca e c fa¸ para k = 1 at´ ca se ( pi > k) ent˜ ao
t(i, k) = t(i − 1, k) sen˜ ao
t(i, k) = max{t(i − 1, k), t(i − 1, k − pi ) + vi } fim se fim para fim para retorne t(i, c) fim fun¸ c˜ ao
Para determinar o vetor x correspondente `a solu¸c˜ao gerada pelo algoritmo de programa¸ca˜o dinˆ amica, basta varrermos a ´ultima coluna, correspondente a solu¸c˜ao do problema original da mochila com capacidade c considerando os i primeiros objetos, at´e i = n. O algoritmo atualiza a solu¸ca˜o apenas quando encontra uma melhor, produzindo um solu¸ca˜o ´otima. Desta forma, caso haja mudan¸ca de uma linha para a outra significa que o objeto corrente faz parte da solu¸c˜ao ´otima, ou seja, xi =
0, 1,
se t(i, c) = t(i − 1, c) . se t(i, c) = t(i − 1, c)
A complexidade do Algoritmo 1 ´e aparentemente polinomial. Entretanto, precisamos analisar com mais cuidado a quest˜ao do tamanho da entrada. Considerando que c possui uma representa¸ca˜o bin´ aria de β = log2 c bits, e portanto c ´e da ordem de 2β . Neste caso, o tamanho de entrada apropriado a ser considerado ´e o comprimento de c, isto ´e β . Portanto, devemos considerar o Algoritmo 1 um algoritmo pseudo polinomial , devido ao seu comportamento exponencial, de tempo Θ(n · 2β ).
3
Problema da mochila fracion´ aria
O problema da mochila fracion´ario, conhecido em inglˆes como fracional knapsao linear cujo objetivo ´e colocar fra¸c˜oes tack problem , ´e um problema de otimiza¸c˜ de n objetos distintos, cada um com um peso e valor associado, numa mochila com capacidade limitada, de forma a maximizar o valor do conte´udo da mochila.
3
Este problema, diferentemente de sua vers˜ao bin´ aria, pode ser resolvido de maneira eficiente atrav´es de um algoritmo guloso.
3.1
Formaliza¸ ca ˜o
Seja p = ( p1 , p2 , . . . , pn ) o vetor dos pesos de n objetos, e v = (v1 , v2 , . . . , vn ) seus respectivos valores . Seja x = (x1 , x2 , . . . , xn ) um vetor de racionais onde 0 ≤ xi ≤ 1, com 1 ≤ i ≤ n, ´e a fra¸ca˜o o objeto i ser´ a colocado na mochila. Seja c ∈ N a capacidade da mochila. Objetivo: Determinar o vetor x que maximize n
x · v = x1 v1 + x2 v2 + · · · + xn vn
x v =
i i
i=1
Sujeito a:
x · p ≤ c Chamamos mochila vi´ ˜o que atenda a` restri¸c˜ao acima. avel uma solu¸ca
3.2
Algoritmos guloso
O algoritmo guloso abaixo considera que os objetos est˜ao em ordem decrescente de valor espec´ıfico, isto ´e, pi+1 pi ≤ , para todo 1 ≤ i < n. vi+1 vi Tal algoritmo produz uma solu¸ca˜o ´otima para o problema da mochila fracion´ aria. Algoritmo 2 Problema da mochila fracion´aria Entrada: Quantidade n de elementos. Vetor p dos pesos. Vetor v dos valores.
Capacidade c da mochila ˜o ´otima. Sa´ ıda: Vetor x com solu¸ca 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
fun¸ c˜ ao Mochila-Fracionaria( p, v, n, c) para i = 1 at´ e n fa¸ ca se pi ≤ c ent˜ ao
xi = 1 c = c − pi sen˜ ao
xi = c/pi c =0 fim se fim para retorne x fim fun¸ c˜ ao
O algoritmo ´e guloso pois a cada itera¸c˜ao inclui-se na mochila o m´aximo suportado do objeto com o maior valor espec´ıfico ainda n˜ ao selecionado. Tal 4
algoritmo sempre produz uma solu¸ca˜o ´otima, visto que o problema exibe uma subestrutura o´tima, isto ´e, se uma solu¸c˜ao (x1 , . . . , xn ) ´e o´tima, ent˜ ao a instˆancia de n − 1 objetos possui solu¸ca˜o ´otima (x1 , . . . , xn−1 ) para a capacidade c − xn pn .
Referˆ encias Bibliogr´ aficas [1] Cormen, T. H., Leiserson, C. E., Rivest, R. L., Stein, C., Introduction to Algorithms , Third Edition, MIT Press, 2009. [2] Paulo Feofiloff, Notas de Aula de An´ alise de Algoritmos , Departamento de Ciˆencia da Computa¸c˜ ao do Instituto de Matem´atica e Estat´ıstica da USP, Dispon´ıvel em: . Acessado em 29 de agosto de 2013. ˆ ndida Nunes da Silva e Orlando [3] Cid Carvalho de Souza, Ca Lee, MO417 — Complexidade de Algoritmos I , Unicamp, Dispon´ıvel em: . Acessado em 2 de setembro de 2013.
5
View more...
Comments