Page 1

Andrea Bologni,Antonino Passarelli

Knapsak Problem  FPTAS Il problema dello zaino anche detto “Knapsak Problem” (1) è un tipo di problema classificato come NP-hard. E’ possibile determinare per esso un algoritmo pseudo-polinomiale grazie alla tecnica di Programmazione Dinamica ( 2 ) . La finalità del nostro studio è dimostrare che partendo dal problema dello zaino (NP-hard) possiamo descrivere uno schema di approssimazione pienamente polinomiale (FPTAS) per tale problema. Ridurremo dapprima il problema dello zaino ad un sottoproblema P I , e osserveremo che tale sottoproblema P I è risolvibile con un algoritmo pseudopolinomiale di programmazione dinamica. Successivamente renderemo l’algoritmo che risolve P I ,utile alla risoluzione anche del problema dello zaino e costruiremo un algoritmo (FPTAS) per il problema dello zaino. Problema dello Zaino: Istanza: x = (U,B,C,P); U = {u1,u2…..un} B  N; C : UN; P : UN ; Soluzione : S  Sol(x) se S  U, Misura : ( max

 P(u) )

 C (u )  B; uS

uS

Tale problema è una versione generalizzata del Max-Subset-Sum Problem (visto nelle lezioni precedenti). Con una differenza sostanziale, mentre nel Max-Subset-Sum Problem si massimizza il peso totale non superiore della quantità B, nel Problema dello Zaino si massimizza il profitto di ogni oggetto u i facendo rimanere la somma dei costi degli oggetti selezionati non superiore della quantità B. Definiamo il sottoproblema P I : usando la programmazione dinamica vogliamo trovare

s

P i

 {u1,u2…..un} tale che

 C (u )  min{  C (u ) : P(u )  p} calcolando ovviamente il minimo tra S si

i

u S I

u

u S I

a questo punto vogliamo trovare tutti gli

 {u1 u n }

S ip con i : 1 n 0  p   P (u ) .Sarà quindi un algoritmo pseudouU

polinomiale che mi costruirà la matrice C per cui il valore soluzione

I

S  u1 ui il cui profitto è esattamente p .

C[i, p ] indica la capacità minima ottenibile con una

Vediamo come si costruisce la matrice.

 0 se i0   C (u1 ) se i 1 C[i , p ]       else min{C[i  1, p ], C[i  1, p  P(u i )  C (u i )]} 

La matrice

p0 p  P(u1 ) 

      

C[i, p ] è calcolabile in tempo pseudo-polinomiale: (n   P (u )) .

Conoscendo tale matrice (che riguarda il sottoproblema problem.

uU

P I ) possiamo trovare la soluzione ottima del nostro knapsak-


0 1  0 1  i   n

Pi

 

 P(u ) i

Ci , p

Cn, p *

Il nostro scopo è quello di massimizzare il profitto P e minimizzare il costo C degli oggetti presi che deve rimanere  B. Ci troviamo di fronte ad una matrice in cui, l’indice p delle colonne, rappresenta il profitto che va da 0 al max profitto (somma di tutti i possibili profitti) e l’indice i delle righe, rappresenta gli oggetti

ui contenuti in U ,compreso tra 0 e n.

] della matrice contenente il massimo profitto p * e verificare se il costo dell’elemento in quella posizione superi o meno il nostro limite B . Nel caso in cui l’elemento selezionato non supera la capacità B ,allora abbiamo trovato la soluzione ottima in quanto ha profitto massimo tra tutti i possibili profitti e di costo  B . Mentre se l’elemento selezionato supera la capacità B non può considerarsi una soluzione ammissibile e di conseguenza passiamo ad analizzare l’elemento C[ n, p *  1] ricorsivamente fino a che l’elemento analizzato non superi la capacità B. Opt ( x)  p se C[n, p ]  B and p I  p C[n, p I ]  B zaino Semplicemente basta analizzare l’elemento C[ n, p

*

mantenendo una complessità pseudo-polinomiale pari a

(n   P (u )) . uU

Risultato: Il problema Max-Zaino  alla classe di complessità PP (Pseudo-Polinomiale). Ora siamo in grado di costruire uno schema di approssimazione pienamente polinomiale (FPTAS) a partire dall’algoritmo pseudo-polinomiale per il Knapsak Problem. Intuizione : usiamo l’algoritmo appena descritto su una nuova istanza, nella quale variano solamente i profitti degli oggetti. Tali profitti vengono ridotti alla parte inferiore positiva di un logaritmo. Eseguiamo l’algoritmo PP sulla nuova istanza, e al termine di questo riportiamo la soluzione trovata alla soluzione originale perdendo un qualche valore dovuto all’approssimazione dei profitti della nuova istanza. Algoritmo FPTAS per Knapsak : Begin Pn =

max uU P (u ) ;

/*O (n) */

  r  1 Pn t   log    r n

  ; /*Usando questo valore t definiamo una nuova istanza del problema.*/  P(u )  I /*scaliamo quindi i profitti di un fattore 2 t ed abbiamo complessità pari a O (n) */ x I  (U , B, C , P I ) dove P   2 t    1  I lancio Alg-PP ( x I ); /* O  n  t  P (u )  */  2 u S  return Sol di Alg-PP = S; end Come prima cosa osserviamo la soluzione del nuovo algoritmo e verifichiamo se questa sia o meno una soluzione ammissibile. Perché la soluzione sia ammissibile la capacità complessiva della soluzione non deve superare B. La nostra capacità è minore o uguale della quantità B poiché utilizziamo l’algoritmo Alg-PP che non accetta soluzioni di capacità


superiore a B. Ora verifichiamo che la complessità del nuovo algoritmo sia una complessità ammissibile per un problema FPTAS.

1 1  n  Pn r 1 2 2 p (n )  t  n  Pn = r 1 Pn = n  = n   r quindi polinomiale in   2 r 1 r 1 uS r n 1 n ma sopratutto in . r 1 r  r    2 La complessità totale dell’algoritmo è O  n  n    O n 3   (complessità FPTAS) . r  1 r  1  

1 Osserviamo che t 2

Ora dimostriamo che

Opt ( x) 

R ( x, S )  r :

 P(u )    P (u )  1  2  2 

uS *

t

u S *

(moltiplicando la soluzione per

t

 P( n)  t  P (n )   2  S*  2t    t   2t  n  2t t  2   u S * u S *  s

 

2 t ottengo l’ottimo per l’istanza originale)

 P ( u)  2 t   t   n  2 t  soluzione per l’istanza originale  2 t  Opt ( x I )  n  2 t  m( x, S )  n  2 t   uS * 2  ora studiamo il rapporto tra

Opt (x) e m( x, S )  n  2 t .

m( x, S )  n 2t m( x , S ) 2 t  n applicando la disuguaglianza Opt ( x)  Pn avremo che   1 Opt ( x ) Opt ( x ) Opt ( x )

m( x, S ) 2t n m(x , S ) 2 t  n    Opt ( x) Opt ( x) Opt ( x ) Pn  r 1 Pn  log    r n 

m( x, S ) 2 t  n  Opt ( x) Pn

essendo

1 n2   R ( x, S ) Pn

sostituendo

  r  1 Pn t   log    r n

1   R ( x, S )

n

  risulterà 

r  1 Pn 1 r 1   r n  R ( x, S ) r Pn

m( x, S ) r 1 1  1 concludiamo affermando che 1   e quindi R ( x, S )  r . Opt ( x) r R( x , S )

Risultato: Abbiamo dimostrato che l’algoritmo descritto è un algoritmo FPTAS per il problema del Knapsak. (1)

Introduciamo il problema noto come Bisaccia (o Zaino di montagna o Knapsack Problem). Dato un insiemi di oggetti aventi ognuno un costo ed un profitto prefissati, il problema consiste nel determinare se esiste un sottoinsieme di questi oggetti il cui profitto sia al di sopra di un dato valore ed il cui costo sia al di sotto di una quantità fissata. L’istanza di Knapsack è costituita da un insieme finito U , due funzioni c, p: U   e due costanti k, b  . il problema consiste nel determinare se esiste un sottoinsieme U1  U tale che

 p(u )  k U1

u

 c (u )  b. U1

u


In questo caso gli elementi di  sono l’insieme U e le due costanti k e b. Ciascun elemento ha due parametri che sono il suo costo ed il suo profitto. Un vincolo naturale che possiamo porre sui valori possibili dei parametri è che ciascun costo non sia superiore a b (altrimenti non sarebbe utile considerare il corrispondente elemento). Un’istanza consiste quindi nello specificare U, k, b, i costi ed i profitti di tutti gli elementi di U. una soluzione possibile è un qualunque sottoinsieme U1  U tale che la soma dei costi degli elementi di U1 sia inferiore a b. il predicato  richiede che la somma dei profitti degli elementi di U1 sia maggiore o uguale a k. In questo assumendo che il profitto non sia max ma solo maggiore di una costante affrontiamo un problema decisionale. La tecnica della programmazione Dinamica introdotta da Belman (1952), si basa su un principio di ottimalità così descritto: ( 2)

“Una Politica di decisioni ottima deve essere tale che indipendentemente dallo stato iniziale, dobbiamo trovare in un certo stato i le rimanenti soluzioni per raggiungere lo stato terminale. Dette soluzioni devono essere tali che la politica di decisioni seguita da i allo stato finale n, deve essere ottima rispetto ai nodi i e n.” In generale la programmazione dinamica può essere applicata ad ogni problema per il quale una soluzione ottima può essere derivata dalla composizione di soluzioni ottime di un insieme limitato di sottoproblemi (Principio di ottimalità).

Knapsak Problem  

Dimostrazione del Problema di Knapsak appartenente alla classe di problemi FPTAS

Read more
Read more
Similar to
Popular now
Just for you