Tesina Quadratic Assignment Problem

Università degli Studi di Modena e Reggio Emilia
Corso di Laurea Magistrale in Ingegneria Gestionale
Metodi di ottimizzazione per la logistica e la produzione
Quadratic assignment Problem:
The Hospital Layout
Chiara Rampini
Maria Vittoria Manfredini
A.A. 2013/ 2014
INTRODUZIONE AL QAP
Il QAP è uno dei più interessanti e complicati problemi di
ottimizzazione combinatoria che esistano.
Qual è il modo migliore di cablare la backboard di un computer?
Come vengono localizzati i reparti all’interno di un ospedale? Il
“trait d’union” tra questi problemi è che sono tutti legati al dover
prendere una decisione. Questo tipo di decisione può essere presa
grazie all’applicazione del QAP.
Il QAP è stato originariamente introdotto da Tjalling C. Koopmans
e Martin Beckman nel 1957. Da allora il QAP rimane uno tra i più
studiati problemi di ottimizzazione combinatoria. In generale si
tratta di assegnare un set di n oggetti and un altro set di n oggetti
minimizzando la sommatoria dei costi di tali assegnamenti.
DICHIARAZIONE FORMALE DEL PROBLEMA
FORMULAZIONE MATEMATICA 0-1 DEL PROBLEMA
FORMULAZIONE MATEMATICOA 0-1 DEL PROBLEMA
LA FORMULAZIONE LINEARIZZATA DEL PROBLEMA
min
s.t
COMPLESSITA’ DEL PROBLEMA
Il QAP è un problema appartenente alla classe degli NP- DIFFICILI ( o NPCOMPLETI). Questo significa che non esiste un modello risolvibile in tempo
polinomiale e un’istanza che presenta un valore di n > 14 risulta essere
computazionalmente proibitiva per l’enumerazione diretta.
Nella sua forma quadratica e lineare il modello presenta una complessità di n!.
IMPLEMENTAZIONE DEL MODELLO QUADRATICO IN XPRESS
IMPLEMENTAZIONE DEL MODELLO LINEARE IN XPRESS
I RISULTATI
GLI ALGORITMI EURISTICI PER RISOLVERE IL PROBLEMA
Esistono alcuni euristici ed algoritmi subottimali che permettono di stimare delle
soluzioni per il QAP. Queste procedure pur non fornendo la soluzione ottima
globale generano delle soluzioni buone entro dei limiti di tempo ragionevolmente
accettabili. Ci sono cinque categorie di base per lo sviluppo di euristici per il QAP:
• METODI COSTRUTTIVI;
• METODI A ENUMERAZONE LIMITATA;
• IMPROVEMENT METHODS;
• SIMULATED ANNEALING METHODS;
• GENETIC ALGORYTHMS.
L’ALGORITMO GENETICO
L’algoritmo genetico è una procedura di ricerca e ottimizzazione che si
ispira al processo evolutivo delle specie animali:
• Insieme di soluzioni = popolazione
• Soluzione = individuo
• Valore di una soluzione = adattamento di un individuo all’ambiente
• Generazione di nuove soluzioni = riproduzione (crossover e mutazioni)
• Eliminazione di cattive soluzioni = selezione naturale
• Miglioramenti mediante local search = educazione
START
Generazione delle
popolazione iniziale
random
MultiStart
Selezione random di due
genitori
CT_CNT
Crossover per
l’ottenimento dell’erede
MT_CNT
Mutazione AM
Intensificazione e
diversificazione con
First Improvement
Mutazione PM
Mutazione SM
Ricerca Locale
TWO-OPT
NO
Fine
local
search?
SI
NO
Fine
Crossover
?
SI
STOP
L’ALGORITMO GENETICO
Idea di base: generazione di una popolazione di soluzioni iniziali in modo random.
Accoppiando casualmente mediante la procedura del crossover due
genitori scelti random dalla popolazione, si ottiene la soluzione erede.
A partire da questa soluzione si eseguono diversificazione e
intensificazione mediante le procedure di mutazione. Ogni volta che
una soluzione migliore è trovata su di essa viene eseguita la ricerca
locale tramite 2-OPT.
Input: matrice dei flussi, matrice delle distanze, zone, reparti, cardinalità della
popolazione, numero massimo di iterazioni di crossover, numero massimo di
iterazioni delle mutazioni
Output: zGen soluzione dell’euristico
arrayzGen(j) valore del reparto assegnato alla zona j
L’ALGORITMO GENETICO
Step1: Generazione della popolazione random di n genitori (n in input)
Step2: Inizializzazione del contatore del crossover
CO_CNT:=0
Step3: Scelta di due genitori random dalla popolazione
Step4: Se la condizione di terminazione (CO_CNT=50) non è verificata, esecuzione del
crossover su due genitori scelti random dalla popolazione per ottenere la
soluzione erede e incremento del contatore CO_CNT+=1, altrimenti goto Step10
Step5: Inizializzazione del contatore delle mutazioni
MT_CNT:=0
Step6: applicazione della mutazione AM, PM, SM sull’erede e incremento MT_CNT+=1
Step7: applicazione delle mutazioni AM, PM, SM sulla migliore soluzione euristica
ottenuta fino a quel momento se la condizione di terminazione (MT_CNT=50) non è
verificata, altrimenti goto Step3
Step8: Incremento MT_CNT+=1
Step9: Ricerca locale mediante 2-OPT sulla soluzione euristica migliore se su di essa non è
già stata eseguita la ricerca in precedenza
Step10: algoritmo terminato
GENERAZIONE POPOLAZIONE
CROSSOVER
CROSSOVER: esempio
MUTAZIONE AM (Adjacent interchange Mutation)
Idea di base: la mutazione AM (Adjacent interchange Mutation) sceglie random
una zona i e scambia il reparto j a essa assegnato con il reparto della
zona successiva i+1.
Input: se la mutazione è eseguita per la prima volta dopo il crossover, viene
eseguita sulla soluzione dell’erede zO generato dal crossover.
Se la mutazione è già stata eseguita una volta sull’erede viene eseguita sulla
migliore soluzione euristica ottenuta fino a quel momento.
Output: xAM = array erede zO mutato oppure array mutato della soluzione
euristica migliore
MUTAZIONE AM (Adjacent interchange Mutation)
MUTAZIONE PM (Pair-wise interchange Mutation)
Idea di base: la mutazione PM (Pair-wise interchange Mutation) sceglie random
due zone e scambia i reparti a esse assegnati.
Input: se la mutazione è eseguita per la prima volta dopo il crossover, viene
eseguita sulla soluzione dell’erede zO generato dal crossover
Se la mutazione è già stata eseguita una volta sull’erede viene eseguita sulla
migliore soluzione euristica ottenuta fino a quel momento.
Output: xPM = array erede zO mutato oppure array mutato della soluzione
euristica migliore
MUTAZIONE PM (Pair-wise interchange Mutation)
MUTAZIONE SM (Sliding Mutation)
Idea di base: la mutazione SM (Sliding Mutation) sceglie random due zone non
adiacenti i e j con j > i, scambia il reparto della zona i (reparto(i))
con reparto(j) e fa slittare di una zona tutti i reparti(k), per i<=k<j
Input: se la mutazione è eseguita per la prima volta dopo il crossover, viene
eseguita sulla soluzione dell’erede zO generato dal crossover
Se la mutazione è già stata eseguita una volta sull’erede viene eseguita sulla
migliore soluzione euristica ottenuta fino a quel momento.
Output: xSM = array erede zO mutato oppure array mutato della soluzione
euristica migliore
MUTAZIONE SM (Sliding Mutation)
RICERCA LOCALE: 2-OPT
Step1: Calcolare tutti i possibili swap e salvarli in una matrice (n(n-1)/2) x 2, dove
n è la cardinalità delle zone e dei reparti (la procedura è eseguita una sola
volta all’inizio del main)
Step2: Se la migliore soluzione euristica ottenuta non è già stata esplorata
mediante 2-OPT inizia la ricerca, altrimenti goto Step6
Step3: Inizializzare contto:=0
Step4: Eseguire lo swap (scorrendo la matrice delle possibili mosse), se non ci sono
più mosse disponibili goto Step6
Step5: Se la soluzione calcolata dopo lo swap è migliore della migliore soluzione
euristica ottenuta fino a quel momento zGen, essa viene tenuta in memoria e
si pone MT_CNT=50 e contto:=1.
goto Step4
Step6: Se (conto <>0) allora la migliore soluzione trovata tramite ricerca locale
viene sostituita alla migliore soluzione euristica zGen
Step7: termina procedura e torna alle mutazioni
VARIANTI DELL’ ALGORITMO ANALIZZATE
Algoritmo 2
• Le mutazioni sono eseguite sempre sulla soluzione erede generata
mediante la procedura di crossover
Algoritmo 3
• Le mutazioni sono eseguite sulla soluzione generata dalla mutazione
precedente.
• La ricerca locale mediante 2-OPT è eseguita sulla migliore soluzione
ottenuta dopo tutti i 50 cicli di iterazioni delle mutazioni eseguite
sull’erede del crossover
RISULTATI OTTENUTI
Tempi di esecuzione richiesti
RISULTATI OTTENUTI
CONCLUSIONI
•
Per le istanze con n= 6,8 l’implementazione del modello matematico in Xpress
fornisce la soluzione ottima dopo pochi decimi di secondo nel caso di n=6 e
relativamente pochi secondi nel caso di n= 8 ( circa 400); le istanze che presentano n
> 8 quindi i casi n= 10, 12, 15, 16, 20 non sono risolvibili in tempo polinomiale;
•
L’Algoritmo1 Euristico fornisce una soluzione accettabile in tutti i casi studiati in poco
tempo anche per le istanze maggiori ( tempo massimo di attesa 400 s per l’istanza da
20).
•
La soluzione ottima per istanze che presentano n > 14 non è calcolabile, pertanto, si
può considerare la soluzione fornita dall’Euristico che risulta inferiore rispetto a
quelle ottenute col modello dopo l’interruzione a 2000 s.