Comments
Transcript
INTRODUZIONE CONCETTI PRELIMINARI GROUP TECNOLOGY
INTRODUZIONE INTRODUZIONE AL LAVORO......................................................................................................... 3 CONCETTI PRELIMINARI CLASSIFICAZIONE E DIMENSIONAMENTO DEI SISTEMI PRODUTTIVI ............................................ 5 INDICI DI PRESTAZIONE ............................................................................................................... 6 GROUP TECNOLOGY DESCRIZIONE GROUP TECHNOLOGY ............................................................................................ 8 ALGORITMO DI RANK ORDER AND CLUSTERING .......................................................................... 8 Esempio (Rank Order and Clustering) .......................................................................................... 9 SUDDIVISIONE CELLULARE ......................................................................................................... 11 APPLICAZIONE DI TROVA_CELLA ALL'ELEMENTO DI COORDINATE (1,1) ..................................... 12 SDOPPIAMENTO DI MACCHINARI .............................................................................................. 13 COSTO CELLULARE DEFINIZIONE DEI PARAMETRI DI COSTO .................................................................................... 15 MINIMIZZAZIONE DEL COSTO DELL’IMPIANTO .......................................................................... 16 EURISTICHE BASATE SU SDOPPIAMENTI DI UNA SINGOLA MACCHINA RICERCA DELL’OTTIMO CON COMPLESSITA’LINEARE ................................................................. 17 Esempio (ricerca dell'ottimo lineare) ......................................................................................... 17 RICERCA DELL’OTTIMO CON COMPLESSITA’ ESPONENZIALE ...................................................... 18 BIPARTIZIONE DI UN INSIEME .................................................................................................... 18 LIMITITI DELLE EURISTICHE ........................................................................................................ 20 RAGGIUNGIMENTO DEL COSTO OTTIMO CALCOLO DELLA COMPLESSITA’COMPUTAZIONALE DEL PROBLEMA.......................................... 21 Esempio..................................................................................................................................... 21 IMPORTANZA DELL’APPLICAZIONE PREVENTIVA DELL’ALGORITMO DI RANK ORDER AND CLUSTERING ........................................................................................................................... 23 BREVE RICHIAMO SULLE PARTIZIONI DI UN INSIEME ................................................................. 23 NUMERI DI STIRLING DI SECONDA SPECIE.................................................................................. 24 NUMERI DI BELL ........................................................................................................................ 25 COMPLESSITA’ COMPUTAZIONALE ............................................................................................ 27 RICERCA ESAUSTIVA PER INSIEMI CON PICCOLA CARDINALITA’ ................................................. 28 Esempio..................................................................................................................................... 28 1 RICERCA STATISTICA DELL' OTTIMO OTTIMIZZAZIONE ORDINALE ...................................................................................................... 31 Esempio..................................................................................................................................... 32 APPLICAZIONE OTTIMIZZAZIONE ORDINALE AL PROBLEMA ....................................................... 34 DISTRIBUZIONE DELLA PROBABILITÀ INTRODUZIONE ......................................................................................................................... 35 PROBABILITÀ EQUIDISTRIBUITA ................................................................................................ 35 ALGORITMO PER L’ESTRAZIONE EQUIPROBABILE DI PARTIZIONI DI ORDINE K ........................... 35 ESTRAZIONE EQUIPROBABILE DI PARTIZIONI ............................................................................ 38 Esempio 1 .................................................................................................................................. 39 Esempio 2 .................................................................................................................................. 40 PROBABILITÀ POLARIZZATA ....................................................................................................... 40 Esempio .................................................................................................................................... 41 DIMOSTRAZIONE ANALITICA DELLA POLARIZZAZIONE ............................................................... 42 Esempio 1 .................................................................................................................................. 43 Esempio 2 .................................................................................................................................. 44 COMPLESSITA'COMPUTAZIONALE:ALGORITMI DI OTTIMIZZAZIONE .......................................... 45 SIMULAZIONI Simulazione 1 ........................................................................................................................... 46 Simulazione 2 ............................................................................................................................ 50 Simulazione 3 ............................................................................................................................ 56 CONCLUSIONI CONSIDERAZIONI FINALI ............................................................................................................ 60 BIBLIOGRAFIA TESTI E ARTICOLI CONSULTATI ................................................................................................... 61 2 INTRODUZIONE INTRODUZIONE AL LAVORO Questo lavoro è stato svolto nell’ambito della Group Technology (GT), un tipo di organizzazione della produzione che ormai da diversi anni è oggetto di numerose ricerche ( [1], [5], [9] ). L'idea fondante del concetto di Group Technology (GT) è quella di suddividere un insieme tecnologico (ad esempio un insieme di parti) in sottoinsiemi tra di loro simili chiamati famiglie, che verranno prodotte in celle distinte, ottenendo vantaggi sia a livello economico che organizzativo. Tra questi si annoverano i miglioramenti di alcuni indici prestazionali dell’impianto come l’aumento della produttività, l’incremento della qualità dei prodotti, la semplificazione del controllo di produzione, la riduzione delle scorte e l’ aumento del coordinamento e della comunicazione. Il nodo centrale di questa trattazione è quello di individuare quale sia la migliore modalità di creazione delle suddette famiglie di parti. A differenza di molte pubblicazioni si cercherà di affrontare il problema dell’ottimizzazione in maniera differente poiché, anziché cercare di ottimizzare il sistema solo da un punto di vista strutturale ( [6] ), si cercherà di configurare il medesimo in modo da rendere minima una certa funzione di costo, capace di tener conto della spesa necessaria all’acquisto dell’impianto e della complessità dello stesso. Il problema è stato innanzitutto formalizzato introducendo una funzione di costo associata alle celle produttive che tenesse conto degli indici prestazionali precedentemente richiamati. In una prima fase quindi si è affrontata la questione, come similmente fatto da altri autori ( [4], [12] ), utilizzando uno tra gli algoritmi presenti in letteratura già dai primi anni ‘80: il Rank Order and Clustering (ROC), un algoritmo che però fornisce una soluzione euristica generalmente non ottima al problema considerato in questa tesi. La non ottimalità di questo tipo di approccio è dovuta al fatto che la soluzione ottima potrebbe prevedere diverse repliche di alcuni macchinari, cosa non contemplata nell’algoritmo in questione. Si è comunque dimostrato in questo lavoro che l’applicazione del ROC è un passo preliminare che avvicina in qualsiasi caso alla soluzione ottima e che quindi deve sempre essere effettuato. Utilizzando l’algoritmo di Rank Order and Clustering come passo base si è cercato di raggiungere la configurazione ottima mediante varie euristiche basate su sdoppiamenti di singoli macchinari. Dapprima si è provato ad effettuare sdoppiamenti progressivi di macchinari scegliendo di volta in volta tramite algoritmi, di complessità lineare e poi esponenziale, le possibili modalità di sdoppiamento del singolo macchinario. Si è però dimostrato che questo tipo di strategie possono migliorare solo in alcuni casi la configurazione base e che non costituiscono in alcun modo una valida strategia per raggiungere la soluzione ottima. Per risolvere il problema del raggiungimento della configurazione ottima si è avuta l’intuizione di cambiare punto di vista e quindi non cercare di ottimizzare il sistema mediante la scelta dei macchinari da sdoppiare ma far derivare tale scelta dal raggruppamento delle parti nelle varie famiglie. Al fine di poter creare un metodo di soluzione esaustivo è stato necessario calcolare la complessità computazionale del problema. Poiché la complessità del problema è legata al numero di modi possibili di partizionare l’insieme delle parti ( [14] ), si è potuto constatare che questa è espressa dai numeri di Bell, i quali sono proprio definiti come il numero di sottoinsiemi non vuoti (partizioni) nei quali può essere diviso un insieme di n elementi. Individuata la complessità, si è potuto creare un algoritmo capace di generare tutte le possibili partizioni dell’insieme parti e di creare da queste tutte le possibili configurazioni del sistema. Successivamente si è prodotto un altro algoritmo capace di valutare il costo di ciascuna configurazione e di scegliere quindi in maniera esaustiva quella ottima, risolvendo così in maniera definitiva il problema della tesi. 3 A causa dell’incremento più che esponenziale della complessità computazionale (numeri di Bell) al variare del numero di parti nel sistema, si sono introdotti approcci alternativi. Tramite considerazioni di tipo statistico, sono stati introdotti due approcci probabilistici ([14]), basati sull’ottimizzazione ordinale, e ne è stata proposta una versione pratica mediante l’implementazione di algoritmi. I due approcci, senza tener conto dell’incremento della complessità computazionale, permettono di individuare configurazioni del sistema che, anche non essendo con piena certezza ottime, si trovano in un range di ottimalità precedentemente definito dall’utilizzatore. Le due modalità di ricerca proposte si differenziano da un punto di vista pratico poiché una compie tale ricerca in maniera equiprobabile mentre l’altra in maniera polarizzata. Per garantire l’equiprobabilità è stata utilizzata come sotto-procedura, mediante vari accorgimenti, una funzione creata da Herbert Wilf ( [14] ) che sfruttando delle proprietà derivanti dai numeri di Stirling di seconda specie riesce a garantire l’estrazione equiprobabile di partizioni di una data classe. Un capitolo della trattazione è stato interamente dedicato alle distribuzioni di probabilità dei due algoritmi e alle dimostrazioni relative alle medesime poiché da queste dipendono le previsioni effettuabili in merito ai risultati della ricerca prima menzionata. Al fine di avere una stima della bontà dei risultati ottenuti è stato analizzato il comportamento dei due differenti approcci in termini di guadagno temporale e perdita delle prestazioni. Si è dedicato ampio spazio nel lavoro a simulazioni tabulari capaci di dare una stima dell’efficienza dei medesimi e dei loro margini prestazionali. Nell’ultima parte del lavoro mediante grafici sono stati confrontati i risultati ottenuti dai metodi di ottimizzazione statistica e da quello di ricerca esaustiva (cioè il costo della configurazione ottima del sistema). Per concludere il lavoro si sono fatte infine delle osservazioni sui risultati ottenuti e si è data una panoramica dei possibili sviluppi futuri facendo riferimento a due diverse possibili metodologie di procedere per affrontare in maniera efficace il problema dell’ ottimizzazione. Si è proposta quindi una prima soluzione richiamante le procedure denominate ‘greedy algorithms’ e una seconda invece facente riferimento agli algoritmi di tipo ‘genetico’ ( [11] ), molto in voga per la soluzione di una discreta varietà di problemi ingegneristici. Per ragioni di semplicità e agevolezza nella consultazione all’interno del testo verranno raramente riportate le procedure algoritmiche implementate per l’ottimizzazione, si darà invece spazio alle idee su cui esse sono fondate. 4 CONCETTI PRELIMINARI CLASSIFICAZIONE E DIMENSIONAMENTO DEI SISTEMI PRODUTTIVI Per classificare un generico impianto di produzione può essere utile, come approccio preliminare, analizzare il rapporto tra la varietà delle parti prodotte e la loro quantità. Generalmente un impianto con un’elevata varietà non sarà in grado di garantire una grande produzione e viceversa. Tale concetto è molto semplice da rappresentare su di un piano cartesiano ove sulle ascisse vi sarà la quantità prodotta e sulle ordinate la varietà di beni prodotti. Figura 1 Rappresentazione cartesiana del rapporto quantità-varietà di beni prodotti Come è possibile vedere dal grafico in Figura 1 il piano viene delimitato da una fascia costituita da due rette con pendenza negativa. Tale fascia è divisa a sua volta in tre partizioni rappresentanti rispettivamente la bassa produzione (con quantità nell’ordine delle cento unità all’anno e con elevata varietà), la media produzione (con quantità nell’ordine delle mille unità all’anno e media differenziazione) ed infine l’alta produzione (con una produzione superiore alle diecimila unità all’anno e una limitata varietà di parti prodotte). A seconda del tipo di produzione l’impianto avrà una differente organizzazione del sistema produttivo. Per la bassa varietà si avrà un sistema di tipo JOB SHOP con un cammino diverso per ogni parte prodotta, per la media varietà vi sarà un’organizzazione a LOTTI o CELLULARE con stessi cammini di lavorazione per lotti di parti simili tra loro, mentre per la bassa varietà vi sarà un assetto di tipo flow-line con lo stesso cammino per tutte le parti prodotte. 5 Per la classificazione dell’impianto oltre al rapporto varietà/quantità di produzione e tipo di organizzazione per la lavorazione delle parti è necessario anche definire il LAYOUT, cioè la disposizione dei vari macchinari all’interno del sistema produttivo. A seconda del tipo di produzione, come già si è visto nell’organizzazione per la lavorazione delle parti, si avrà un tipo di LAYOUT piuttosto che un altro. I tipi di LAYOUT sono sostanzialmente quattro: LAYOUT A POSIZIONE FISSA: Viene in genere utilizzato per piccole produzioni. I macchinari sono fissi e lavorano disposti come satelliti intorno al bene in produzione. LAYOUT A PROCESSO Viene utilizzato per medie e piccole produzioni. L’impianto è suddiviso in piccoli sottoimpianti, ognuno dei quali svolge un tipo di lavorazione diversa. I beni all’interno del sistema produttivo viaggiano di cella in cella subendo ad ogni passaggio una differente lavorazione cosicché a seconda delle celle visitate dalla parte in produzione si avrà un tipo di prodotto finale piuttosto che un altro. LAYOUT CELLULARE Viene spesso utilizzato per medie produzioni. E’ caratterizzato da una suddivisione dell’impianto in una moltitudine di celle (group technology), similmente al caso precedentemente. La differenza sostanziale risiede nel fatto che ogni cella produce un bene e non si occupa del solo incremento di valore aggiunto; quindi ogni cella si comporta come se fosse un micro impianto che opera un processo completo. LAYOUT A PRODOTTO Viene utilizzato per grandi produzioni. Questo genere d’impianto si può pensare come una serie di macchine disposte lungo una linea rappresentante idealmente il percorso che dovranno compiere le parti all’interno del sistema. Poiché la linea è unica la varietà in uscita sarà molto bassa. Come è ovvio notare c’è un legame strettissimo tra il layout del sistema ed il tipo di produzione dello stesso poiché l’uno influenza inevitabilmente l’altro. INDICI DI PRESTAZIONE Per modellare un processo è necessario definire delle leggi dipendenti da indici legati alle sue prestazioni. Si potrà così migliorare un processo cercando di migliorare i suoi indici prestazionali. Il vincolo da tenere in considerazione nell’ottimizzazione del processo è il rapporto di correlazione che vi è tra i vari indici; migliorandone uno potrebbe peggiorarne un altro o si potrebbero avere dei valori ottimi per uno e dei valori inaccettabili per un altro. La scelta ottimale si ottiene quindi dall’ottimizzazione combinata dei vari indici. Gli indici da tenere in considerazione sono essenzialmente quattro: il THROUGHPUT o tasso produttivo del sistema, il coefficiente di utilizzazione delle macchine, il WIP (work in progress) e l’ MLT (manifacturing lead time). Il TROUGHPUT è il numero di parti prodotte dal sistema nell’unità di tempo. Se si conosce la domanda del mercato per massimizzare il profitto risulta utile adeguare questo indice in modo da non avere giacenze di magazzino e avere un rapporto domanda-offerta pari ad uno. 6 Il COEFFICIENTE DI UTILIZZAZIONE DELLE MACCHINE rappresenta il rapporto tra il tempo di lavorazione e il tempo di stallo all’interno del sistema produttivo. Spingere al massimo questo indice permette di ottenere il massimo della produttività del sistema nella configurazione data, ma allo stesso tempo incrementa le sue probabilità di guasto e i vari rischi connessi. Risulta quindi necessario trovare un giusto compromesso tra rischi e benefici. Il WIP rappresenta il numero medio di parti nel sistema a regime. Un aumento di questo indice porta un aumento di complessità del sistema dovuto a difficoltà di gestione e di giacenza di parti tra un macchinario e l’altro, con conseguente costo di magazzino e problemi di sincronizzazione nella lavorazione. Inoltre avere un WIP alto risulta essere pericoloso, poiché si ha un incremento della probabilità di guasto all’interno della stazione e quindi la possibilità d’immobilizzamento di una gran parte del capitale. Inoltre in caso d’incidenti, per esempio incendi, si potrebbe avere addirittura una perdita dello stesso. E’ possibile inoltre che a seguito di un guasto parziale di un macchinario si abbia la produzione di pezzi non conformi alle specifiche tecniche previste e, poiché spesso i controlli sono effettuati sul prodotto finito, si abbia una gran parte della produzione fallata. L’MLT rappresenta il tempo di permanenza della parte nell’impianto. Minimizzare questo indice porta sicuramente una minore esposizione del capitale a rischi, maggiore controllo nella produzione, semplificazione di sincronizzazione ed aumento dell’efficienza produttiva. L’ottimo per questo indice è costituito dal valore limite zero. E’ interessante notare come l’MLT e il WIP siano legati da una relazione proporzionale. Con il crescere del numero medio di parti all’interno di un sistema cresce conseguentemente il tempo medio di attraversamento all’interno dello stesso. Questo legame è espresso dalla legge di LITTLE la quale afferma che il numero di entità all’interno del sistema è pari alla frequenza media con cui le entità entrano nel sistema. Tale relazione, come è ovvio notare dalla parola ‘media’, è valida per sistemi a regime. In questo testo si presterà particolare attenzione alla GROUP TECHNOLOGY (produzione di tipo cellulare) e all’ottimizzazione dei suoi indici prestazionali. 7 GROUP TECHNOLOGY DESCRIZIONE GROUP TECHNOLOGY La group tecnology è una produzione di tipo cellulare accompagnata spesso da una discreta varietà e da una moderata quantità di produzione. Questo tipo d’impianto ha un costo abbastanza elevato ma consente di avere ridotti valori di WIP e conseguentemente MLT contenuti. Il sistema complessivo risulta un insieme di tanti sottosistemi ciascuno capace di produrre una famiglia di parti. Per ottenere un impianto di questo tipo è necessaria un’ analisi preliminare delle parti da produrre. A seguito dell’analisi è possibile creare delle famiglie di parti che richiedono lavorazioni simili e poter conseguentemente organizzare il LAYOUT produttivo disponendo i macchinari in celle, ciascuna delle quali dovrà produrre una delle famiglie individuate. Per quanto concerne la classificazione in famiglie, vengono seguiti due criteri cardine: il criterio della classificazione in base al materiale e alla struttura esteriore delle parti e quello della classificazione in base al processo produttivo che essa deve subire . La scelta migliore, come già è avvenuto in precedenza , consiste nell’integrare il più possibile i due criteri poiché il primo consente una più semplice creazione di nuove parti, mentre il secondo una più agevole disposizione dei macchinari. Per la divisione in famiglie risulta molto utile l’utilizzo del CODICE di OPTIZ (1970). Questa notazione assegna ad ogni parte un codice di tredici cifre le quali esprimono, tramite una convenzione, le caratteristiche strutturali della parte e le sue interazioni con il processo produttivo. Utilizzando questo tipo di codifica si ottiene una buona astrazione e una maggior facilità nel raggruppamento cellulare macchine- famiglie di parti. ALGORITMO DI RANK ORDER AND CLUSTERING Per trovare un’adeguata divisione cellulare ed aumentare l’efficienza dell’impianto si ricorre ad una tecnica chiamata PFA, production flow analysis. Per applicare questa tecnica, basata su di un algoritmo chiamato “rank order and clustering”, è necessario definire una matrice, detta matrice d’incidenza. Tale matrice è composta da n righe rappresentanti i diversi tipi di macchine e da m colonne corrispondenti ciascuna ad una diversa parte da lavorare. Si crea in tal modo una matrice d’incidenza macchine-parti in cui ciascuno degli n×m elementi può assumere rispettivamente il valore ‘0’, se la parte non è lavorata dalla macchina in questione, ed invece è pari ad ‘1’, se la parte viene lavorata da quest’ultima. Si converte successivamente ciascuna riga della matrice in una stringa decimale, associando ad ogni colonna, partendo dall’ultima verso l’estremo destro, pesi crescenti nell’ordine delle potenze di due (da 20 fino ad arrivare a 2m-1). Si sommano successivamente gli elementi di ciascuna riga moltiplicati rispettivamente per i propri pesi; si ottiene così il valore decimale della stringa binaria considerata. Infine dopo aver compiuto l’operazione di conversione si ordinano le righe in base al loro valore decimale in maniera decrescente. Si compie successivamente la stessa operazione sulle colonne con l’unica differenza costituita dai pesi associati agli elementi, che invece di essere da 20 fino a 2m-1 saranno da 20 a 2n-1. Si procede quindi ordinando le colonne, come si è fatto per le righe, in maniera decrescente. Si itera 8 l’operazione sulle righe e successivamente sulle colonne fino ad arrivare ad un punto in cui non è più possibile effettuare scambi. Il risultato è una matrice diagonalizzata a blocchi in cui ciascun blocco rappresenta una cella produttiva nella quale viene lavorata una famiglia di parti. Tramite dimostrazioni è possibile notare che questo algoritmo assicura la convergenza e che quindi darà comunque luogo a una soluzione in un tempo finito. Esempio (algoritmo RANK ORDER AND CLUSTERING) Si abbia una matrice d’incidenza macchine parti definita nel seguente modo: Figura 2 Rappresentazione tramite matrice d'incidenza del sistema considerato In primo luogo è necessario convertire ogni riga da binaria a decimale ed associare a ciascuna di queste il suo valore corrispondente, come esplicitato dalla figura sottostante (nella prima riga sono riportati i pesi associati agli elementi di ciascuna colonna, mentre nell’ultima colonna sono rappresentati i pesi totali di ciascuna riga): Figura 3 Matrice d'incidenza con esplicitati i pesi di ciascuna riga, evidenziati in giallo nell’ultima colonna 9 A seguito dell’ordinamento per righe si ottiene la seguente matrice Figura 4 Matrice d'incidenza con le righe ordinate, come esplicitato dai pesi evidenziati Si riportano nella prima colonna i pesi di ciascun elemento appartenente alla riga in questione. Nell’ultima riga sono riportati i pesi totali di ciascuna colonna) Figura 5 Matrice d'incidenza con colonne da ordinare, come esplicitato dai pesi evidenziati in giallo nell’ultima riga Si procede quindi in modo del tutto analogo compiendo però un ordinamento per colonne. La matrice ottenuta dopo l’ordinamento per colonne è la seguente Figura 6 Matrice ottenuta dopo l'applicazione del ROC. In rosso sono evidenziate le nuove celle ottenute 10 Come è evidenziato dai tre rettangoli rossi si è ottenuta una matrice diagonale a blocchi in cui sono evidenti le tre famiglie di parti con le relative macchine necessarie per la loro lavorazione. Arrivando a questo punto l’algoritmo non ha necessità di ripetersi poiché sia le righe che le colonne sono ordinate e quindi una successiva iterazione non creerebbe modifiche all’interno della matrice suddetta. Bisogna tenere in considerazione che colonne o righe di uguale valore possono essere ordinate indifferentemente, poiché apparterranno obbligatoriamente alla stessa famiglia di parti. Le tre famiglie di parti sono quindi {A,H,D} , {B,F,G} , {I,C,E} con le relative divisioni cellulari di macchine necessarie per la loro lavorazione {1,5} , {7,4} , {3,6,2}. SUDDIVISIONE CELLULARE Per individuare le celle in maniera algoritmica è stata implementata la procedura ‘trova_celle’. Tale funzione, sfruttando le proprietà della matrice d’incidenza ottenuta a seguito dell’applicazione dell’algoritmo di RANK ORDER AND CLUSTERING, riesce ad individuare la corretta divisione cellulare della matrice data. La funzione ‘trova_celle’ riceve in ingresso una matrice ordinata, secondo l’algoritmo ROC restituisce in uscita, un vettore sub-partito in insiemi di cardinalità pari a quattro: i primi due elementi di ciascun insieme rappresentano rispettivamente la riga e la colonna iniziale della cella in esame, mentre i secondi due la riga e la colonna finale di quest’ultima. I singoli sottoinsiemi sono forniti dalla funzione ‘trova_cella’ la quale ricevendo in ingresso la matrice ordinata secondo ROC e due indici, il primo riferito alla riga e il secondo riferito alla colonna iniziale da considerare, restituisce un vettore di lunghezza pari a quattro con i primi due valori pari agli indici di riga e di colonna ricevuti in ingresso e gli ultimi riferiti rispettivamente agli indici della riga e della colonna dell’ultimo elemento della cella considerata. La ricerca della dimensione della singola cella avviene con complessità lineare: partendo dall’elemento indicato dagli indici in ingresso. si incrementano gli indici in uscita. L’incremento continua fintanto che non vi sia una ‘sottoriga’ nulla e una ‘sottocolonna’ nulla di grandezza pari rispettivamente al numero di colonne occupate dalla cella e al numero di righe occupate dalla medesima. Il funzionamento di tale procedura è garantito dall’applicazione preventiva dell’algoritmo ROC. Tale algoritmo, ordinando la matrice data, fa in modo che vi sia un compattamento degli ‘1’ verso l’angolo in alto a sinistra della matrice, e quindi permette l’individuazione delle celle incrementando solo di una unità l’indice di colonna e riga finale relativo alla cella in esame. Di seguito viene riportata una matrice prima e dopo l’algoritmo di RANK ORDER AND CLUSTERING. Nel paragrafo successivo tale matrice verrà utilizzata per produrre un esempio pratico dell’algoritmo ‘trova_cella’. L’algoritmo verrà utilizzato per trovare solo la prima cella della matrice. Figura 7 Matrice prima dell'applicazione dell’algoritmo ROC Figura 8 Matrice dopo l'applicazione dell'algoritmo ROC 11 APPLICAZIONE DI ‘TROVA_CELLA’ ALL’ ELEMENTO DI COORDINATE (1,1) STEP 1: Si inizializzano i valori di riga e colonna iniziali e finali, restitituiti dalla funzione, con i valori delle coordinate fornite in ingresso. Per verificare se la cella definita da tali indici è effettivamente una cella si prova se la sottocolonna di destra e la sottoriga inferiore sono completamente nulle. STEP 2: Dal momento che né la sottoriga né la sottocolonna sono effettivamente nulle si incrementano entrambi gli indici finali e si ripete la verifica precedente. STEP 3: Poiché il test fallisce solo sulla sottocolonna di destra si incrementa solo l’indice di colonna finale e si ripete la verifica. STEP 4: La verifica va a buon fine sia per la sottocolonna che per la sottoriga quindi vengono restituiti gli indici relativi rispettivamente alla riga e alla colonna da cui è iniziato il test e alla riga e alla colonna finali ottenuti mediante lo svolgimento dell’algoritmo. La funzione ‘trova_celle’ richiama la funzione ‘trova_cella’ sulla matrice ordinata mediante ROC e sull’elemento riga_finale+1 e colonna_finale+1. Figura 9 Dall'angolo alto a sinistro rappresentazione grafica in senso orario dei quattro step dell’algoritmo trova_cella Da notare inoltre che non è possibile trovare una sottoriga non nulla o una sottocolonna non nulla al di sotto o a destra di una sottoriga nulla o di una sottocolonna nulla. Tale proprietà come è stato detto in precedenza è garantita dall’applicazione preventiva dell’algoritmo di Rank Order and Clustering. 12 SDOPPIAMENTO DI MACCHINARI Vi sono dei casi in cui dopo aver applicato l’algoritmo di Rank Order and Clustering non si ha una matrice a blocchi perfettamente diagonale. Quindi potrebbe risultare utile apportare delle modifiche all’impianto per ottenere una migliore distribuzione cellulare. Una scelta consigliabile in questo caso potrebbe essere quella di duplicare uno o più macchinari dell’impianto. Con tale scelta è possibile distribuire le parti da lavorare sulle nuove macchine e ridurre la dimensione delle celle precedentemente ottenute. Un esempio di questa eventualità è dato dalla seguente matrice d’incidenza. Figura 10 Matrice prima dell'applicazione del ROC Figura 11 Matrice dopo il ROC con celle evidenziate Dalla figura riportata sopra risulta evidente che, con i macchinari dati, è possibile dividere l’impianto in sole due celle produttive. Per ottenere un miglioramento si potrebbe pensare di comprare un duplicato di qualche macchinario. Figura 12 Matrice d'incidenza con evidenziato il possibile sdoppiamento In questo caso si nota che scegliendo la macchina uno e distribuendo diversamente le lavorazioni delle parti B e D è possibile creare un’altra cella produttiva. Figura 13 Matrice d'incidenza con evidenziate le nuove celle a seguito dello sdoppiamento Dopo lo sdoppiamento si ottiene un impianto a tre celle produttive. 13 In questo esempio si è scelto di sdoppiare solamente una macchina, la macchina numero uno, e di dare così origine ad un impianto a tre celle. La scelta dello sdoppiamento non è assolutamente univoca ed è ancorata a parametri decisionali dipendenti dall’impianto considerato. E’ quindi importante ricordare che la scelta fatta in questo breve esempio non è necessariamente la migliore ma è solo una delle possibili scelte attuabili. Per valutare quale tra le possibili scelte vada effettuata, risulta utile definire una funzione di costo. 14 COSTO CELLULARE DEFINIZIONE DEI PARAMETRI DI COSTO Il costo di un impianto cellulare può essere definito come la sommatoria dei costi di ogni singola cella che lo compone, di conseguenza per definirne il costo è sufficiente concentrarsi su di una singola cella ed iterare il ragionamento per tutte le altre. Il costo di una singola cella può essere visto come la somma di due costi: uno derivante dalla complessità introdotta dalla grandezza della singola cella l’altro derivante dal costo dei macchinari che la compongono. =∑ + (eq.1) dove Ci è il costo totale della cella i-esima, Cmk è il costo del macchinario k-esimo presente nella cella i-esima, Cci è il costo dovuto alla dimensione della cella i-esima e Nmi è il numero di macchinari presenti nella cella i-esima. Il costo derivante dalle dimensioni della cella potrebbe essere visto come un costo indiretto poiché in prima battuta non sembrerebbe incidere direttamente sul capitale ma, ad un analisi più attenta, si nota una stretta correlazione con il WIP e l’MLT dell’impianto: all’aumentare della complessità, derivante da un aumento delle dimensioni, si ha un aumento di entrambi gli indici. I fattori che influiscono su tale costo sono principalmente due: il numero di macchinari presenti all’interno della cella e il numero di parti lavorate nella medesima (la cella infatti ha una grandezza #parti × #macchine). Per stimare tale complessità è stata scelta una funzione di tipo quadratico, in cui appunto la complessità della singola cella è definita come la somma tra i quadrati rispettivamente del numero delle macchine che la compongono e del numero delle parti che vi vengono lavorate. = + (eq.2) Dove Nmi è il numero di macchine presente nella cella i-esima e Npi è il numero di parti presenti nella stessa. I coefficienti di proporzionalità che moltiplicano entrambi i quadrati servono per penalizzare o agevolare l’aumento o la diminuzione di macchine nell’impianto. Il costo complessivo risulta quindi definito dalla seguente relazione : =∑ (eq.3) Dove è il costo totale dell’impianto, i è la cella in esame, n le celle totali, i-esima calcolato come definito nell’eq.1. il costo della cella 15 Se si fosse invece deciso di adottare una funzione di costo lineare: = + ci si sarebbe accorti che la suddivisione in celle non avrebbe portato alcun benefizio e che sdoppiando i macchinari si andrebbe sempre e comunque incontro ad un aumento del costo. Tale affermazione è giustificata dal fatto che rimanendo costanti le parti nel sistema e aumentando le macchine, data la linearità del costo della cella, il costo non può far altro che aumentare linearmente. Esempio Data una cella su cui effettuare lo sdoppiamento composta da 4 macchinari e da 3 parti e considerando la possibilità di formare due celle: composte una da 4 macchinari e da 1 parte e l’altra da 4 macchinari e due parti si nota che il costo totale subisce un incremento: = 4 + 3=7 = = 4 + 2 + 4 + 1 = 11 MINIMIZZAZIONE DEL COSTO DELL’IMPIANTO La funzione di costo totale risulta essere una funzione discontinua quindi il problema di minimizzazione non è affrontabile con i canonici strumenti matematici poiché non è possibile studiare le derivate della curva in esame. Per minimizzare il costo totale è necessario quindi trovare una combinazione di fattori per cui la sommatoria dei costi della complessità delle varie celle e quella dei vari macchinari operanti nelle medesime sia minima. Il problema quindi si riduce a trovare quali debbano essere i macchinari da sdoppiare in modo da ottenere una nuova disposizione cellulare capace di abbassare il costo degli indici sopra descritti. Un primo approccio possibile potrebbe essere quindi quello di concentrarsi sui macchinari da sdoppiare cercando il miglior sdoppiamento possibile tra quelli selezionabili e iterando il procedimento fino a che non ci siano più sdoppiamenti convenienti. 16 EURISTICHE BASATE SU SDOPPIAMENTI DI UNA SINGOLA MACCHINA RICERCA DELL’OTTIMO CON COMPLESSITA’LINEARE Un primo approccio da considerare potrebbe essere quello di cercare uno sdoppiamento possibile mantenendo una complessità lineare. Per realizzare tale ricerca è stato implementato un algoritmo che, ricevendo in ingresso la matrice ordinata secondo l’algoritmo ROC, calcola il costo dell’impianto dato e lo imposta come costo iniziale. Al passo successivo la procedura scorre tutte le righe della matrice d’incidenza cercando in maniera lineare il miglior sdoppiamento possibile e itera questa procedura finché non sia più conveniente effettuare alcuno sdoppiamento. Un esempio di questo algoritmo è riportato di seguito: Esempio (ricerca dell’ottimo lineare) Per semplicità è stata presa in esame una matrice d’incidenza 3 x 3 così da poter mostrare in modo dettagliato l’esecuzione dell’intero algoritmo. In tale esempio i costi dei macchinari sono considerati tutti equivalenti e pari ad uno. 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 Sdoppiamento Ciniz=21 Sdoppiamento Ciniz=21 Sdoppiamento Ciniz=21 Sdoppiamento Ciniz=21 1 1b 2 3 A 1 0 1 0 B 0 1 1 0 C 0 1 0 1 1 1b 2 3 A 1 0 1 0 B 1 0 1 0 C 0 1 0 1 1 2 2b 3 A 1 1 0 0 B 1 0 1 0 C 1 0 0 1 1 2 2b 3 A 1 1 0 0 B 1 1 0 0 C 1 0 0 1 ROC Ctot=29 ROC Ctot=17 ROC Ctot=29 ROC Ctot=21 1 2 1b 3 A 1 1 0 0 B 0 1 1 0 C 0 0 1 1 1 2 1b 3 A 1 1 0 0 B 1 1 0 0 C 0 0 1 1 1 2 2b 3 A 1 1 0 0 B 1 0 1 0 C 1 0 0 1 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 17 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 1 2 3 A 1 1 0 B 1 1 0 C 1 0 1 Sdoppiamento Ciniz=21 Sdoppiamento Ciniz=21 1 2 3 3b A 1 0 0 0 B 1 1 0 0 C 1 1 0 1 1 2 3 3b A 1 0 0 0 B 1 0 0 0 C 1 1 0 1 ROC Ctot=21 ROC Ctot=21 1 2 3b A 1 1 0 B 1 1 0 C 1 0 1 1 2 3b A 1 1 0 B 1 1 0 C 1 0 1 Figura 14 Rappresentazione grafica dell'algoritmo di sdoppiamento: Prima colonna matrice monoblocco, Seconda colonna matrice con sdoppiamento,Terza colonna matrice ordinata e divisa in celle con relativo costo Nella prima colonna sono evidenziate le righe che verranno sdoppiate e con colori differenti sono indicate le assegnazioni parti-macchina successive allo sdoppiamento. Nella terza colonna sono messe in evidenza le celle finali con riportato di fianco il costo di ciascuna soluzione. Come evidenziato dalla quadratura in rosso la soluzione di minor costo ha una spesa pari a 17. In questo caso l’algoritmo termina con una sola iterazione poiché sdoppiamenti successivi non produrrebbero alcun miglioramento. RICERCA DELL’OTTIMO CON COMPLESSITA’ ESPONENZIALE La ricerca con complessità lineare è un tipo di ricerca non esaustiva poiché non prende in considerazione tutti i possibili sdoppiamenti attuabili sulla singola riga. Per ovviare a questo inconveniente è necessario poter dividere ogni riga in ciascuna delle sue bipartizioni possibili. La complessità di tale problema è di tipo esponenziale poiché essendo n la cardinalità dell’insieme costituito dagli elementi non nulli della riga i-esima, i possibili modi in cui è bipartibile tale insieme, non considerandone le ripetizioni, sono (2n-2)/2. L’algoritmo opera in maniera identica al precedente con l’unica differenza che anziché bipartizionare ciascuna riga in maniera lineare ne considera tutti i possibili due-sottoinsiemi. La complessità del problema finale risulta quindi elevata poiché tale operazione di bipartizione deve essere ripetuta per ciascuna riga e il tutto deve essere iterato fino a che non si arrivi ad un punto di stallo. In tale punto sdoppiando un qualsiasi macchinario non si otterrà più alcun abbassamento di costo. Nonostante l’elevata complessità computazionale tale algoritmo può essere utilizzato su matrici d’incidenza di dimensioni non molto elevate ottenendo un discreto margine di miglioramento in termini di abbassamento del costo finale rispetto all’algoritmo precedente. BIPARTIZIONE DI UN INSIEME Il punto centrale della ricerca con complessità esponenziale è costituito dalla procedura che crea la bipartizione dell’insieme degli elementi che compongono ciascuna riga. Gli elementi non nulli di ciascuna riga rappresentano le parti lavorate dalla macchina considerata ed appartengono 18 all’insieme da bipartire. Tale insieme contiene quindi gli indici delle colonne rappresentanti le parti lavorate dalla macchina presa in esame. Per ottenere tutte le possibili bipartizioni è sufficiente individuare tutte le combinazioni di parti da inserire nel primo insieme e scrivere il secondo come sottrazione tra l’insieme totale e quello selezionato. Per trovare tutti i possibili modi in cui è riempibile il primo insieme è stato ideato il seguente algoritmo: Dato ad esempio un insieme costituito da cinque parti tutti i possibili modi di riempire il primo insieme sono: {1} {2} {3} {4} {1,2} {1,3} {1,4} {1,5} {2,3} {2,4} {2,5} {3,4} {3,5} {4,5} {1,2,3} {1,2,4} {1,2,5} {1,3,4} {1,3,5} {1,4,5} {2,3,4} {2,3,5} {2,4,5} {3,4,5} {1,2,3,4} {1,2,3,5} {1,2,4,5} {1,3,4,5} {2,3,4,5} {5} {1,2,3,4,5} Figura 15 Esempio grafico di applicazione dell'algoritmo di bipartizione di un insieme su di un insieme costituito da cinque elementi Partendo dall’insieme costituito dagli n elementi ordinati in maniera crescente si prende ciascuno di essi singolarmente e si creano così i primi n modi diversi di riempire il primo insieme con un solo elemento. Per formare tutti i possibili sottoinsiemi di cardinalità due si considerano uno alla volta tutti i sottoinsiemi di cardinalità uno e si uniscono tra loro in gruppi da due elementi in modo che ciascun elemento si unisca solo con elementi maggiori di lui. I vari sottoinsiemi devono essere ordinati in maniera crescente e divisi a blocchi in modo che tutti i sottoinsiemi, da due elementi, generati dall’elemento più piccolo appartengano allo stesso blocco e così via per gli altri. Per formare i sottoinsiemi di cardinalità tre si procede in modo analogo unendo i sottoinsiemi di cardinalità uno con quelli di cardinalità due.. Il criterio da mantenere nell’unione è lo stesso: il sottoinsieme di cardinalità uno si unisce con i sottoinsiemi di cardinalità due appartenenti ai blocchi di cardinalità due generati da elementi più grandi di lui. Proseguendo con questo algoritmo è possibile ottenere tutti i possibili riempimenti del primo sottoinsieme. Analizzando bene la soluzione finale si nota che manca l’insieme vuoto e che la metà delle soluzioni ottenute è ridondante poiché speculare. Quindi le soluzioni da considerare effettivamente sono (2n-2)/2 poiché è necessario escludere le due soluzioni derivanti dall’insieme totalmente pieno e totalmente vuoto ed eliminare dividendo per due tutte le speculari. 19 LIMITITI DELLE EURISTICHE Entrambe le euristiche pur talvolta migliorando le prestazioni dell’impianto non possono garantire il raggiungimento dell’ottimo poiché consentono lo sdoppiamento di un solo macchinario alla volta e quindi non riescono a migliorare situazioni in cui c’è necessità di sdoppiare contemporaneamente più macchinari. Per trovare un raffronto di questa affermazione è sufficiente considerare il seguente esempio in cui sempre per semplicità i costi dei macchinari vengono considerati pari all’unità. Nella parte sinistra è presentata una matrice d’incidenza ottimizzata secondo l’algoritmo lineare (quella ottenuta mediante l’algoritmo esponenziale è la stessa) mentre nella parte destra è presentata la stessa matrice con un doppio sdoppiamento. A B C D Sdoppiamento 1 1 1 1 1 simultaneo delle 2 3 4 1 1 1 1 0 0 1 0 0 1 0 0 macchine 1 e 2 A B C D 1 1 1 0 0 2 3 4 1b 2b 1 1 1 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 Figura 16 Rappresentazione grafica del limite delle euristiche basate sullo sdoppiamento di un singolo macchinario. Nella figura di destra si evidenzia lo sdoppiamento cellulare non compendiato dalle euristiche precedentemente citate. Come si evince dall’esempio il costo totale diminuisce poiché quello di partenza è uguale a 36 mentre quello di arrivo è pari a 34. Si deduce quindi che entrambi gli algoritmi di minimizzazione precedentemente implementati non sono capaci di fornire una soluzione ottima. 20 RAGGIUNGIMENTO DEL COSTO OTTIMO CALCOLO DELLA COMPLESSITA’COMPUTAZIONALE DEL PROBLEMA Per risolvere in maniera precisa il problema è necessario fare una stima esatta della sua complessità computazionale. Per fare ciò è necessario guardare la situazione da una diversa angolazione. Nei paragrafi precedenti ci si è concentrati sullo sdoppiamento di un singolo macchinario ma come si è visto tale scelta non risulta essere la migliore. Sembrerebbe quindi che sia necessario riuscire ad individuare di volta in volta quale sia il miglior raggruppamento di macchinari da sdoppiare in modo da raggiungere la soluzione ottima. Questa scelta fatta dal lato delle macchine da sdoppiare potrebbe risultare alquanto complicata poiché non è possibile garantire che lo sdoppiamento ottimo di gruppi di macchinari riesca a raggiungere la configurazione a costo minimo per il sistema. Il modo più semplice di affrontare il problema è invece quello di concentrarsi sul numero di parti in lavorazione, che non sarebbe altro che il numero di colonne della matrice d’incidenza. Riflettendo più attentamente si nota che sdoppiare gruppi di macchinari non significa altro che raggruppare in maniera differente i tipi di parti presenti all’interno del sistema. Per risolvere il problema in maniera definitiva si possono quindi analizzare tutti i vari raggruppamenti generabili con le parti presenti nel sistema (ciascuna legata al suo macchinario di lavorazione) e scegliere tra tutte le configurazioni ottenute quella a costo minimo. La complessità computazionale del problema è quindi data dal numero di raggruppamenti creabili avendo n parti da lavorare. Come noto, il numero di sottoinsiemi diversi generabili da un insieme con cardinalità n è pari a nn, ma tale risultato non è corretto in questo caso, poiché negli nn sottoinsiemi si contempla anche l’ordine reciproco dei vari raggruppamenti, cosa che non influisce minimamente con il costo totale della configurazione finale. Per fissare meglio le idee, di seguito viene proposto un esempio. Esempio Dato un sistema di tre macchine che lavora tre parti [A,B,C] tutti i possibili diversi raggruppamenti non tenenti conto dell’ordine reciproco tra i vari sottoinsiemi sono: Configurazione finale Configurazione finale Configurazione finale Configurazione finale Configurazione finale con divisione in tre celle con divisione in due celle con divisione in due celle con divisione in due celle con divisione ad una cella {A}; {B}; {C} {A}; {B, C} {B}; {A, C} {C}; {A, B} .{A, B, C} Per fare un esempio concreto si potrebbe considerare una matrice d’incidenza con tre parti e tre macchine che le lavorano: 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 Figura 17 Matrice d'incidenza di base 21 Nelle seguenti tre colonne sono rappresentate rispettivamente: la matrice d’incidenza data, la matrice d’incidenza costruita seguendo le indicazioni date dagli insiemi sopra elencati e la matrice d’incidenza con le macchine eliminate poiché non compivano alcuna lavorazione. La divisione in celle è evidenziata in celeste: 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 1 2 3 1b 2b 3b 1c 2c 3c A 1 1 0 0 0 0 0 0 0 B 0 0 0 1 1 1 0 0 0 C 0 0 0 0 0 0 0 0 1 1 2 3 1b 2b 3b A 1 1 0 0 0 0 B 0 0 0 1 1 1 C 0 0 0 0 0 1 1 2 3 1b 2b 3b B 1 1 1 0 0 0 A 0 0 0 1 1 0 C 0 0 0 0 0 1 1 2 3 1b 2b 3b C 0 0 1 0 0 0 A 0 0 0 1 1 0 B 0 0 0 1 1 1 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 1 2 1b 2b 3b 3c A 1 1 0 0 0 0 B 0 0 1 1 1 0 C 0 0 0 0 0 1 1 2 1b 2b 3b A 1 1 0 0 0 B 0 0 1 1 1 C 0 0 0 0 1 1 2 3 1b 2b 3b B 1 1 1 0 0 0 A 0 0 0 1 1 0 C 0 0 0 0 0 1 3 1b 2b 3b C 1 0 0 0 A 0 1 1 0 B 0 1 1 1 1 2 3 A 1 1 0 B 1 1 1 C 0 0 1 Figura 18 Rappresentazione a tre colonne della formazione dei vari insiemi delle parti esplicitati nell’esempio. Nella prima colonna è rappresentata la matrice di partenza, nella seconda colonna vengono formati i nuovi insiemi delle parti e vengono evidenziate le cancellazioni delle macchine non utilizzate ed infine nella terza colonna la matrice ottenuta con la relativa divisione cellulare Da notare che per esempio un raggruppamento del tipo {A}{B,C} sarebbe stato del tutto equivalente ad un raggruppamento del tipo {B,C}{A}. 22 IMPORTANZA DELL’APPLICAZIONE PREVENTIVA DI RANK ORDER AND CLUSTERING DELL’ALGORITMO Nel precedente esempio non è stato applicato preventivamente l’algoritmo di RANK ORDER AND CLUSTERING ma solitamente tale applicazione semplifica di molto il problema della ricerca della configurazione ideale per il sistema. Tale algoritmo, riordinando il sistema lo partiziona diminuendo, o al massimo eguagliando, il suo costo di partenza senza introdurre alcun costo derivante dallo sdoppiamento di macchinari. Successivamente è possibile applicare la ricerca dell’ottimo singolarmente sulle nuove celle trovate diminuendo così il numero di parti in gioco. Ciò è vero poiché si dovrà lavorare con una partizione dell’insieme totale delle parti e non con l’intero insieme. Un esempio di tale procedura è mostrato di seguito 1 2 3 4 A 1 1 1 0 B 0 0 0 1 C 0 0 1 0 D 1 1 0 0 ROC Ctot=21 1 2 3 4 A 1 1 1 0 D 1 1 0 0 C 0 0 1 0 B 0 0 0 1 Nuove celle 1 2 3 4 A 1 1 1 0 D 1 1 0 0 C 0 0 1 0 B 0 0 0 1 Figura 19 Rappresentazione grafica della semplificazione dovuta all'applicazione preventiva dell'algoritmo di ROC Dopo il RANK ORDER AND CLUSTERING, senza aver introdotto alcun costo, si deve applicare l’algoritmo per la ricerca dell’ottimo anziché ad un insieme di cardinalità quattro a due insiemi il primo di cardinalità uno e il secondo di cardinalità tre. Il vantaggio in termini di costo computazionale è notevole. Basti pensare che i sottoinsiemi diversi generabili a partire da quattro elementi sono 15, quindi i confronti necessari per ottenere la configurazione ottima sarebbero stati il numero dei sottoinsiemi meno uno. In questo caso invece sono necessari solo quattro confronti poiché come si è visto in precedenza per un insieme di cardinalità tre ne sono necessari solo 4 e l’insieme costituito da un solo elemento non ha bisogno di confronti. Per calcolare quindi l’esatto numero di sottoinsiemi diversi creabili da un insieme di cardinalità n senza tener conto dell’ordine reciproco dei medesimi è necessario richiamare alcune nozioni di insiemistica con particolare rilievo per i numeri di Stirling di seconda specie e per quelli di Bell. BREVE RICHIAMO SULLE PARTIZIONI DI UN INSIEME Si definisce partizione di un insieme A una famiglia di sottoinsiemi non vuoti Ai | i є I che rispettano le due proprietà seguenti: 1. L’intersezione tra ogni coppia di insiemi diversi in A deve generare l’insieme vuoto, quindi tutti gli insiemi di A sono disgiunti e vale la seguente relazione Ai ∩ Ak = 0 per ogni i ≠ k. 2. A è costituito dall’unione di tutti i sottoinsiemi Ai cioè, A = ⋃ A . Ciascun sottoinsieme Ai prende il nome di parte della partizione. Dalla proprietà sopra esposte è ovvio dedurre quindi, che ogni insieme di cardinalità finita avrà un numero finito di partizioni. 23 NUMERI DI STIRLING DI SECONDA SPECIE I numeri di Stirling di seconda specie, espressi matematicamente da S(n,k), definiscono il numero delle possibili k-partizioni attuabili su di un insieme di cardinalità n. Per calcolare il valore di S(n,k) è utile applicare il seguente teorema. Teorema Sia S(n,k) il numero di partizioni di un insieme A con n elementi in k parti, con 1 ≤ k ≤ n. Allora: 1. S(n,1) = 1 2. S(n,n) = 1 3. S(n,k) = S(n-1,k-1) + k ∙ S(n-1,k) con 2 ≤ k ≤ n-1. Dimostrazione Per dimostrare le prime due asserzioni è sufficiente notare che per partizionare A in un unico sottoinsieme l’unico modo è considerare A stesso, di conseguenza la soluzione possibile è unica. Tale soluzione è unica anche nel caso in cui si volesse n-partizionarlo poiché l’unico modo per farlo risulta essere quello di prendere tutti gli elementi di A disgiuntamente, ciò creare n sottoinsiemi unitari di A. Detto s un elemento di A , sia A0=A\{s}. Allora una partizione di A in k parti si ottiene in maniera univoca in uno solo dei seguenti modi: 1. Aggiungendo la parte formata dall’insieme unitario s ad una partizione in k-1 blocchi di A0 2. Aggiungendo l’elemento s ad una delle k parti della partizione di A0 e questo è possibile in k modi diversi. Da tale teorema è possibile rappresentare i numeri di Stirling di seconda specie mediante una tabella infinita avente sulle colonne il numero delle partizioni desiderate e sulle righe la cardinalità dell’insieme da partizionare. Come esempio vengono riportate di seguito le prime otto righe della tabella sopra citata: n\k 0 1 2 3 4 5 6 7 8 0 1 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 1 1 1 1 1 1 1 1 1 3 7 15 31 63 127 1 6 25 90 301 966 1 10 65 350 1701 1 15 140 1050 1 21 266 1 28 1 Figura 20 Rappresentazione tabulare dei numeri di Stirling di seconda specie. La prima colonna rappresenta la cardinalità dell’insieme considerato mentre la prima riga l’ordine di partizione scelto. 24 E’ interessante notare come i numeri di Stirling di seconda specie abbiano un legame con i coefficienti multinomiali. Tali coefficienti infatti contano il numero di permutazioni con ripetizione di k oggetti in cui il primo è preso n1 volte il secondo n2 volte , il k – esimo nk volte, con n.=.n1.+.n2+……..+. nk e valgono : … = ! ! !… ! (eq.4) Si osservi che i coefficienti multinomiali non sono altro che una generalizzazione dei coefficienti binomiali, infatti nel caso in cui k=2 si ha la loro coincidenza : = con = = = + ! ! ! (eq.5) NUMERI DI BELL I numeri di Bell, indicati con B(n), rappresentano il numero di sottoinsiemi non vuoti in cui è possibile partizionare un insieme di n elementi. Per il calcolo dei numeri di Bell risulta utile enunciare il seguente teorema: Teorema Dato un insieme I di ordine n ≥ 1, siano B(n -i) e B( n) l’ (n-i)-esimo e l’(n)-esimo numero di Bell. Si ha la seguente formula [ FORMULA DI AITKEN ] : ( )=∑ ( − ) (eq.6) Dimostrazione Si consideri S una partizione dell’insieme I. L’elemento a di I appartiene ad uno ed uno solo dei sottoinsiemi A di S. Ciò significa che ogni partizione di I è individuata univocamente dal sottoinsieme A che contiene a e da una partizione di I – A . L’ordine I dell’insieme A è compreso tra 1 ed n ( i ≠ 0 poiché A ≠ Ø ). A può essere scelto in modi, poiché tanti sono i sottoinsiemi di I 25 che contengono a; le partizioni di I-A, che è un insieme di ordine n-i. risultano invece essere B(n-i). Dunque, per ogni i, 1 ≤ i ≤ n, vi sono esattamente (per il principio delle scelte) ∙ (n-i) partizioni di I nelle quali a appartiene ad un elemento A di ordine i. Ne segue quindi che le partizioni di I sono quelle evidenziate dalla formula di AITKEN. Per ricavare i numeri di Bell è inoltre possibile utilizzare altre espressioni matematiche tra cui è possibile annoverare quella dovuta a Dobiński ( )= ∑ (eq.7) ! oppure quella ricorsiva molto utilizzata per ragioni di compattezza: ( + 1) = ∑ (eq.8) Per l’implementazione algoritmica risulta invece molto utile vedere i numeri di Bell come sommatorie dei numeri di Stirling di seconda specie relativi ad un insieme di cardinalità data ( )= ∑ ( , ) (eq.9) Infatti come si nota dalla formula, per ottenere il numero di Bell ennesimo è sufficiente sommare tra loro tutti gli elementi della riga ennesima della tabella contente i numeri di Stirling di seconda specie. Per il calcolo grafico dei numeri di Bell si ricorre invece al cosiddetto triangolo di Bell in cui la prima colonna è appunto costituita da tutti numeri di Bell. 1 1 2 5 15 52 203 2 3 7 20 67 255 5 10 27 87 322 15 37 114 409 52 151 523 203 674 877 Figura 21 Rappresentazione tabulare dei numeri di Bell. Sulla prima colonna sono evidenziati in grassetto i primi 6 numeri di Bell Per compilare il triangolo si inizia mettendo i primi due uno della prima colonna e poi si procede nel seguente modo: gli elementi sulla destra sono ottenuti tramite somma del loro elemento adiacente sinistro e di quello che lo sovrasta, gli elementi della prima colonna eccetto i due uno iniziali sono gli elementi finali di ciascuna riga posti nell’indice riga pari alla colonna che occupano più uno. 26 COMPLESSITA’ COMPUTAZIONALE Come si è potuto capire dai paragrafi precedenti la complessità computazionale del problema in esame è data da B(n) dove n è appunto la cardinalità dell’insieme costituito dalle parti in lavorazione nel sistema dato. E’ interessante confrontare la complessità reale del problema con quella esponenziale e con quella massima prima descritta: Complessità Complessità esponenziale 2n 140 120 100 80 60 40 20 0 1 2 3 4 5 6 7 Cardinalità Complessità nn 1000000 Complessità 800000 600000 400000 200000 0 1 2 3 4 5 6 7 Cardinalità Complessità reale B(n) 1000 Complessità 800 600 400 200 0 1 2 3 4 5 6 7 Cardinalità n Figura 22 Confronto tra la complessità esponenziale, n e quella dovuta ai numeri di Bell 27 Osservando i tre grafici precedenti si nota che la complessità B(n) è inferiore a quella massima precedentemente descritta, quindi si potrebbe pensare che il problema in questione sia risolvibile in maniera completa. In realtà come si vede confrontando il terzo grafico con il primo si nota che la complessità è sì inferiore a quella di ordine nn, ma è di gran lunga superiore a quella di un esponenziale. Il problema quindi per insiemi con elevata cardinalità risulta irrisolvibile applicando una ricerca di tipo esaustivo. RICERCA ESAUSTIVA PER INSIEMI CON PICCOLA CARDINALITA’ Come è stato detto nel paragrafo precedente, data la complessità computazionale del problema, è stata implementata una ricerca esaustiva dell’ottimo per insiemi con piccola cardinalità. Un approccio di questo tipo non risulta del tutto inutilizzabile poiché spesso dopo l’applicazione preventiva dell’algoritmo di RANK ORDER AND CLUSTERING si ha un ridimensionamento delle celle base. Il core dell’algoritmo per la ricerca esaustiva è costituito dalla procedura che si occupa, dato un insieme con cardinalità n, di trovare tutte le possibili B(n) partizioni. L’idea di base dell’algoritmo ricalca in un certo senso la formula per il calcolo iterativo dei numeri di Bell : ( + 1) = ∑ (eq.10) Dato un insieme con cardinalità n, per costruire tutte le possibili partizioni, si parte considerando un insieme costituito solo dal primo degli n elementi e poi si incrementa l’insieme aggiungendo il secondo e il terzo elemento, arricchendo in tal modo il numero delle partizioni. Un esempio pratico è riportato di seguito. Esempio Dato un insieme A = {1,2,3} con cardinalità pari a 3 per trovare tutte le possibili B(3) = 5 partizioni si procede nel seguente modo: Si considera un insieme formato solo dal primo elemento dei tre, quindi A1={1}. La cardinalità di tale insieme è uno, quindi si alloca uno spazio in memoria Nello spazio allocato viene inserito l’elemento dell’insieme A1:come mostrato nella figura sottostante: {1} Si considera il secondo elemento quindi l’insieme A2 sarà formato da {1,2}. La cardinalità dell’insieme è pari a 2. Quindi si allocano due spazi in memoria. Nel primo spazio si inserisce la partizione ottenuta precedentemente lasciando vuoto il secondo spazio. Si ottiene quindi una situazione di questo tipo: 28 {1}{} * Una procedura conta quanti insiemi pieni vi sono nella riga sopra mostrata e imposta l’ indice d’iterazione con il valore ottenuto più 1. Il valore dell’indice d’iterazione è due. Nella prima iterazione partendo sempre dalla riga * si immette nel primo insieme il secondo elemento di A2 e si lascia vuoto il secondo insieme. Nella seconda iterazione, considerando sempre la riga *, si immette il secondo elemento di A2 nell’insieme con lo stesso indice dell’indice d’iterazione (quindi nell’insieme vuoto). L’indice d’iterazione è arrivato al suo massimo valore e le righe costruite rappresentano tutte le partizioni possibili dell’insieme A2. Il risultato ottenuto è il seguente: {1,2} {} {1} {2} Si considera quindi il terzo elemento di A e si costruisce in modo analogo ad A2 l’insieme A3 = {1,2,3}. Come si nota l’insieme A3 coincide con l’insieme A. Come si è detto precedentemente l’insieme A ha cardinalità pari a tre quindi sarà necessario allocare tre spazi. Dal momento che precedentemente vi erano due righe sarà necessario allocare due righe con tre spazi. La situazione che si andrà a verificare sarà la seguente: {1,2} {} {1} {} *1* {2} {} *2* La stessa procedura utilizzata in precedenza conta nella riga *1* quanti insiemi pieni vi sono e imposta l’indice d’iterazione allo stesso valore più 1. Il valore dell’indice d’iterazione è ancora una volta 2. Nella prima delle due iterazioni dovute alla riga *1* si immette nell’insieme con indice pari all’indice d’iterazione il terso elemento dell’insieme A3 e si lasciano vuoti gli altri due. Come fatto in precedenza si incrementa l’indice d’iterazione e considerando sempre la medesima riga si va a riempire con il terzo elemento di A3 l’insieme con indice pari a quello d’iterazione. Il risultato che si ottiene dopo le due iterazioni sulla prima riga è il seguente: {1,2,3}{} {} {1,2} {3} {} 29 Si ripete la procedura utilizzata sulla riga *1* sulla riga *2*. L’indice d’iterazione in questo caso risulta pari a 3. Alla prima iterazione si inserisce quindi il terzo elemento di A3 nel primo insieme della riga *2*, alla seconda iterazione si inserisce il terzo elemento di A3 nel secondo insieme della medesima riga e alla terza ed ultima iterazione si inserisce il terzo elemento di A3 nel terzo insieme. Finite quindi le iterazioni consentite dalla riga *2* si genera il seguente risultato: {1,3} {2} {} {1} {2,3} {} {1} {2} {3} Dal momento che le righe di partenza erano due e che le iterazioni previste per ciascuna riga sono state eseguite, l’algoritmo termina restituendo come risultato finale lo sviluppo di entrambe le righe: {1,2,3}{} {} {1,2} {3} {} {1,3} {2} {} {1} {2,3} {} {1} {2} {3} Le righe mostrate sopra rappresentano tutte le possibili partizioni attuabili su A3, e visto che si è detto che A3 coincide con A queste rappresentano il risultato finale desiderato. 30 RICERCA STATISTICA DELL’ OTTIMO OTTIMIZZAZIONE ORDINALE Dal momento che non è sempre possibile applicare l’algoritmo per la ricerca esaustiva è necessario introdurre un metodo alternativo di validità più generale. Data la complessità computazionale del problema il miglior modo per garantire una soluzione che si discosti di una quantità controllabile da quella ottimale è quello di affrontarlo da un punto di vista statistico. L’approccio che verrà preso in considerazione in questo paragrafo è quello dell’ottimizzazione ordinale. Le idee base dell’ottimizzazione ordinale sono principalmente due: 1. E’ sufficiente compiere brevi simulazioni per valutare il rapporto reciproco tra due grandezze anziché valutare il valore numerico delle stesse, cioè è più semplice stabilire se un indice è maggiore o inferiore ad un altro piuttosto che ricavare il preciso valore di entrambi. E’ possibile sfruttare tale considerazione notando che la probabilità di trovare la stima di un valore, che sia compresa tra due valori fissati, converge esponenzialmente ad 1 con l’aumentare della durata della simulazione. 2. Quando la cardinalità dell’insieme contenente tutte le possibili scelte è molto grande, la probabilità di pescare in sul colpo la scelta ottima da tale insieme è molto piccola, per esempio se l’insieme ha cardinalità 100000 la probabilità di avere la scelta ottima con una sola estrazione è 1/100000 (praticamente nulla). Se invece si restringe la richiesta di base, e ci si accontenta di pescare dall’insieme considerato una scelta che sia nel primo 10% delle migliori scelte, la probabilità di trovare una scelta con tali caratteristiche è del 10%. Come è semplice constatare tale probabilità è sensibilmente più elevata della precedente, ed inoltre spesso il valore ottenuto non si discosta di molto dall’ottimo reale. Tenendo conto della seconda considerazione sopra riportata sembra essere abbastanza semplice estrarre un valore sub-ottimo da insiemi di cardinalità molto elevata; infatti la probabilità di non trovare un valore desiderato con l’aumentare delle simulazioni è davvero molto bassa: ̅= 1− % (eq.11) Dove ̅ è la probabilità di non ottenere un valore desiderato nel range dei valori scelto, x% è la grandezza del range di ottimalità scelto, x è la grandezza totale dell’insieme e n è il numero d’iterazioni. Facendo un esempio numerico, per trovare l’ottimo di un insieme di cardinalità 7 sarebbe necessario calcolare B(7) costi = 877 costi. Per scegliere invece una disposizione dei 31 macchinari il cui costo sia nel primo 10% dei migliori costi ottenibili, già con un numero di confronti pari a 50. Con tale numero di iterazioni si ottiene una probabilità di non riuscita dell’evento pari allo 0,51%: ̅ = 1− 87,7 877 = 0,005153 Praticamente con un decimo delle iterazioni si ha la certezza di avere una disposizione dei macchinari sub-ottima che sia nel 10% delle migliori scelte possibili. Per dare un’idea migliore della situazione è riportato di seguito un esempio fatto su di un insieme con cardinalità cinque del tipo {A,B,C,D,E} Esempio Data la seguente matrice d’incidenza, rappresentante un sistema in cui vengono lavorate cinque parti da cinque macchinari , e i relativi costi dei macchinari, si effettua un ROC preventivo per verificare se vi è la possibilità di una suddivisione cellulare a priori 1 2 3 4 5 A 1 1 0 0 0 B 0 1 1 0 1 C 1 0 0 1 1 D 0 0 1 0 0 E 0 0 0 1 0 1 2 3 4 5 ROC A 1 1 0 0 0 B 1 0 1 1 0 C 0 1 1 0 1 D 0 0 0 1 0 E 0 0 0 0 1 Macchinari Costo macchinari 1 2 3 4 5 1,4 1,3 1,6 1,1 1,2 Figura 23 Rappresentazione del sistema mediante matrice d’incidenza e costo dei macchinari espresso in unità di costo. Nella parte destra vi è La matrice d’incidenza dopo l’algoritmo di RANK ORDER AND CLUSTERING Come si vede chiaramente nella matrice di destra l’algoritmo di RANK ORDER AND CLUSTERING non riesce a trovare alcuna cella, quindi per abbassare il costo dell’impianto risulta necessario ricorrere a uno dei due metodi sopra descritti ( Ricerca esaustiva o Ottimizzazione ordinale). In questo caso sarebbe molto semplice applicare una ricerca esaustiva poiché la complessità del sistema è bassa poiché B (5) = 52 ma nel nostro esempio verrà applicata la ricerca ordinale per mostrare l’efficacia di questa soluzione. 32 Rappresentando sulle ascisse di un sistema cartesiano tutte le partizioni possibili e sulle ordinate tutti i costi possibili relativi alle partizioni si ottiene una distribuzione di questo tipo Figura 24 Esempio di rappresentazione cartesiana della distribuzione dei costi per un sistema composto da cinque parti Se si pensasse ipoteticamente di poter ordinare i costi ottenuti dal più grande al più piccolo si otterrebbe la distribuzione seguente Figura 24 Rappresentazione cartesiana della distribuzione dei costi ordinata in maniera decrescente Come è evidenziato in rosso nella figura, scegliere una soluzione che si trova nel primo 10% delle migliori comporta un errore sul costo ottimo abbastanza piccolo e quindi in casi con una complessità molto elevata un ottimo rapporto tra scelta finale e tempo di risoluzione del problema. 33 APPLICAZIONE OTTIMIZZAZIONE ORDINALE AL PROBLEMA Applicando l’ottimizzazione ordinale ad un sistema con una complessità di soluzione abbastanza elevata si otterrà sempre un risultato molto simile come configurazione a quello della ‘Figura 24’ poiché generalmente la fascia tra cui oscilla il costo minimo e quello massimo del sistema è molto limitata, mentre quella delle possibili partizioni è molto ampia. Inoltre se si guarda con attenzione l’andamento della parte iniziale e di quella finale della distribuzione, come mostrato nella ‘Figura 25 e 25 bis’, si nota un brusca diminuzione dei costi nella prima parte e un appiattimento degli stessi nella seconda. Questo fa sì che la soluzione che si ottiene dall’ottimizzazione ordinale sia decisamente migliorativa e molto poco lontana da quella ottima. Figura 25-25 bis A sinistra e a destra rispettivamente zoom della parte iniziale e finale della distribuzione di costo ordinata Gli andamenti riportati sopra potrebbero sembrare andamenti particolari invece essi risultano comuni ad una discreta varietà di sistemi. Questa similitudine avviene principalmente per due motivi: 1. Come è stato esposto in precedenza, le possibili partizioni occupano un insieme di cardinalità molto più elevato di quello dei possibili costi. 2. Se i costi dei macchinari sono comparabili, come nel caso precedente, con i costi dovuti alla complessità cellulare lo sdoppiamento di macchinari risulta spesso molto migliorativo. Analizzando i due punti si capisce immediatamente che il punto 1. è il responsabile dello schiacciamento del grafico, mentre dal punto 2. dipende la brusca diminuzione iniziale del costo e, anche se in piccola parte, l’appiattimento della distribuzione delle soluzioni a minor costo. 34 DISTRIBUZIONE DELLA PROBABILITÀ INTRODUZIONE Per garantire un corretto funzionamento dell’ottimizzazione ordinale è necessario che le estrazioni casuali delle varie combinazioni di parti con cui costruire le celle del sistema avvengano in maniera equidistribuita, altrimenti si rischia di falsare in modo incontrollabile, almeno apparentemente, la probabilità di non riuscita dell’evento ( quella che è stata definita in precedenza come ̅ ). Talvolta potrebbe anche risultare utile cercare di influenzare la scelta delle parti, falsando quindi l’equiprobabilità delle estrazioni, ma i risultati ottenibili variano di caso in caso. Per il nostro problema verranno presi in esame due tipi di approccio, quello equidistribuito e quello con la probabilità di scelta falsata (polarizzata), e verranno messi a confronto i due risultati. PROBABILITÀ EQUIDISTRIBUITA Come si è detto in precedenza per garantire le proprietà dell’ottimizzazione ordinale è necessario avere equiprobabilità nella scelta delle varie partizioni possibili. Ottenere una distribuzione uniforme sembrerebbe in prima istanza banale ma in realtà risulta essere molto complicato poiché minimi eventi possono variare la probabilità finale di ciascuna scelta. Per garantire tale proprietà è stata utilizzata l’idea dell’ algoritmo ideato dal matematico Herbert S. Wilf. ALGORITMO PER L’ESTRAZIONE EQUIPROBABILE DI PARTIZIONI DI ORDINE K L’algoritmo di Wilf restituisce una delle possibili partizioni di ordine k compiuta su di un iniseme costituito da n elementi. Le partizioni sono restituite in maniera posizionale, cioè se l’insieme è composto ad esempio da 4 elementi {A,B,C,D} e l’ordine di partizione è ad esempio 2, una delle possibili partizioni restituite sarà del tipo {1,2,1,1} cioè gli elementi {A, C, D} appartengono a un sottoinsieme e {B} appartiene all’altro sottoinsieme. Per il corretto funzionamento dell’algoritmo è necessario avvalersi di una procedura capace di calcolare i numeri di Stirling di seconda specie. Wilf nel suo testo “East West” ha proposto un metodo ricorsivo per il calcolo di tali numeri. Ma poiché in linguaggi non precompilati come MATLAB la ricorsione causa enormi rallentamenti, in questo testo, oltre all’implementazione base è presentata una variante che calcola tali numeri mediante un’ approssimazione della distribuzione. Questo metodo crea un grandissimo aumento delle prestazioni ma si rivela poco preciso per il calcolo dei numeri di Stirling di seconda specie per insiemi con cardinalità superiore a 24. Di seguito, scritte in pseudo codice, vengono riportate le due versioni dell’algoritmo: STIRLING_DIR ( n, k ) ritorna E( n, k ) / k! dove ( , )=∑ (−1) ( − 1) 35 STIRLING_RIC ( n, k ) SE n<1 restituisci 0 ALTRIMENTI SE n=1 SE k<1 oppure k>1 restituisci 0 ALTRIMENTI restituisci 1 ALTRIMENTI restituisci STIRLING_RIC( n-1, k-1 ) + k*STIRLING_RIC( n-1, k ) Come è facile notare, l’algoritmo ricorsivo sopra presentato, ricalca in maniera esplicita l’enunciato del teorema precedentemente riportato riguardante i numeri di Stirling di seconda specie. L’algoritmo, in pseudocodice, che fornisce una possibile partizione di ordine k dell’insieme formato da n elementi è il seguente: CREA_PARTIZIONE ( n , k ) SE n = 1 SE k > 1 o k < 1 restituisci = [ insieme vuoto ] ALTRIMENTI restituisci = [ partizione con dentro 1] ALTRIMENTI SE random (numero reale tra 0 e 1) < #Stirling ( n-1, k-1 ) / #Stirling ( n, k ) restituisci [CREA_PARTIZIONE(n-1,k-1), k] ALTRIMENTI Restituisci [CREA_PARTIZIONE ( n-1, k ), RANDOM (numero intero tra 1 e k)] 36 L’algoritmo presentato è di tipo ricorsivo, quindi come tale risulta essere ripartito in due parti: 1. La parte verde rappresenta il caso base, cioè quello capace di far terminare la ricorsione. 2. La parte blu rappresenta la ricorsione. Questa parte è a sua volta bipartita e in ciascuna delle sue parti, a seconda del risultato ottenuto dal “se” viene richiamata la procedura con argomenti differenti. Per analizzare al meglio l’algoritmo risulta quindi utile concentrarsi separatamente su ciascuna delle due parti. Per quanto concerne la prima parte si nota che vi sono due casi: quello possibile in cui si ha un insieme con cardinalità 1 e si vuole fare un unico raggruppamento, quindi k = 1, e quello che rappresenta l’errore, cioè quello in cui si ha un insieme con cardinalità 1 e si desidera fare un numero di raggruppamenti k ≠ 1. La seconda parte, il cuore dell’algoritmo, è a sua volta ripartita in due casi ciascuno dei quali viene preso in considerazione in base al risultato ottenuto dalla condizione espressa dalla prima riga in blu. Per capire a fondo il funzionamento complessivo è quindi necessario prestare attenzione alla condizione precedentemente menzionata: random (numero reale tra 0 e 1) < #Stirling ( n-1, k-1 ) / #Stirling ( n, k ) A sinistra del segno di minore vi è un generatore di numeri casuali il quale genera, come esplicitato tra parentesi, numeri reali compresi tra 0 ed 1. A destra invece vi è il rapporto, sempre minore o al massimo uguale ad 1, tra il numero di Stirling di seconda specie (n,k-1) e lo stesso calcolato su (n,k). Il perché della scelta di tale rapporto risiede nel fatto che esso tiene conto del numero di scelte possibili che si hanno nel cercare di volta in volta di allocare un elemento in una partizione piuttosto che in un’altra. Tale rapporto confrontato con il generatore di numeri random riesce a bilanciare, grazie alla giusta chiamata ricorsiva, la probabilità d’inserimento di ciascun elemento, in modo che alla fine la probabilità con cui si scelga una possibile partizione di ordine k, sia del tutto analoga a quella con cui si sarebbe scelta un’altra partizione avente lo stesso ordine. Per maggiore chiarezza e semplicità di seguito è riportato uno spaccato della tabella di Stirling riguardante i numeri di seconda specie e una spiegazione pseudo grafica del funzionamento sopra descritto: n\k 0 1 2 3 4 5 0 1 0 0 0 0 0 1 2 3 4 5 1 1 1 1 1 1 3 7 15 1 6 25 1 10 1 Figura 26 Spaccato della tabella rappresentante i numeri di Stirling di seconda specie 37 Al fine di comprendere pienamente l’utilizzo del rapporto è utile distinguere tre differenti casistiche: 1. Il rapporto è pari a 1. 2. Il rapporto è compreso tra 0.5 e 1. 3. Il rapporto è compreso tra 0 e 0.5 La situazione numero 1 si verifica quando si cerca di partizionare un insieme di n elementi o in k = 1 partizioni o in k = n partizioni. Con questo risultato l’algoritmo chiama quasi sempre la prima istruzione e di conseguenza le chiamate ricorsive avvengono sempre sulla diagonale della tabella sopra riportata. La prima istruzione non fa altro che creare un vettore in cui inserisce la grandezza della partizione con cui è stata chiamata la funzione ( quindi il sottoinsieme a cui apparterrà il primo elemento dell’insieme base ) e completare il resto del vettore richiamando la procedura su di un insieme più piccolo con un ordine di partizione minore di una unità. Se casualmente venisse chiamata la seconda istruzione, in questo caso, si avrebbe un risultato del tutto simile, con l’unica differenza che l’elemento che si andrebbe ad inserire sarebbe scelto casualmente tra 1 e k. Per quanto concerne le situazioni 2. e 3. si può notare una certa dicotomia poiché entrambe esprimono in maniera opposta situazioni in cui c’è un discostamento dal valore di equiprobabilità 0.5. L’algoritmo in entrambi i casi cerca di penalizzare o favorire l’ inserimento di un elemento in un sottoinsieme piuttosto che in un altro e con l’utilizzo della ricorsione cerca di dirigere le scelte future in modo che al passaggio di ricorsione successivo, il rapporto si avvicini il più possibile al valore di equiprobabilità 0.5. ESTRAZIONE EQUIPROBABILE DI PARTIZIONI Per ottenere la soluzione desiderata, cioè un algoritmo che date ‘s’ iterazioni estragga ‘s’ modi diversi di partizionare l’insieme con cardinalità n, è necessario che di volta in volta si passi correttamente alla proceduta, precedentemente descritta, il parametro k. Se si passasse in maniera casuale , scegliendolo tra 1 e k, si otterrebbe una distribuzione polarizzata. Questo avviene poiché attuando una scelta di questo tipo è come se si affermasse che il numero di partizioni di un qualsiasi ordine è identico al numero di partizioni di un qualsiasi altro ordine, mentre come è evidente dalla tabella rappresentata in Figura 26 non è così. Al fine di risolvere questo problema è quindi necessario effettuare la scelta del k adattando il selettore random in modo che tenga conto delle diverse cardinalità di ciascun ordine di partizione. Un modo per risolvere il problema è quello di creare un vettore ‘E’ di dimensione pari alla cardinalità degli elementi dell’insieme più una unità e di riempire progressivamente le posizioni k-esime dello stesso utilizzando la seguente formula: E ( k+1) = E (k) + S (n,k) / B (n) , E(1) = 0 (eq.12) 38 Successivamente si sfrutta il selettore di numeri random per ottenere un numero reale compreso tra 0 ed 1 e si confronta progressivamente, partendo dalla posizione 0, con gli elementi presenti nel vettore. Quando il numero selezionato risulta maggiore di un elemento del vettore, si blocca il confronto e, si imposta k pari all’indice dell’elemento considerato. Questo confronto con il vettore base deve essere iterato per ciascuna estrazione in modo da pesare opportunamente la scelta dei vari ordini di partizione. Per far si che questo metodo sia funzionale è necessario implementare una procedura in grado di calcolare i numeri di Bell. Anche in questo caso la soluzione ricorsiva risulta poco efficace, per i linguaggi non precompilati come MATLAB. Si potrebbe quindi scegliere di ottenere tali numeri mediante la sommatoria dei numeri di Stirling di seconda specie calcolati seguendo l’algoritmo non ricorsivo (si ricorda che B(n) non è altro che la sommatoria degli elementi presenti nella riga n-esima della tabella di Stirling relativa ai numeri di seconda specie). Allo scopo di avvalorare i risultati ottenuti sono state compiute due simulazioni con 30000 estrazioni su insiemi di cardinalità rispettivamente pari a 4 e a 5 in modo da poter apprezzare la reale equiprobabilità della distribuzione. Esempio 1 Considerando un insieme di cardinalità quattro del tipo {A,B,C,D} su 30000 estrazioni di possibili partizioni si ottiene la seguente distribuzione: Numero di Estrazioni Distribuzione della probabilità su di un insieme con cardinalità pari a 4 del tipo {A,B,C,D} (simulazione effettuata su 30000 estrazioni) 2060 2040 2020 2000 1980 1960 1940 1920 1900 1880 1860 Partizioni Possibili Figura 27 Distribuzione di probabilità su 3000 campioni del partizionatore equidistribuito su di un insieme di cardinalità pari a 4 39 Come si nota a meno di piccole variazioni la distribuzione tra le varie possibili partizioni è decisamente casuale. Esempio 2 Considerando un insieme di cardinalità cinque del tipo {A,B,C,D,E} su 30000 estrazioni di possibili partizioni si ottiene la seguente distribuzione: Figura 28 Distribuzione di probabilità su 3000 campioni del partizionatore equidistribuito su di un insieme di cardinalità pari a 5 Anche in questo caso come nel precedente l’oscillazione è abbastanza contenuta anche se proporzionalmente un po’ meno poiché il numero di campioni è circa il quadruplo mentre il numero di estrazioni è invariato In conclusione si può tranquillamente affermare che non vengono privilegiate classi di partizioni rispetto ad altre. PROBABILITÀ POLARIZZATA Come si è detto in precedenza è stato ideato un algoritmo per l’estrazione polarizzata di possibili partizioni in insiemi di cardinalità qualsiasi. I risultati ottenuti da questo algoritmo, mediante simulazioni, saranno successivamente confrontati con i risultati ottenuti da quello precedente (equidistribuito). Di seguito viene riportata l’idea di base su cui è fondato tale algoritmo e degli 40 esempi esplicativi che consentano di visualizzare la distribuzione di probabilità del medesimo. L’algoritmo per la scelta della partizione si articola in due step: Step 1: Dato l’insieme delle parti da partizionare si effettua una permutazione casuale su di esso in modo da ottenere un nuovo insieme contenente gli stessi elementi dell’insieme di partenza ma con ordine diverso. Step 2: Si scorre l’insieme permutato e per ogni elemento, tramite un algoritmo generatore di numeri casuali, si simula il lancio di una moneta, generando quindi in maniera equiprobabile i valori 0 ed 1. Se il risultato ottenuto dal ‘lancio’ è 0 l’elemento considerato appartiene allo stesso sottoinsieme dell’ elemento precedente, altrimenti se è 1 appartiene ad un altro sottoinsieme. Naturalmente per il primo elemento si fa un’eccezione poiché obbligatoriamente dovrà appartenere al primo sottoinsieme. Per maggiore chiarezza espositiva si riporta di seguito un funzionamento di tale algoritmo. piccolo esempio pratico sul Esempio Considerato un insieme di cardinalità pari a cinque del tipo {A,B,C,D,E} e considerando una sola iterazione (per n iterazioni è sufficiente replicare la procedura sotto elencata), l’algoritmo agisce nel seguente modo: Step 1: Si effettua una permutazione casuale sugli elementi dell’insieme. Si potrebbe ottenere ad esempio un risultato del tipo {D,B,C,E,A}. Step 2: si lancia la moneta virtuale per tutti gli elementi tranne che per il primo. Supponendo che la serie di lanci produca una combinazione del tipo [ 0, 1, 1, 0 ] , la partizione dell’insieme permutato che si otterrà sarà quindi: {D,B}{C}{E,A} Si potrebbe pensare in prima istanza che un algoritmo così strutturato permetta di generare partizioni equiprobabili ma come si dimostrerà, sia tramite simulazioni che per via analitica, ci sono delle partizioni che vengono privilegiate rispetto ad altre. 41 DIMOSTRAZIONE ANALITICA DELLA POLARIZZAZIONE Per dimostrare la polarizzazione della probabilità è necessario dimostrare che esiste almeno una scelta effettuata dall’algoritmo, tale che abbia una probabilità diversa da quella che si avrebbe nel caso equamente distribuito (cioè quella che si avrebbe per una qualsiasi scelta): ⁆ | () = ( ) ≠ ( ) (eq.13) Dove pequa(i) rappresenta la probabilità equidistribuita di estrarre la i-esima partizione, B(n) il numero di Bell di ordine n e ppolarizzata(i) la probabilità di estrazione della partizione i-esima mediante l’algoritmo considerato. Per trovare una partizione per cui non venga rispettata l’equiprobabilità è sufficiente concentrarsi sulla partizione di ordine k = n, la quale essendo unica non subisce variazioni di probabilità neanche a seguito della permutazione iniziale. La probabilità che essa venga estratta da un insieme con cardinalità n è la seguente: ( ) = (eq.14) Tale formula è giustificata dal fatto che per avere una partizione di ordine n è necessario che la moneta virtuale nei suoi successivi lanci generi una combinazione di questo tipo [11 12 13 1n-2 1n-1]. La probabilità che questo avvenga è quindi: [ … ] = = (eq.15) Come si può notare dalle dimostrazioni fatte in precedenza (Figura 22) è ben lontana dall’inverso della complessità del problema. Facendo un breve esempio si potrebbe pensare ad un insieme con cardinalità 5. La probabilità equidistribuita di ottenere una partizione di ordine k = n è uguale, come è stato precedentemente detto 1/ B(n) = 1/52 mentre nel caso della probabilità polarizzata si otterrebbe 1/16 ben diverso da 1/52. Per fissare maggiormente le idee proposte in questa dimostrazione sono state compiute due simulazioni, come nel caso di probabilità di estrazione equidistribuita, su due insiemi di cardinalità rispettivamente quattro e cinque. 42 Esempio 1 Considerando un insieme di cardinalità quattro del tipo {A,B,C,D} su 30000 estrazioni di possibili partizioni si ottiene la seguente distribuzione: Distribuzione della probabilità su di un insieme con cardinalità pari a 4 del tipo {A,B,C,D} (simulazione effettuata su 30000 estrazioni) Numero di estrazioni 4000 3500 3000 2500 2000 1500 1000 500 0 Partizioni Possibili Figura 29 Distribuzione di probabilità su 3000 campioni del partizionatore polarizzato su di un insieme di cardinalità pari a 4 Si può notare, come già annunciato dalla dimostrazione precedente, che vengono privilegiate le partizioni di classe k = n e per analogo ragionamento quelle di classe k = 1 (entrambe uniche in tutti i casi non degeneri possibili). Come fatto anche nel caso precedente risulta interessante ripetere la simulazione su di un esempio di cardinalità maggiore. Per avvalorare ciò che è stato detto nella precedente dimostrazione anche in questo caso dovrebbe esserci un privilegiamento delle partizioni dovute a combinazioni testa-croce monovalore. Naturalmente con grande probabilità le combinazioni precedentemente citate non saranno le uniche ad essere privilegiate ma vi sarà come nel caso equidistribuito un’oscillazione di fondo nella parte centrale, decisamente meno attenuata, dal momento che il metodo in questione non è equiprobabile. 43 Esempio 2 Considerando un insieme di cardinalità quattro del tipo {A,B,C,D,E} su 30000 estrazioni di possibili partizioni si ottiene la seguente distribuzione: Figura 30 Distribuzione di probabilità su 3000 campioni del partizionatore polarizzato su di un insieme di cardinalità pari a 5 Come è stato preannunciato il risultato ottenuto è molto simile alle aspettative. Le due sovraelongazioni laterali simmetriche esprimono esattamente ciò che è stato dimostrato in precedenza e l’ondulazione centrale rafforza la non equiprobabilità del metodo in questione. Bisogna tener però presente che un metodo di questo genere, pur essendo polarizzato e non pienamente equiprobabile, non esclude in maniera categorica classi di scelte; potrebbe essere visto quindi, come un compromesso tra l’equiprobabilità e la polarizzazione totale. COMPLESSITA’ COMPUTAZIONALE : ALGORITMI DI OTTIMIZZAZIONE Per analizzare i metodi precedentemente presentati, oltre ad un’analisi da un punto di vista di distribuzione probabilistica è interessante, come fatto per l’analisi esaustiva, valutare il loro costo computazionale. Tale analisi risulta molto importante ai fini dell’applicazione pratica poiché da questa dipende il tempo di esecuzione di ciascun algoritmo. Per quanto concerne l’ottimizzazione ordinale equidistribuita è necessario considerare due fattori : la scelta dell’ordine di partizione k e la 44 ricorsione all’interno della procedura. La complessità dei due fattori precedentemente esposti è rispettivamente n e 2n : il primo deriva dalla necessità di compiere al più n confronti per capire l’ordine di partizione da scegliere , il secondo dalla ricorsione e dallo srotolamento della medesima che al più ha lunghezza n (quindi il totale al massimo è 2n). L’ordine di complessità di tale procedura è quindi O(n), per la precisione 3n. Per quanto concerne invece l’algoritmo polarizzato il fattore da considerare è uno solo, poiché data la permutazione di base è necessario scegliere solamente l’appartenenza o la non appartenenza di ciascun elemento a un dato sottoinsieme. Tale procedura è effettuabile con un costo computazionale non superiore ad n. Anche questo algoritmo ha quindi una complessità nell’ordine di O(n), per la precisione n. Di seguito si riporta un grafico rappresentante i tempi di simulazione su sistemi con insiemi di parti con cardinalità crescente da 1 a 9, ottenuti considerando l’algoritmo di ottimizzazione polarizzato con complessità n, quello equidistribuito con complessità 3n e quello esaustivo con complessità B(n) Figura Andamenti temporali dei vari algoritmi per la ricerca dell’ottimo Come si nota dalla figura gli andamenti temporali rispecchiano bene le considerazioni fatte sulla complessità computazionale dei singoli algoritmi. 45 SIMULAZIONI Simulazione 1 Per effettuare questa simulazione si è preso in esame un sistema produttivo costituito da 9 parti lavorate da 9 macchinari, ognuno dei quali ha un costo di acquisto. Si richiede di trovare la configurazione macchine- parti che permetta di minimizzare il costo del sistema, considerando che il suo costo base è di 176,2. Di seguito è riportata la matrice d’incidenza che esprime i mutui rapporti macchine-parti affiancata alla matrice dei costi esprimente appunto i costi dei singoli macchinari. 1 2 3 4 5 6 7 8 9 A 1 1 0 0 0 1 0 1 0 B 0 0 0 0 0 1 1 0 0 C 1 0 0 1 1 0 0 1 1 D 0 0 0 0 0 0 1 0 1 E 0 1 0 1 1 0 0 1 0 F 0 1 0 0 0 1 1 0 0 G 0 0 1 0 0 0 0 0 1 H 0 0 1 1 1 0 0 1 0 I 0 0 1 0 1 1 0 1 0 Macchinari Costo macchinari 1 2 3 4 5 6 7 8 9 1,4 1,3 1,8 1,6 1,8 1,5 1,2 1,7 1,9 Figura 31 Matrice d’incidenza rappresentante il sistema con relativa tabella inerente ai costi dei macchinari Come si è già visto in precedenza un problema di questo tipo ha una complessità data dal numero di Bell della cardinalità degli elementi che costituiscono l’insieme parti. Si può quindi affermare che la complessità di questo problema è data da B (9) = 21147. Dal momento che i casi da analizzare non sono moltissimi si può compiere un’analisi esaustiva per trovare la soluzione ottima al problema. Come precedentemente descritto si procede applicando alla matrice l’algoritmo di RANK ORDER AND CLUSTERING per cercare di diminuire preventivamente la complessità da affrontare. Di seguito è riportata la matrice, e i relativi costi dei macchinari, dopo l’applicazione dell’algoritmo d’ordinamento. 6 8 2 1 5 3 7 4 9 A 1 1 1 1 0 0 0 0 0 I 1 1 0 0 1 1 0 0 0 E 1 0 1 0 0 0 1 0 0 B 1 0 0 0 0 0 1 0 0 H 0 1 1 0 1 0 0 1 0 C 0 1 0 1 1 0 0 1 1 G 0 1 0 0 1 1 0 1 0 F 0 0 0 0 0 1 0 0 1 D 0 0 0 0 0 0 1 0 1 Macchinari Costo macchinari 6 8 2 1 5 3 7 4 9 1,5 1,7 1,3 1,4 1,8 1,8 1,2 1,6 1,9 Figura 32 Matrice d’incidenza e tabella dei costi dei macchinari ordinate a seguito dell’applicazione del ROC 46 Come si può notare dalla figura sovrastante l’algoritmo non ha prodotto alcun risultato, di conseguente si deve procedere creando tutte le partizioni possibili ed analizzando il costo di ciascuna. Tramite l’algoritmo implementato per l’analisi esaustiva si ottiene il seguente risultato: 8 5 4 3 1 9 2 6 3 9 6 7 2 7 9 H 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 C 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 E 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 I 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 A 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 H 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 F 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 B 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 D 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 Macchinari Costo macchinari 8 5 4 3 1 9 2 6 3 9 6 7 2 7 9 1,7 1,8 1,6 1,8 1,4 1,9 1,3 1,5 1,8 1,9 1,5 1,2 1,3 1,2 1,9 Figura 33 Matrice d’incidenza rappresentante la soluzione ottima e relativa tabella costi dei macchinari Il costo della soluzione ottenuta è di 135,8 quindi come è facile notare facendo un semplicissimo calcolo si è ottenuta una riduzione del costo di circa il 23%. Il tempo impiegato dall’algoritmo per risolvere un problema di tale dimensioni è di 3 minuti e 34 secondi, un tempo ancora ragionevole ma dovuto ad una cardinalità non eccessivamente elevata dell’insieme di parti. Come si è detto in precedenza la complessità aumenta più che esponenzialmente e quindi l’unico approccio attuabile è un approccio di tipo statistico. In questo caso, in cui si è trovata una soluzione esaustiva potrebbe essere interessante confrontarla con quella ottenibile dai metodi precedentemente esposti in modo da poter valutare la bontà di questi per la risoluzione di problemi ben più complessi. Si inizierà quindi il confronto prendendo in considerazione la soluzione ottenuta mediante l’utilizzo della probabilità equidistribuita. Una richiesta che potrebbe essere molto performante potrebbe essere quella di fissare il valore di costo richiesto nel migliore 0.1%. Per ottenere quasi con certezza che questo avvenga è necessario compiere un numero di simulazioni pari a 10000. Di seguito si calcolerà la probabilità che si verifichi l’evento con il numero di estrazioni scelto: = 100% − ̅ = 1 − (1 − 0.01) = 0.99995 = 99,995% Come si vede dal calcolo sopra riportato l’evento desiderato avverrà quasi con certezza assoluta. 47 Bisogna tenere inoltre presente che avendo una probabilità così elevata, con ottime speranze si avrà un risultato ancora migliore di quello desiderato. L’algoritmo per l’ottimizzazione ordinale equidistribuita, come fatto in precedenza, comincia l’analisi applicando l’algoritmo di RANK ORDER AND CLUSTERING. Dal momento che l’applicazione dell’algoritmo non produce nuove celle la procedura inizia a creare, analizzandone il costo, le 10000 partizioni richieste. Il risultato ottenuto da tale metodo è il seguente: 18 12 11 16 15 14 19 18 15 13 16 14 16 17 12 13 19 17 19 11 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 13 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 18 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 Macchinari Costo macchinari 18 12 11 16 15 14 19 18 15 13 16 14 16 17 12 13 19 17 19 1,7 1,3 1,4 1,5 1,8 1,6 1,9 1,7 1,8 1,8 1,5 1,6 1,5 1,2 1,3 1,8 1,9 1,2 1,9 Figura 34 Miglior matrice d’incidenza ottenuta a seguito di 10000 iterazioni tramite l’algoritmo di ottimizzazione ordinale equidistribuita Il costo di questa configurazione è di 140,4 e il tempo di esecuzione impiegato per trovarla è di 2 minuti e 5 secondi. Come si nota si ha una diminuzione del tempo di esecuzione di circa il 30% e una perdita percentuale di ottimalità pari a circa il 2,5%. Il risultato ottenuto è quindi abbastanza buono, soprattutto perché bisogna tener presente che il tempo impiegato dall’algoritmo è in gran parte dovuto al numero di confronti e non alla cardinalità del sistema considerato. Di conseguenza per problemi più complessi la diminuzione percentuale relativa al tempo di soluzione aumenterà costantemente conservando però invariata la richiesta di ottimalità espressa dalla formula precedente. Per verificare che l’algoritmo abbia agito rispettando le aspettative precedentemente esposte è utile confrontare il valore di costo ottenuto con i costi presenti nel ‘best’ 0,1%. La cardinalità di questo insieme ‘best’ è data dalla seguente formula # = ( ) ∗ (% ) = 21147 ∗ 0.1% = 21,147 ≅ 21 48 Di seguito è riportata la tabella contente i best 0,1% costi ordinati in maniera crescete: posizione costo posizione costo posizione costo posizione costo 1 135,8 6 140,4 11 140,5 16 142,3 2 135,8 7 140,4 12 141,5 17 142,8 3 136,9 8 140,4 13 141,6 18 143,8 4 138,1 9 140,5 14 141,6 19 143,8 5 140,4 10 140,5 15 142,3 20 21 143,8 143,8 Figura 35 Tabella quadripartita rappresentante l’insieme dei migliori 0,1% costi ottenibili dalle varie configurazioni possibili. In giallo è evidenziato il costo ottenuto dall’esecuzione dell’algoritmo di ottimizzazione ordinale equidistribuita Come risulta evidente dalla tabella il valore ottenuto è nel campo desiderato e supera addirittura le aspettative dal momento che anziché essere uno dei migliori best 21 valori è uno dei migliori best 5. Come però già preannunciato questo è un evento possibile dal momento che la richiesta è di ricadere nell’insieme e non di scegliere un preciso valore all’interno di questo ( per curiosità la probabilità che si verificasse esattamente questo evento o uno migliorativo era del 36% ). Per completare l’analisi mostrata finora non resta altro che applicare al sistema dato l’algoritmo per l’ottimizzazione ordinale polarizzata. Come per la procedura precedente l’algoritmo in questione inizia provando il RANK ORDER AND CLUSTERING e non notando progressi comincia a cercare il costo migliore tra i 10000 che genererà secondo specifica. Il risultato ottenuto è il seguente: 17 16 19 18 15 14 12 11 19 13 16 16 12 17 13 19 12 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 13 0 0 0 1 1 1 0 1 1 0 0 0 0 0 0 0 18 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 19 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 11 0 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 Macchinari Costo macchinari 17 16 19 18 15 14 12 11 19 13 16 16 12 17 13 19 1,2 1,5 1,9 1,7 1,8 1,6 1,3 1,4 1,9 1,8 1,5 1,5 1,3 1,2 1,8 1,9 Figura 36 Miglior matrice d’incidenza ottenuta a seguito di 1000 iterazioni tramite l’algoritmo di ottimizzazione ordinale polarizzata 49 Il costo della configurazione ottenuta è 142,3 e il tempo impiegato dall’algoritmo per la soluzione del problema è 5,6 secondi. Come si può notare dai risultati il valore ottenuto è sempre contenuto nell’insieme dei ‘best’ 0,1% e la diminuzione del tempo di calcolo è di oltre il 97%. In prima approssimazione questo risultato è davvero molto buono e sembra discostarsi abbastanza dalla linea teorica tracciata fino a questo momento. Per confermare o per smentire questo risultato è necessario quindi effettuare altre simulazioni, mantenendo invariate le iterazioni e il sistema produttivo considerato. Di seguito, per brevità, viene riportata una tabella con i costi ottenuti nelle varie simulazioni ed il tempo di esecuzione delle medesime: # simulazione 1 2 3 4 5 6 7 8 9 10 costo 140,4 146,2 141,6 135,8 140,5 140,5 144,3 148,3 145,1 135,8 tempo (s) 5,75 5,43 5,54 5,75 5,85 5,56 5,64 5,62 5,6 5,5 Figura 37 Tabella rappresentante i costi ottenuti da 10 esecuzioni dell’algoritmo di ottimizzazione ordinale polarizzata. Ciascuna esecuzione è stata effettuata compiendo 10000 iterazioni. In rosso sono rappresentati i costi fuori dal campo dei best 0.1% costi Come evidenziato dalla tabella l’algoritmo polarizzato offre risultati in tempi molto brevi ma non riesce a dare garanzie sul risultato finale: il 40% delle simulazioni danno un valore che esce fuori dal range di ottimalità precedentemente definito. Bisogna però notare che nel complesso la totalità dei risultati ottenuti, anche non corrispondendo pienamente alle aspettative, non è del tutto disastrosa poiché vi sono valori decisamente ‘buoni’ misti a valori ‘cattivi’ che, tranne eccezioni, non sono eccessivamente distanti dall’insieme desiderato. Questo fenomeno è giustificato dal fatto che la distribuzione di probabilità di questo tipo di algoritmo pur non essendo pienamente equa non esclude totalmente classi di partizioni ma ne agevola o disagevola l’estrazione. L’effetto finale di questo tipo di politica è quello di poter ottenere risultati molto buoni ma senza avere garanzie sull’avverarsi degli stessi. Simulazione 2 Dopo aver testato gli algoritmi per insiemi che permettano l’analisi esaustiva potrebbe essere interessante confrontare gli algoritmi statistici su di un sistema avente un insieme delle parti con una cardinalità abbastanza superiore a quella del precedente. Scegliendo un sistema con un numero di parti pari a 14 si avrebbe una complessità B (14) = 190899322. Come si nota immediatamente il numero di confronti necessario per l’analisi esaustiva in questo caso sarebbe quasi ingestibile, di conseguenza l’approccio da preferire è sicuramente quello statistico. Bisogna ricordare che il 50 calcolo compiuto in precedenza per ottenere un costo che fosse nei ‘best’ 0.1% possibili costi resta valido anche in questo caso. Tale considerazione è vera poiché, come si può vedere dalla formula, la probabilità di scegliere un elemento che sia nell’insieme ‘best’ 0.1% non dipende dalla cardinalità delle parti del sistema considerato ma solo dalle richieste dell’utilizzatore. Si considera quindi la seguente matrice d’incidenza con un costo base di 412 e i rispettivi costi dei macchianari: 11 12 13 14 15 16 17 18 19 20 21 22 23 24 A 0 1 0 0 0 0 0 1 0 0 0 0 0 0 B 0 0 0 0 0 1 1 0 0 0 1 0 0 0 C 1 0 0 1 0 0 0 1 1 0 1 0 0 1 D 0 0 0 0 0 1 1 0 1 1 0 1 1 0 E 0 1 0 1 1 0 0 1 0 0 0 0 0 1 F 0 1 0 0 0 1 0 0 0 0 0 0 0 0 G 0 0 1 0 0 0 0 0 0 0 0 1 1 0 H 0 0 0 1 0 0 0 1 0 0 0 0 0 0 I 0 0 1 0 1 0 0 0 0 0 0 0 0 0 L 0 0 0 0 0 1 1 1 1 1 0 0 1 1 M 0 0 1 0 1 0 0 0 0 0 0 0 0 0 N 0 0 0 1 0 1 0 1 0 0 1 0 1 1 O 1 1 0 0 1 0 1 0 1 1 0 0 0 0 P 1 0 1 0 0 1 0 0 0 0 0 0 0 0 Costo macchine macchine 11 1,2 12 1,5 13 1,7 14 1,9 15 1,1 16 1,2 17 1,6 18 1,1 19 1,2 20 1,5 21 1,7 22 1,3 23 1,2 24 1,8 Figura 38 Matrice d’incidenza rappresentante il sistema con relativa tabella inerente ai costi dei macchinari La matrice dopo l’applicazione preventiva dell’algoritmo di RANK ORDER AND CLUSTERING compiuta da entrambi gli algoritmi è la seguente: 18 12 24 14 15 21 16 23 19 11 17 20 13 22 E 1 1 1 1 1 0 0 0 0 0 0 0 0 0 A 1 1 0 0 0 0 0 0 0 0 0 0 0 0 N 1 0 1 1 0 1 1 1 0 0 0 0 0 0 C 1 0 1 1 0 1 0 0 1 1 0 0 0 0 L 1 0 1 0 0 0 1 1 1 0 1 1 0 0 H 1 0 0 1 0 0 0 0 0 0 0 0 0 0 O 0 1 0 0 1 0 0 0 1 1 1 1 0 0 F 0 1 0 0 0 0 1 0 0 0 0 0 0 0 I 0 0 0 0 1 0 0 0 0 0 0 0 1 0 M 0 0 0 0 1 0 0 0 0 0 0 0 1 0 B 0 0 0 0 0 1 1 0 0 0 1 0 0 0 D 0 0 0 0 0 0 1 1 1 0 1 1 0 1 P 0 0 0 0 0 0 1 0 0 1 0 0 1 0 G 0 0 0 0 0 0 0 1 0 0 0 0 1 1 Figura 39 Matrice d’incidenza rappresentante il sistema dopo l’applicazione dell’algoritmo ROC La matrice ottenuta dopo l’ottimizzazione ordinale equidistribuita è la seguente: 51 18 12 24 14 15 23 13 22 16 18 24 23 21 14 17 19 20 18 14 24 21 19 11 12 16 12 15 19 11 17 20 15 13 16 23 19 17 20 22 16 11 13 E 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 N 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 B 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 I 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 M 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 P 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 Figura 40 Matrice d’incidenza ottenuta con l’ottimizzazione ordinale equidistribuita a seguito di 1000 iterazioni Il costo di questa configurazione è di 325,4 con una diminuzione del costo base superiore al 20%. Questa volta però, il tempo necessario per l’elaborazione è stato di 37.9 secondi. Come si può constatare il tempo impiegato dall’algoritmo è decisamente ragionevole e di molto inferiore al tempo che si sarebbe impiegato per compiere un’analisi esaustiva ( almeno 3 ordini di grandezza in più). 52 Un buon metro di paragone è dato dall’applicazione dell’ottimizzazione ordinale polarizzata: 23 13 22 16 11 13 21 16 17 18 24 14 21 19 11 16 23 15 13 15 13 12 16 12 15 19 11 17 20 16 23 19 17 20 18 24 22 18 14 18 12 18 12 24 14 15 G 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 B 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 N 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 I 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 L 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 Figura 41 Matrice d’incidenza ottenuta con l’ottimizzazione ordinale polarizzata a seguito di 1000 iterazioni 53 Il costo della configurazione ottenuta è di 318.4 e il tempo impiegato per la simulazione è stato di 14,046 secondi. Un tempo di simulazione così basso è giustificato dall’implementazione della procedura che non ha al suo interno chiamate ricorsive e una complessità computazionale davvero bassa. Per la bontà del risultato ottenuto si possono fare la stesse considerazioni fatte in precedenza. Si può però aggiungere che il fatto di privilegiare alcune configurazioni piuttosto che altre fa sì che se una di queste ricade nell’insieme ‘best’ questo algoritmo la trovi con più semplicità rispetto a quello equidistribuito. Come si è detto in precedenza però, essendoci una flebile garanzia statistica c’è da un lato un incremento della prestazione ma dall’altro una perdita di robustezza. Come fatto precedentemente potrebbe risultare interessante compiere varie simulazioni e confrontare i risultati ottenuti:. Di seguito come in precedenza viene riportata una tabella con i costi ottenuti ed il tempo di simulazione impiegato per calcolarli. # simulazione costo tempo (s) 1 2 326 331,2 14,37 14,6 3 318,6 14,86 4 314,5 14,75 5 319 14,7 6 7 317,5 312,9 14,82 14,21 8 317,5 14,9 9 318,4 14,21 10 323,6 14,39 Figura 42 Tabella recante i costi ricavati da 10 iterazioni dell’algoritmo di ottimizzazione ordinale polarizzata applicato con un numero di iterazioni per ciascuna simulazione pari a 10000. In rosso è riportato il costo che si discosta maggiormente dagli altri costi ‘ottimi’ presenti nella tabella. Come si può notare dalla Figura 42 i risultati ottenuti sono decisamente buoni ad eccezione di un unico costo leggermente più alto dello standard. Si potrebbe quindi affermare che il rapporto perdita di robustezza – incremento di prestazione dato da questo algoritmo polarizzato è decisamente favorevole. Dai risultati ottenuti si potrebbe concludere che l’efficacia di questo algoritmo è data da una base di equidistribuzione su cui si muove casualmente un dislivello di probabilità che, con una certa aleatorietà, può giocare a favore di un incremento di prestazione. Si potrebbe anche pensare di combattere la casualità di tale incremento aumentando il numero di simulazioni in modo da ottenere al minimo la stessa distribuzione di probabilità che si avrebbe nel caso equidistribuito, avendo però come vantaggio una maggiore velocità e una certa oscillazione casuale che potrebbe ulteriormente incrementare le prestazioni. Osservando gli istogrammi, riportanti le distribuzioni di probabilità, si capisce che triplicando il numero di simulazioni sicuramente si può ottenere la stessa sicurezza statistica che si ha per l’algoritmo con probabilità equidistribuita e in più come già si è detto un fattore d’incremento prestazionale abbastanza sostanzioso anche se aleatorio. Ripetendo quindi la simulazione precedente sfruttando 30000 campioni anziché 10000 si ottiene il seguente risultato: 54 21 16 17 16 11 13 12 16 12 15 19 11 17 20 23 13 22 18 14 12 24 15 15 13 18 24 14 21 19 11 16 23 17 20 22 B 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 O 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 M 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 I 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 N 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 L 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1 1 1 0 D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 Figura 43 Matrice d’incidenza rappresentante la miglior soluzione ottenuta a seguito di 3000 iterazioni dell’algoritmo polarizzato Il costo della configurazione così ottenuta è di 300,5 e il tempo di simulazione è di circa 39 secondi. Il risultato ottenuto è molto buono poiché, rispetto all’algoritmo equidistribuito, si ha a parità di tempo impiegato un miglioramento del costo finale di circa il 6%. Formalizzando ciò che si è detto precedentemente per la probabilità polarizzata, si può affermare empiricamente che: la probabilità di ottenere un certo costo con i iterazioni da un insieme ‘best’ di cardinalità B(n)% che appartiene ad un insieme padre di cardinalità B(n) sia: =1− 1− ( )% ( ) (eq.16) 55 Simulazione 3 Per maggiore completezza e rapidità di rappresentazione in questa sezione verranno rappresentati graficamente gli abbassamenti di costo prodotti dai diversi algoritmi su sistemi aventi una cardinalità dell’insieme diversa. Dal momento che, come precedentemente dimostrato, il numero dei macchinari non influenza la complessità nella ricerca della ‘configurazione ottimale’ (od ottima a seconda del metodo utilizzato) per semplicità ed uniformità si sceglierà sempre un numero di macchine uguale a quello delle parti. Per iniziare si è scelto un insieme con cardinalità bassa in modo da poter confrontare i costi ottenuti con il costo ottimo: L’esempio in questione rappresenta un sistema composto da 8 macchinari e 8 parti con un numero di iterazioni pari a 600: Andamenti dei costi in un sistema 8 macchine - 8 parti. (Simulazione effettuata su 1000 iterazioni) 170 160 costo della configurazione 150 140 130 Ottimizzazione Polarizzata Ottimizzazione Ordinale Costo Ottimo Costo Massimo 120 110 100 90 80 70 0 100 200 300 400 500 600 iterazioni 700 800 900 1000 Figura 44 Confronto tra gli andamenti dei fronti di costo dei vari metodi di ottimizzazione considerati. Complessità B(8) Di seguito viene proposto uno zoom della parte più movimentata del grafico in cui si nota una maggior velocità di convergenza all’ottimo dell’algoritmo polarizzato. ZOOM Andamenti dei costi in un sistema 8 macchine - 8 parti. (Simulazione effettuata su 1000 iterazioni) Ottimizzazione Polarizzata Ottimizzazione Ordinale Costo Ottimo Costo Massimo costo della configurazione 105 100 95 90 85 80 0 50 100 iterazioni 150 200 Figura 45 Zoom con relativo resize della figura 44 56 Continuando con la serie di esempi preannunciati si passa ad un esempio costituito da un sistema 9 macchine- 9 parti, quindi ancora trattabile in maniera esaustiva: Andamenti dei costi in un sistema 9 macchine - 9 parti. (Simulazione effettuata su 5000 iterazioni ) 170 costo della configurazione 160 150 Ottimizzazione Polarizzata Ottimizzazione Ordinale Costo Ottimo Costo di base 140 130 120 110 0 500 1000 1500 2000 2500 3000 Iterazioni 3500 4000 4500 5000 Figura 46 Confronto tra gli andamenti dei fronti di costo dei vari metodi di ottimizzazione considerati. Complessità B(9) Come fatto in precedenza viene proposto uno zoom della parte ‘interessante’ del grafico. Questa volta si evince un’inversione di tendenza :l’ottimizzazione ordinale converge prima all’ottimo di quella polarizzata. ZOOM Andamenti dei costi in un sistema 9 macchine - 9 parti. (Simulazione effettuata su 5000 iterazioni ) 140 Ottimizzazione Polarizzata Ottimizzazione Ordinale Costo Ottimo Costo di base costo della configurazione 135 130 125 120 115 110 0 500 1000 1500 Iterazioni 2000 2500 3000 Figura 47 Zoom con relativo resize della figura 46 57 Per continuare la trattazione si è pensato interessante trattare dei casi in cui l’analisi esaustiva sarebbe stata troppo onerosa. Si è scelto quindi di iniziare trattando un sistema composto da 10 macchini e 10 parti: Figura 48 Confronto tra gli andamenti dei fronti di costo dei vari metodi di ottimizzazione considerati. Complessità B(10) Dato il notevole incremento dei fronti di costo si è pensato di proporre un altro test aumentando ulteriormente il numero di parti e di macchinari presenti nel sistema. Il sistema in esame è un sistema 12 macchine-12 parti: Figura 49 Confronto tra gli andamenti dei fronti di costo dei vari metodi di ottimizzazione considerati. Complessità B(12) 58 Come è facile notare dalla figura si è avuto un’inversione di tendenza: L’ottimizzazione ordinale che sembrava convergere con grande rapidità nella figura in questo caso dà risultati alquanto deludenti. Al fine di completare l’analisi risulta utile compiere un’ultima simulazione aumentando ancora il numero di macchine e di macchinari presenti nel sistema per osservare se la tendenza mostrata dalla figura è confermata. L’esempio proposto rappresenta un sistema costituito da 14 macchine e 14 parti. Andamenti dei costi in un sistema 14 parti -14 macchine. (Simulazione effettuata su 10000 iterazioni) 400 costo della configurazione 395 390 Ottimizzazione Polarizzata Ottimizzazione Ordinale Costo Base 385 380 375 0 1000 2000 3000 4000 5000 6000 iterazione 7000 8000 9000 10000 Figura 50 Confronto tra gli andamenti dei fronti di costo dei vari metodi di ottimizzazione considerati. Complessità B(14) Dalla figura si evince facilmente che l’ottimizzazione ordinale all’aumentare della cardinalità dell’insieme parti non produce risultati migliorativi mentre quella polarizzata, anche se con margini non troppo elevati, riesce ancora a migliorare il costo totale del sistema. Tale risultato è giustificato dal fatto che essendo l’ottimizzazione ordinale un metodo di scelta totalmente equo ed essendo l’insieme delle possibili partizioni molto grande, è possibile che il sistema nella configurazione data si trovi già nello 0,01% delle migliori configurazioni e che quindi non si riesca ad avere un miglioramento in termini di costo. Per quanto concerne l’algoritmo polarizzato non essendo equo esso si dirige casualmente verso classi di partizioni che come si è detto in precedenza potrebbero portare un miglioramento. Per avere una maggiore garanzia statistica a parità di tempo impiegato si potrebbe utilizzare l’accorgimento descritto nell’eq.16. 59 CONCLUSIONI CONSIDERAZIONI FINALI Lo scopo di questo lavoro è stato quello di trovare, mediante l’utilizzo di varie strategie un metodo capace di ottimizzare la configurazione cellulare di un sistema produttivo. Dal momento che il problema non è sempre risolubile compiutamente si è proposto oltre all’approccio di tipo esaustivo un approccio di tipo statistico che, come si è visto dalle simulazioni effettuate, offre un buon compromesso in termini di tempo speso e prestazione ottenuta. Nel testo si sono confrontati due metodi: uno totalmente equo, quindi ‘miope’ ed uno polarizzato , con una ‘lungimiranza’ però abbastanza aleatoria. La miopia del primo metodo permette di dare delle garanzie dal punto di vista statistico ma, come si è visto dagli esempi precedentemente esposti, spesso è più prestante un metodo di ottimizzazione di tipo polarizzato; soprattutto se rafforzato da un numero maggiore di iterazioni (si è detto in precedenza che ciò non è strano poiché la complessità del metodo equamente distribuito è 3n mentre quella di quello polarizzato è n). Dati i risultati ottenuti si possono ricavare due importanti direttrici che potrebbero condurre a interessanti sviluppi futuri: 1) Riduzione delle dimensioni del problema 2) Incremento della lungimiranza nelle scelte delle varie partizioni Per quanto concerne il punto 1. si potrebbero applicare i metodi di ottimizzazione statistica mediante una struttura propria dei ‘greedy algorithms’, cioè quella di riapplicare le procedure di ottimizzazione su partizioni ottenute tramite un primo sgrossamento iniziale. Si potrebbe iterare il metodo cercando di semplificare il problema al punto di arrivare ad una cardinalità delle singole sub-partizioni trattabile da un punto di vista esaustivo. Metodi di questo tipo generalmente offrono un avvicinamento asintotico alla soluzione ottima con un’ottima diminuzione del tempo di processo. Al fine di incrementare la lungimiranza della procedura si potrebbe invece pensare ad un algoritmo di tipo genetico che selezionando dalla totalità degli individui (insieme delle partizioni) campioni degli stessi possa mediante procedure di accoppiamento, basate su regole dedotte da simulazioni, generare una prole (quindi direzionare la scelta) sempre più performante in termini di costo. L’algoritmo di scelta polarizzato e l’applicazione preventiva dell’algoritmo di RANKORDER AND CLUSTERIND hanno rappresentato, anche se in piccola dose, la base per l’applicazione degli sviluppi futuri. Per quanto concerne l’applicazione che si è fatta dell’algoritmo di RANK ORDER AND CLUSTERING preventivo esso non ha rappresentato altro che un banale esempio di ‘greedy algorithms’ mentre l’ottimizzazione polarizzata è servita per dare un’idea del concetto di lungimiranza nelle scelte. Partendo quindi dai risultati ottenuti in questo testo si potrebbero sviluppare metodi di ottimizzazione più efficienti e performanti capaci di dare risultati e garanzie migliori di quelle raggiunte finora. 60 BIBLIOGRAFIA TESTI E ARTICOLI CONSULTATI [1] H.M. Chan, D.A. Miller, Direct clustering algorithm for group formation in cellular manufacturing, Journal of Manufacturing Systems 1 (1982) 64–75 [2] A. Kusiak, Generalized group technology concept, International Journal of Production Research 25 (1987) 561–569. [3] K. Shanker, A.K. Agrawal, Models and solution meth- odologies for the generalized grouping problem in cellular manufacturing, International Journal of Production Research 35 (2) (1997) 513-538. [4] G. Srinivasan, A clustering algorithm for machine cell formation in group technology using minimum spanning trees, International Journal of Production Research 32 (9) (1994) 2149–2158 [5] Burbidge, J. L., Change to Group Technology: Process Organization is Obsolete International Journal of Production Research, Volume 30 (1992), pp1209–1219. [6] Kumar, C. S., & Chandrasekharan, M. P. (1990). Grouping e0cacy: A quantitative criterion for goodness of diagonal forms of binary matrices in group technology. International Journal of Production Research, 28, 233–243. [7] Goncalves, J., & Resende, M. (2004). An evolutionary algorithm for manufacturing cell formation. Computers and Industrial Engineering, 47, 247–273. [8] Chu, C. H. & Tsai, C. C. (2001). A heuristic algorithm for grouping manufacturing cells. In Proceedings of the 2001 IEEE Congress on Evolutionary Computation, Seoul, Korea (pp. 310–317). [9] Wang, J. (2003). Formation of machine cells and part families in cellular manufacturing systems using a linear assignment algorithm. Automatica, 39(9), 1607–1615. [10] T. H., Chang, C. C., & Chung, S. H. (2008). A simulated annealing algorithm for manufacturing cell formation problems. Expert Systems with Applications, 34, 1609–1617. [11] D.E. Goldberg, Computer-aided pipe line operation using genetic algorithms rule learning, API Pipeline Cybernetics Symposium, Houston, TX, 1984. [12] S. Sankaran, K.G. Kassilingam, An integrated approach to cell formation and part routing in group technology, Engineering Optimization 16 (3) (1990) 235–245. [13] Mikell P.Groover, Automation, Production System and Computer- Integrated Manufacturing (Second Edition), Prentice Hall International INC (2001). [14] Herbert Wilf, East West, University of Pennsylvania Philadelphia, PA, USA (1999). 61