Algoritmi euristici - di.unipi.it .pare algoritmi euristici, ossia algoritmi che non garantiscono

  • View
    226

  • Download
    2

Embed Size (px)

Text of Algoritmi euristici - di.unipi.it .pare algoritmi euristici, ossia algoritmi che non garantiscono

Capitolo 5

Algoritmi euristici

Dato che molti problemi di OC sono difficili, e spesso necessario svilup-pare algoritmi euristici, ossia algoritmi che non garantiscono di ottenerela soluzione ottima, ma in generale sono in grado di fornire una buonasoluzione ammissibile per il problema. Normalmente gli algoritmi euristicihanno una bassa complessita, ma in alcuni casi, per problemi di grandi di-mensioni e struttura complessa, puo essere necessario sviluppare algoritmieuristici sofisticati e di alta complessita. Inoltre, e possibile, in generale, cheun algoritmo euristico fallisca e non sia in grado di determinare nessunasoluzione ammissibile del problema, pur senza essere in grado di dimostrareche non ne esistono.

La costruzione di algoritmi euristici efficaci richiede unattenta analisi delproblema da risolvere volta ad individuarne la struttura, ossia le carat-teristiche specifiche utili, ed una buona conoscenza delle principali tecnichealgoritmiche disponibili. Infatti, anche se ogni problema ha le sue caratteri-stiche specifiche, esistono un certo numero di tecniche generali che possonoessere applicate, in modi diversi, a moltissimi problemi, producendo classidi algoritmi di ottimizzazione ben definite. In questo Capitolo ci soffermere-mo su due tra le principali tecniche algoritmiche utili per la realizzazione dialgoritmi euristici per problemi di OC : gli algoritmi greedy e quelli di ricercalocale.

Queste tecniche algoritmiche non esauriscono certamente lo spettro delleeuristiche possibili, per quanto forniscano una buona base di partenza perlanalisi e la caratterizzazione di moltissimi approcci. In particolare, valela pena sottolineare qui che lenfasi sulla struttura del problema di ot-timizzazione e comune anche alle tecniche utilizzate per la costruzione divalutazioni superiori sul valore ottimo della funzione obiettivo, che sarannoesaminate nel Capitolo 6. Questo fa s che spesso una stessa struttura delproblema venga utilizzata sia per realizzare euristiche che per determinarevalutazioni superiori; si puo cos avere una collaborazione tra euristiche erilassamenti, come nei casi delle tecniche di arrotondamento e delle euristiche

207

208 CAPITOLO 5. ALGORITMI EURISTICI

Lagrangiane, che saranno discusse nel Capitolo 6.Comunque, esempi di situazioni in cui la computazione di una valutazio-

ne superiore e parte integrante di o comuque guida un approccio euristicosaranno presentate gia in questo Capitolo. Per contro, le sopracitate tecnichedi arrotondamento ed euristiche Lagrangiane sono spesso classificabili comeeuristiche greedy o di ricerca locale che sfruttano informazione generata dal-la computazione di una valutazione superiore. Pertanto risulta ragionevoleconcentrarsi inizialmente su queste due grandi classi di approcci.

5.1 Algoritmi greedy

Gli algoritmi greedy (voraci) determinano la soluzione attraverso una se-quenza di decisioni localmente ottime, senza mai tornare, modificandole,sulle decisioni prese. Questi algoritmi sono di facile implementazione e note-vole efficienza computazionale, ma, sia pure con alcune eccezioni di rilievo,in generale non garantiscono lottimalita, ed a volte neppure lammissibilita,della soluzione trovata.

La definizione che abbiamo dato di algoritmo greedy e molto genera-le, e quindi possono essere ricondotti a questa categoria algoritmi ancheallapparenza molto diversi tra loro. E comunque possibile, a titolo di esem-plificazione, costruire uno schema generale di algoritmo greedy, adatto atutti quei casi in cui linsieme ammissibile puo essere rappresentato comeuna famiglia F 2E di sottoinsiemi di un dato insieme base E:

Procedure Greedy(E, F, S):begin

S := ; Q := E;repeat

e := Best(Q); Q := Q \ {e};if S {e} F

then S := S {e}until Q = or Maximal(S);

end.

Procedura 5.1: Algoritmo Greedy

Nella procedura, S e linsieme degli elementi di E che sono stati inse-riti nella soluzione (parziale) corrente, e Q e linsieme degli elementi di Eancora da esaminare: per tutti gli elementi in E \ (S Q) si e gia decisoche non faranno parte della soluzione finale. La sottoprocedura Maximalritorna vero se non e piu possibile aggiungere elementi alla soluzione S, percui lalgoritmo puo terminare senza esaminare gli elementi eventualmente

5.1. ALGORITMI GREEDY 209

ancora presenti in Q. In molti casi, le soluzioni ammissibili del problemasono solamente gli elementi massimali di F : quindi, se lalgoritmo greedytermina avendo esaurito gli elementi di Q senza che Maximal ritorni vero,allora lalgoritmo fallisce, ossia non e in grado di determinare una solu-zione ammissibile del problema. La sottoprocedura Best fornisce il migliorelemento di E tra quelli ancora in Q sulla base di un prefissato criterio, adesempio lelemento di costo minimo nel caso di problemi di minimo.

5.1.1 Esempi di algoritmi greedy

E immediato verificare che lalgoritmo di Kruskal (si veda il pragrafo 2.4.1)per (MST) ricade nello schema generale appena proposto. E e linsieme degliarchi del grafo, e S e la soluzione parziale corrente, ossia un sottografo privodi cicli. La procedura Best determina semplicemente larco di costo minimotra quelli non ancora considerati: cio viene fatto semplicemente scorrendo lalista degli archi in ordine di costo non decrescente. Il controllo S{e} Fcorrisponde a verificare che larco e = (i, j) selezionato non formi un ciclo nelsottografo individuato da S. La procedura Maximal ritorna vero quando Scontiene esattamente n 1 archi, ossia e un albero di copertura: se il grafonon e connesso, Maximal non ritorna mai vero e lalgoritmo fallisce, ossianon e in grado di determinare un albero di copertura (semplicemente perchenon ne esistono). Ricordiamo che lalgoritmo di Kruskal ha complessitaO(m log n), essenzialmente dovuta allordinamento degli archi per costo nondecrescente.

Come abbiamo visto, per il caso di (MST) si puo dimostrare che la solu-zione generata dallalgoritmo greedy e ottima (lalgoritmo e esatto). Vedia-mo adesso altri esempi di algoritmi greedy per problemi di OC che risultanoinvece essere algoritmi euristici.

5.1.1.1 Il problema dello zaino

Si consideri il problema dello zaino (KP) definito al paragrafo 1.2.2.1. Unsemplice algoritmo greedy per questo problema consiste nell costruire unasoluzione inserendo per primi nello zaino gli oggetti piu promettenti, ossiaquelli che con maggiore probabilita appartengono ad una soluzione ottima,secondo un qualche criterio euristico. Lalgoritmo inizializza linsieme S de-gli oggetti selezionati come linsieme vuoto, e poi scorre la lista degli oggettiordinati secondo il criterio euristico: loggetto ah di volta in volta selezio-nato viene accettato se la capacita residua dello zaino e sufficiente, cioe sebiS ai ah; in questo caso loggetto ah viene aggiunto ad S, altrimentiviene scartato e si passa al successivo nellordinamento. Lalgoritmo terminaquando tutti gli oggetti sono stati esaminati oppure la capacita residua dellozaino diviene 0.

210 CAPITOLO 5. ALGORITMI EURISTICI

E immediato verificare che anche questo algoritmo ricade nello schemagenerale. E e linsieme degli oggetti tra i quali scegliere, la procedura Bestdetermina loggetto migliore secondo il criterio euristico, il controllo S {e} F corrisponde a verificare che la capacita residua dello zaino siasufficiente ad accogliere il nuovo oggetto, e la procedura Maximal ritornavero quando la capacita residua dello zaino e zero. In questo caso le soluzionisono ammissibili anche se lalgoritmo termina senza che Maximal ritornivero (cio non sarebbe piu vero qualora il problema richiedesse di determinareun insieme di elementi di peso esattamente uguale a b).

Si noti che quello appena proposto non e un di algoritmo, ma piuttostouna famiglia di algoritmi greedy per (KP) che si differenziano per il criteriocon cui vengono selezionati gli oggetti. Consideriamo ad esempio i seguentitre criteri:

pesi non decrescenti : a1 a2 . . . an; costi non crescenti : c1 c2 . . . cn; costi unitari non crescenti : c1/a1 c2/a2 . . . cn/an.Ciascuno dei tre criteri e ragionevole: col primo si cercano di inserire

nello zaino molti oggetti, col secondo quelli di costo maggiore, col terzoquelli che hanno il maggiore costo per unita di spazio occupato. Nessunodei tre criteri di ordinamento degli elementi domina gli altri; tuttavia, efacile rendersi conto del fatto che lultimo (costi unitari non crescenti) e il piragionevole, ed in generale quello che fornisce risultati migliori. ChiamiamoCUD lalgoritmo greedy per (KP) che utilizzi il criterio dei costi unitari noncrescenti.

Esercizio 5.1 Per ciascuno dei tre criteri (costi unitari non crescenti, costinon crescenti e pesi non decrescenti), costruire un esempio in cui la soluzionefornita da esso domina le soluzioni fornite dagli altri.

Esempio 5.1:Consideriamo la seguente istanza del problema dello zaino:

max 7x1 +2x2 +4x3 +5x4 +4x5 +x65x1 +3x2 +2x3 +3x4 +x5 +x6 8x1, x2, x3, x4, x5, x6 {0, 1}

In questo caso, lalgoritmo CUD esegue i seguenti passi:

1. la variabile con costo unitario maggiore e x5, per cui risulta c5/a5 = 4: si poneallora x5 = 1, e lo zaino rimane con una capacita residua di 7 unita;

2. la seconda variabile, nellordine scelto, e x3, il cui costo unitario e 2: essa ha unpeso minore della capacita residua, e si pone quindi x3 = 1; la capacita residuadello zaino scende di conseguenza a 5;

3. la terza variabile esaminata e x4, il cui costo unitario e 5/3: anche essa ha un pesominore della capacita residua, e si pone quindi x4 = 1 cosicche lo zaino rimane conuna capacita residua di 2 unita;

5.1. ALGORITMI GREEDY 211

4. la quarta variabile considerata e x1, il cui costo unitario e 7/5: essa ha pero peso5, superiore alla capacita residua 2 dello zaino,