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.
© Copyright 2024 Paperzz