Cutting stock bidimensionale

Davide Ciambelli
Davide CiambelliConsultant um Like Reply

Nel problema del taglio del vetro (conosciuto come cutting stock bidimensionale o TDC), dato uno stock rettangolare di materia prima di dimensioni (L,W), e dato un insieme P di pezzi rettangolari desiderati a ciascuno dei quali e` associata una coppia di dimensioni (l,w), si deve trovare l’insieme di pezzi, sottoinsieme di P, estraibile dallo stock che massimizzi la somma dei profitti dei pezzi in esso contenuti (Figure 1.1). Un insieme S di pezzi estraibile `e definito in letteratura come “feasible pattern”. Un esempio di pezzi non estraibile, nel caso di stock con dimensioni (5, 5) `e S = (3, 3), (4, 4). Se piu` pezzi sono identici essi costituiscono un “tipo” di pezzo ed il numero ne rappresenta la domanda. Un caso particolare di TDC `e classificato come guillotine e riguarda tutte le problematiche di taglio di sagome a partire da un unico pezzo e si prefigge come obiettivo quello di minimizzare lo sfrido (scarto) con alcuni vincoli operativi.

Contents

1 Cutting stock bidimensionale                                                    vii
  1.1 Descrizione del problema . . . . . . . . . . . . . . . . . . . . . . . viii
  1.2 Risoluzione del problema con algoritmo genetico . . . . . . . . . .      x
      1.2.1 Rappresentazione genetica del problema . . . . . . . . . . xii
       1.2.2   Scelta della funzione di fitness . . . . . . . . . . . . . . . .    xii
       1.2.3   Strutture dati . . . . . . . . . . . . . . . . . . . . . . . . .   xii
      1.2.4 Cromosoma in dettaglio . . . . . . . . . . . . . . . . . . . xii
  1.3 Operazioni genetiche . . . . . . . . . . . . . . . . . . . . . . . . . xiii
       1.3.1   Fase di creazione . . . . . . . . . . . . . . . . . . . . . . . xiii
       1.3.2   Fase di riproduzione . . . . . . . . . . . . . . . . . . . . . xiv
       1.3.3   Fase di visualizzazione . . . . . . . . . . . . . . . . . . . . xvii

Bibliography                                                                      xx




                                        i
ii   CONTENTS
List of Tables




                 iii
iv   LIST OF TABLES
List of Figures

 1.1 Esempio di TDC . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
 1.2 TDC ghigliottinato . . . . . . . . . . . . . . . . . . . . . . . . . . ix
 1.3 Corner-left . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x
 1.4 Schema di funzionamento di un GA . . . . . . . . . . . . . . . . . xi
 1.5 Esempio di Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
 1.6 Esempio di Spin . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii
 1.7 Stock con sfrido . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii
 1.8 Stock senza sfrido . . . . . . . . . . . . . . . . . . . . . . . . . . . xix




                                       v
vi   LIST OF FIGURES
Chapter 1

Cutting stock bidimensionale




Autori:
Manfucci Andrea
Ciambelli Davide




                   vii
viii                       CHAPTER 1. CUTTING STOCK BIDIMENSIONALE




                              Figure 1.1: Esempio di TDC



1.1         Descrizione del problema
Nel problema del taglio del vetro (conosciuto come cutting stock bidimensionale
o TDC), dato uno stock rettangolare di materia prima di dimensioni (L, W ), e
dato un insieme P di pezzi rettangolari desiderati a ciascuno dei quali e associata
                                                                          `
una coppia di dimensioni (l, w), si deve trovare l’insieme di pezzi, sottoinsieme
di P , estraibile dallo stock che massimizzi la somma dei profitti dei pezzi in esso
contenuti (Figure 1.1). Un insieme S di pezzi estraibile ` definito in letteratura
                                                            e
come “feasible pattern”. Un esempio di pezzi non estraibile, nel caso di stock con
dimensioni (5, 5) ` S = (3, 3), (4, 4). Se pi` pezzi sono identici essi costituiscono
                   e                         u
un “tipo” di pezzo ed il numero ne rappresenta la domanda. Un caso particolare
di TDC ` classificato come guillotine e riguarda tutte le problematiche di taglio
          e
di sagome a partire da un unico pezzo e si prefigge come obiettivo quello di
minimizzare lo sfrido (scarto) con alcuni vincoli operativi di seguito elencati:

       • lo stock iniziale ha forma rettangolare, ` limitato in altezza e larghezza con
                                                  e
         dimensioni rispettivamente di (30, 20) e con area pari a 600;

       • i tagli eseguiti sono tutti “a ghigliottina” vale a dire tagli che cominciano
         e terminano su punti perimetrali (Figure 1.2);

       • i pezzi hanno dimensioni variabili e forme rettangolari.

I tagli a ghigliottina paralleli realizzati sullo stock iniziale sono definiti di primo
livello (first-stage). Quelli ad essi perpendicolari e realizzati sui rettangoli ottenuti
sono definiti di secondo livello (second-stage). Il programma carica le coordinate
dei pezzi leggendo un file .txt memorizzato nella directory data. Gli oggetti ven-
gono piazzati a livelli e sono affiancati sulla base di ogni livello. L’altezza di un
1.1. DESCRIZIONE DEL PROBLEMA                                                     ix




                          Figure 1.2: TDC ghigliottinato



livello ` quella dell’oggetto pi` alto che va a determinare i tagli di primo livello.
        e                       u
Il primo oggetto viene inserito partendo sempre dall’angolo in basso a sinistra di
ogni livello (Figure 1.3). Ogni volta che viene inserito un oggetto viene decre-
mentata la larghezza dello stock e il valore viene salvato in un variabile chiamata
larghezza rimasta. Da questo punto in avanti, ciascun oggetto successivo al primo
viene inserito solo se soddisfa le seguenti condizioni:

   • la sua altezza ` minore o uguale a quella del primo oggetto del livello;
                    e

   • la sua larghezza ` minore o uguale di larghezza rimasta.
                      e

In caso negativo l’oggetto viene inserito in un nuovo livello partendo dall’angolo
in basso a sinistra e si ricomincia la valutazione dei pezzi successivi. Ciascun
pezzo pu` essere ruotato sia verticalmente che orizzontalmente (free orientation)
          o
e i pezzi non possono essere sovrapposti. L’insieme pu` contenere un set di pezzi
                                                          o
con la stessa dimensione ma nessuno dei pezzi pu` avere una dimensione mag-
                                                      o
giore dello stock iniziale. Tutti gli oggetti hanno lo stesso valore di profitto e non
esiste nessun vincolo di priorit`. Dato un set di oggetti l’obiettivo ` quello di
                                  a                                        e
minimizzare lo sfrido per cui l’area totale degli oggetti inseriti determina il val-
ore della soluzione. Non ` detto quindi che tutti gli oggetti dell’insieme iniziale
                            e
facciano parte della soluzione e in tal caso non vengono presi in considerazione
per la soluzione finale. Il problema TDC ` NP-hard infatti esso diventa equiva-
                                              e
x                       CHAPTER 1. CUTTING STOCK BIDIMENSIONALE




                              Figure 1.3: Corner-left



lente al problema dello zaino mono-dimensionale che e noto essere NP-hard. In
                                                         `
letteratura sono stati proposti differenti approcci al problema TDC, ad esempio
in termini di schemi di programmazione dinamica (Gilmore e Gomory, 1966; Hifi
e Zissimopoulos, 1996), di meta-euristiche (Alvarez-Valdes, Parajon e Tamarit,
2002; Puchinger, 2005), di programmazione lineare (Lodi e Monaci, 2003; Belov,
2003). Molti lavori scientifici propongono algoritmi ad hoc classificabili, rispetto
alla versione a ghigliottina, in tre classi: top-down, bottom-up e strip heuristics.
In questo lavoro ` stata sfruttata una tecnica euristica basata sugli algoritmi
                  e
genetici.



1.2      Risoluzione del problema con algoritmo ge-
         netico
Non esiste una tecnica rigorosa di algoritmo genetico. Gli algoritmi genetici
(AG) sono tecniche euristiche atte a risolvere problemi di ricerca e di ottimiz-
zazione. Holland, inventore e sviluppatore degli AG, aveva come scopo lo studio
del fenomeno dell’adattamento, come avviene in natura, e dei suoi meccanismi
tipici all’interno dei sistemi informatici. In biologia lo sviluppo di idee mod-
erne relative ai processi coinvolti nell’evoluzione e iniziato con Charles Darwin.
                                                    `
Darwin dedusse che la maggior parte degli individui muore prima di potersi ripro-
durre e ci` avviene per il possesso di caratteri sfavorevoli. Questa e la selezione
            o                                                          `
naturale Darwiniana. Dato che le esigenze ambientali cambiano continuamente,
la selezione naturale favorisce caratteri via via diversi infatti nella lotta per la
sopravvivenza quelli che hanno sviluppato un miglior adattamento all’ambiente
sono quelli che riescono a riprodursi.
1.2. RISOLUZIONE DEL PROBLEMA CON ALGORITMO GENETICO                            xi


                                  Popolazione di base


                                      Valutazione




                                       Selezione




                                    Reverse e Spin



                          No
                                      Terminato?
                                             Si
                                        Risultati

                Figure 1.4: Schema di funzionamento di un GA




    In perfetta analogia con gli eventi descritti, gli AG partendo da un’iniziale
popolazione di cromosomi, ognuno dei quali rappresenta una possibile soluzione
del problema, associano ad ognuno di questi un certo livello di adattamento, il
“fitness score”, dipendente dalla bont` della soluzione del problema. Gli indi-
                                        a
vidui migliori, in altre parole con maggior fitness, si riproducono combinandosi
con altri individui e si ottiene cos` una nuova popolazione di possibili soluzioni,
                                    ı
prodotta dalla selezione degli individui migliori della generazione corrente. In
questo modo, dopo molte generazioni, le buone caratteristiche vengono prop-
agate a tutta la popolazione. Favorendo l’accoppiamento fra gli individui pi`    u
adatti vengono esplorate le aree pi` promettenti dello spazio di ricerca. Per com-
                                    u
prendere maggiormente quanto detto sopra ` necessario dare alcune indicazioni.
                                              e
xii                    CHAPTER 1. CUTTING STOCK BIDIMENSIONALE



1.2.1    Rappresentazione genetica del problema
Gli AG risolvono un determinato problema ricorrendo ad una popolazione di
soluzioni che, inizialmente casuali e quindi con fitness bassa, vengono fatte evol-
vere per un certo numero di generazioni successive, sino all’apparizione di almeno
una soluzione con fitness elevata. Per poter applicare l’algoritmo genetico occorre
anzitutto codificare numericamente le soluzioni e individuare una opportuna fun-
zione di fitness.



1.2.2    Scelta della funzione di fitness
La funzione di fitness si occupa di misurare la bont` di una soluzione. Nel TDC la
                                                    a
bont` corrisponde alla somma delle aree dei pezzi ricavati dallo stock. Si deduce
     a
che pi` ` alto il valore di fitness e pi` basso sar` lo scarto. Lo stock iniziale `
       ue                              u           a                             e
un rettangolo le cui dimensioni sono (30, 20) e l’area ` pari a 600. Una soluzione
                                                       e
ottima per il problema si ottiene quando la funzione di fitness coincide con l’area
dello stock.



1.2.3    Strutture dati
Taglio: classe che contiene tutto quello che riguarda la creazione, manipolazione
e visualizzazione dei cromosomi.
Shape: classe che contiene la definizione di oggetto.
Cromosoma: classe che contiene la definizione di cromosoma.
Piece: vector di tipo shape che contiene l’insieme iniziale dei pezzi.
Chromosome: vector di tipo cromosoma che contiene tutte le possibili soluzioni.
Solution: vector che contiene il cromosoma con il fitness migliore.




1.2.4    Cromosoma in dettaglio
Ogni individuo della popolazione ` codificato mediante un cromosoma la cui strut-
                                 e
tura si compone di tre parti:
1.3. OPERAZIONI GENETICHE                                                       xiii



   • nella prima vengono memorizzati i pezzi. Ciascun pezzo viene codificato
     come coppia di coordinate, in cui le posizioni con indice dispari corrispon-
     dono alla larghezza mentre le posizioni con indice pari corrispondono all’altezza;

   • la seconda parte rappresenta il cromosoma vero e proprio ed e specifi-
                                                                        `
     cato mediante una codifica numerica. Questa risulta essere una stringa
     di lunghezza costante formata da geni. I geni sono binari, con valori di
     0 o 1, e sono utilizzati per effettuare le operazioni di reverse e spin. Pi`
                                                                               u
     precisamente, ciascuna delle operazioni utilizza un range di bit contenuto
     fra due indici (iniziale e finale) specificati da ogni operazione;

   • l’ultimo elemento del cromosoma, invece, memorizza il valore della funzione
     di fitness associato a quel cromosoma. Si tenga presente che inizialmente
     ogni cromosoma avr` come valore di fitness zero.
                         a

In seguito verranno spiegate le funzioni utilizzate per ottenere cromosomi “figli”
dalla manipolazione di cromosomi “genitrici”.



1.3     Operazioni genetiche
La popolazione che evolve ha un numero N di individui che viene mantenuto
costante da una generazione all’altra. Ad ogni generazione vengono eseguite
opportune operazioni genetiche che producono nuovi individui. Per mantenere
costante N, occorre riprodurre nella generazione successiva solo N individui, pre-
miando quelli dotati di maggiore fitness. Le operazioni genetiche utilizzate sono
la reverse e la spin.



1.3.1    Fase di creazione
La funzione creation serve per generare i cromosomi in maniera casuale. Inizial-
mente ogni cromosoma contiene una possibile configurazione di pezzi (generata
con la funzione mix), i geni (generati casualmente) e un valore di fitness pari
a zero. Prima del termine della funzione tutti i cromosomi generati vengono
raddoppiati in modo da avere uno spazio doppio rispetto ai cromosomi iniziali.
xiv                     CHAPTER 1. CUTTING STOCK BIDIMENSIONALE



Questo passaggio serve per favorire la sopravvivenza dei cromosomi migliori. In-
fatti, nei passaggi successivi, i cromosomi saranno ordinati in maniera decrescente
e quelli peggiori (che si trovano in fondo) verranno rimpiazzati da cromosomi
migliori e questi diventeranno la base delle successive mutazioni. In questo modo,
sfruttando la bont` dei cromosomi genitori, verr` favorita la generazione di figli
                     a                             a
con caratteristiche pi` performanti.
                       u



1.3.2     Fase di riproduzione
La funzione riproduction genera nuovi cromosomi a partire da quelli gi` es-
                                                                         a
istenti. In questa funzione vengono richiamate con il 50% di probabilit` o la
                                                                       a
reverse o la spin.


Reverse

Questa operazione sceglie due punti k e l (k < l) nelle stringhe binarie “genitrici”

                        < A1 , A2 , . . . , Ak , . . . , Al , . . . , An >

                       < B1 , B2 , . . . , Bk , . . . , Bl , . . . , Bn >
ed effettua lo scambio (Figure 1.5)

                     < A1 , A2 , . . . , Ak , Bk+1 , Bk+2, . . . , Bn >

                     < B1 , B2 , . . . , Bk , Ak+1 , Ak+2, . . . , An >
Al termine di questa operazione si ottengono nuovi cromosomi figli che rispetto
ai genitori presentano alcuni pezzi invertiti. Supponiamo di aver ottenuto un
cromosoma figlio di questo tipo:

                                   1001000010

con questa configurazione di pezzi:

                           (10, 5), (20, 10), (5, 10), (20, 5)

Questo ` quello che avviene in dettaglio:
       e
1.3. OPERAZIONI GENETICHE                                                       xv



   • si considerano i geni compresi tra l’indice di reverse iniziale e quello finale
     (nell’esempio 1 0 0 1)

   • la stringa ottenuta viene convertita in base 2 e da questa operazione si
     ottiene un intero (nell’esempio 20 + 23 = 9). L’operazione reverse lavora
     sulle x di ogni pezzo. Queste si trovano in posizioni dispari quindi si deve
     ottenere un valore dispari, perci`:
                                      o

        1. se il valore dell’intero ` pari si aggiunge 1
                                    e
        2. se il valore dell’intero ` dispari non viene modificato
                                    e

   • il valore ottenuto viene diviso in modulo per il numero di coordinate dei
     pezzi (nell’esempio 9 mod 8 = 1)

   • il resto della divisione rappresenta la coordinata x del pezzo da scambiare
     con il pezzo successivo (nell’esempio x1 = 10)

   • a questo punto il pezzo indicato dalla coordinata (nell’esempio (10, 5)) viene
     scambiato con il successivo (nell’esempio (20, 10))

La soluzione suggerita dal cromosoma ` la seguente
                                     e

                           (20, 10), (10, 5), (5, 10), (20, 5)

e attraverso la funzione fitness verr` valutata.
                                    a


Spin

Questa operazione coinvolge 2 stringhe binarie “genitrici”

                                 < A1 , A2 , . . . , An >

                                 < B1 , B2 , . . . , Bn >
ed effettua lo scambio dei geni compresi tra k e la fine del cromosoma producendo
le stringhe “figlie” (Figure 1.6)

                     < A1 , A2 , . . . , Ak , Bk+1 , Bk+2, . . . , Bn >

                     < B1 , B2 , . . . , Bk , Ak+1 , Ak+2, . . . , An >
xvi                       CHAPTER 1. CUTTING STOCK BIDIMENSIONALE




                           Figure 1.5: Esempio di Reverse



I nuovi cromosomi figli presentano alcuni pezzi ruotati rispetto ai genitori. Sup-
poniamo che il cromosoma ottenuto sia quello dell’esempio precedente:

                                  1001000010

con la configurazione di pezzi vista in precedenza:

                            (10, 5), (20, 10), (5, 10), (20, 5)

Questo ` quello che avviene in dettaglio:
       e

      • si considerano i geni compresi tra l’indice di spin iniziale e quello finale
        (nell’esempio 0 0 0 0 1 0)

      • la stringa ottenuta viene convertita in base 2 e da questa operazione si
        ottiene un intero (nell’esempio 21 = 2). L’operazione spin lavora sulle x di
        ogni pezzo. Queste si trovano in posizioni dispari quindi si deve ottenere
        un valore dispari, perci`:
                                o

          1. se il valore dell’intero ` pari si aggiunge 1 (nell’esempio 2 + 1 = 3)
                                      e
          2. se il valore dell’intero ` dispari non viene modificato
                                      e
1.3. OPERAZIONI GENETICHE                                                     xvii




                          Figure 1.6: Esempio di Spin



   • il valore ottenuto viene diviso in modulo per il numero di coordinate dei
     pezzi (nell’esempio 3 mod 8 = 3)

   • il resto della divisione rappresenta la coordinata x del pezzo da ruotare
     (nell’esempio x3 = 20)

   • a questo punto il pezzo indicato dalla coordinata viene ruotato (nell’esempio
     (20, 10) diventa (10, 20))

La soluzione suggerita dal cromosoma ` la seguente
                                     e

                          (10, 5), (10, 20), (5, 10), (20, 5)

e attraverso la funzione fitness verr` valutata. Mentre la reverse assicura il man-
                                    a
tenimento di buoni individui per migliorare le soluzioni, la spin mantiene la di-
versit` nella popolazione e permette di ampliare l’esplorazione.
      a



1.3.3    Fase di visualizzazione
Le funzioni appena descritte vengono richiamate all’interno di un ciclo iterativo.
L’iterazione avanza nel caso in cui la differenza tra il miglior valore di fitness
xviii                   CHAPTER 1. CUTTING STOCK BIDIMENSIONALE




                            Figure 1.7: Stock con sfrido



attuale e il precedente ` uguale a zero. Nel caso in cui la differenza ` diversa da
                          e                                               e
zero il ciclo torna all’inizio. Questo serve a garantire che la soluzione finale sia
la migliore possibile. Quando termina il ciclo vengono richiamate due funzioni:
la visualize e la draw. La prima stampa il cromosoma soluzione con il relativo
valore di fitness. La seconda richiama la classe disegna visualizzando in output
la rappresentazione grafica relativa al cromosoma soluzione.
    Un esempio di output del programma ` quello in Figure 1.7 e rappresenta la
                                             e
soluzione migliore con soli 6 degli 8 oggetti dell’insieme iniziale. Si pu` notare che
                                                                          o
una parte dello stock non ` stata riempita (sfrido). Un altro esempio di output
                              e
` quello in Figure 1.8 dove lo stock iniziale ` stato riempito completamente.
e                                                  e
Anche in questo caso sono stati utilizzati 6 degli 8 oggetti dell’insieme iniziale
ma a differenza del precedente esempio non c’` stato spreco e la soluzione risulta
                                                 e
essere la migliore possibile. I numeri che affiancano le rette verticali e orizzontali
rappresentano l’ordine in cui i tagli devono essere effettuati.
1.3. OPERAZIONI GENETICHE                          xix




                  Figure 1.8: Stock senza sfrido
xx   CHAPTER 1. CUTTING STOCK BIDIMENSIONALE
Bibliography

[1] J. Holland, ”Genetic Algorithms”.

[2] http://en.wikipedia.org.

[3] http://www.obitko.com.




                                    xxi

Recomendados

Analisi sperimentale comparativa dell’evolvibilità nei sistemi di evoluzione ... von
Analisi sperimentale comparativa dell’evolvibilità nei sistemi di evoluzione ...Analisi sperimentale comparativa dell’evolvibilità nei sistemi di evoluzione ...
Analisi sperimentale comparativa dell’evolvibilità nei sistemi di evoluzione ...Danny Tagliapietra
273 views36 Folien
Di 4.analytic hierarchy process @061010 (barchiesi) von
Di   4.analytic hierarchy process @061010 (barchiesi)Di   4.analytic hierarchy process @061010 (barchiesi)
Di 4.analytic hierarchy process @061010 (barchiesi)julienlang
1.1K views30 Folien
Genetic Algorithm Research von
Genetic Algorithm ResearchGenetic Algorithm Research
Genetic Algorithm ResearchDavide Madeddu
696 views19 Folien
SEMrush SEO Toolkit Exam von
SEMrush SEO Toolkit ExamSEMrush SEO Toolkit Exam
SEMrush SEO Toolkit ExamDavide Ciambelli
359 views1 Folie
SEMrush SEO Fundamentals Exam von
SEMrush SEO Fundamentals ExamSEMrush SEO Fundamentals Exam
SEMrush SEO Fundamentals ExamDavide Ciambelli
210 views1 Folie
Google Analytics for Beginners von
Google Analytics for BeginnersGoogle Analytics for Beginners
Google Analytics for BeginnersDavide Ciambelli
144 views1 Folie

Más contenido relacionado

Más de Davide Ciambelli

Google Tag Manager Fundamentals von
Google Tag Manager Fundamentals Google Tag Manager Fundamentals
Google Tag Manager Fundamentals Davide Ciambelli
111 views1 Folie
Eccellenze in digitale von
Eccellenze in digitaleEccellenze in digitale
Eccellenze in digitaleDavide Ciambelli
65 views1 Folie
Abilitazione all'utilizzo dei dispositivi DAE von
Abilitazione all'utilizzo dei dispositivi DAEAbilitazione all'utilizzo dei dispositivi DAE
Abilitazione all'utilizzo dei dispositivi DAEDavide Ciambelli
249 views1 Folie
Google Tag Manager Fundamentals von
Google Tag Manager FundamentalsGoogle Tag Manager Fundamentals
Google Tag Manager FundamentalsDavide Ciambelli
409 views1 Folie
Certificazione AdWords von
Certificazione AdWordsCertificazione AdWords
Certificazione AdWordsDavide Ciambelli
434 views1 Folie
Un viaggio chiamato LibreUmbria von
Un viaggio chiamato LibreUmbriaUn viaggio chiamato LibreUmbria
Un viaggio chiamato LibreUmbriaDavide Ciambelli
696 views85 Folien

Más de Davide Ciambelli(20)

Abilitazione all'utilizzo dei dispositivi DAE von Davide Ciambelli
Abilitazione all'utilizzo dei dispositivi DAEAbilitazione all'utilizzo dei dispositivi DAE
Abilitazione all'utilizzo dei dispositivi DAE
Davide Ciambelli249 views
Guida introduttiva di Google all’ottimizzazione per motori di ricerca (SEO) von Davide Ciambelli
Guida introduttiva di Google  all’ottimizzazione per motori di ricerca (SEO)Guida introduttiva di Google  all’ottimizzazione per motori di ricerca (SEO)
Guida introduttiva di Google all’ottimizzazione per motori di ricerca (SEO)
Davide Ciambelli690 views
Google analytics platform principles certificate von Davide Ciambelli
Google analytics platform principles certificateGoogle analytics platform principles certificate
Google analytics platform principles certificate
Davide Ciambelli407 views
Social Network Analysis for Journalists Using the Twitter API von Davide Ciambelli
Social Network Analysis for Journalists Using the Twitter APISocial Network Analysis for Journalists Using the Twitter API
Social Network Analysis for Journalists Using the Twitter API
Davide Ciambelli1.5K views
The 2009 Simulated Car Racing Championship von Davide Ciambelli
The 2009 Simulated Car Racing ChampionshipThe 2009 Simulated Car Racing Championship
The 2009 Simulated Car Racing Championship
Davide Ciambelli1.5K views
Linux Bash Shell Cheat Sheet for Beginners von Davide Ciambelli
Linux Bash Shell Cheat Sheet for BeginnersLinux Bash Shell Cheat Sheet for Beginners
Linux Bash Shell Cheat Sheet for Beginners
Davide Ciambelli3.6K views
Sistema elaboratore in multiprogrammazione von Davide Ciambelli
Sistema elaboratore in multiprogrammazioneSistema elaboratore in multiprogrammazione
Sistema elaboratore in multiprogrammazione
Davide Ciambelli443 views
Programmazione e gestione della sicurezza: Verbale elettronico von Davide Ciambelli
Programmazione e gestione della sicurezza: Verbale elettronicoProgrammazione e gestione della sicurezza: Verbale elettronico
Programmazione e gestione della sicurezza: Verbale elettronico
Davide Ciambelli380 views
Pool di macchine Condor con utilizzo di Checkpoint Server von Davide Ciambelli
Pool di macchine Condor con utilizzo di Checkpoint ServerPool di macchine Condor con utilizzo di Checkpoint Server
Pool di macchine Condor con utilizzo di Checkpoint Server
Davide Ciambelli673 views

Cutting stock bidimensionale

  • 1. Contents 1 Cutting stock bidimensionale vii 1.1 Descrizione del problema . . . . . . . . . . . . . . . . . . . . . . . viii 1.2 Risoluzione del problema con algoritmo genetico . . . . . . . . . . x 1.2.1 Rappresentazione genetica del problema . . . . . . . . . . xii 1.2.2 Scelta della funzione di fitness . . . . . . . . . . . . . . . . xii 1.2.3 Strutture dati . . . . . . . . . . . . . . . . . . . . . . . . . xii 1.2.4 Cromosoma in dettaglio . . . . . . . . . . . . . . . . . . . xii 1.3 Operazioni genetiche . . . . . . . . . . . . . . . . . . . . . . . . . xiii 1.3.1 Fase di creazione . . . . . . . . . . . . . . . . . . . . . . . xiii 1.3.2 Fase di riproduzione . . . . . . . . . . . . . . . . . . . . . xiv 1.3.3 Fase di visualizzazione . . . . . . . . . . . . . . . . . . . . xvii Bibliography xx i
  • 2. ii CONTENTS
  • 4. iv LIST OF TABLES
  • 5. List of Figures 1.1 Esempio di TDC . . . . . . . . . . . . . . . . . . . . . . . . . . . viii 1.2 TDC ghigliottinato . . . . . . . . . . . . . . . . . . . . . . . . . . ix 1.3 Corner-left . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x 1.4 Schema di funzionamento di un GA . . . . . . . . . . . . . . . . . xi 1.5 Esempio di Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . xvi 1.6 Esempio di Spin . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii 1.7 Stock con sfrido . . . . . . . . . . . . . . . . . . . . . . . . . . . . xviii 1.8 Stock senza sfrido . . . . . . . . . . . . . . . . . . . . . . . . . . . xix v
  • 6. vi LIST OF FIGURES
  • 7. Chapter 1 Cutting stock bidimensionale Autori: Manfucci Andrea Ciambelli Davide vii
  • 8. viii CHAPTER 1. CUTTING STOCK BIDIMENSIONALE Figure 1.1: Esempio di TDC 1.1 Descrizione del problema Nel problema del taglio del vetro (conosciuto come cutting stock bidimensionale o TDC), dato uno stock rettangolare di materia prima di dimensioni (L, W ), e dato un insieme P di pezzi rettangolari desiderati a ciascuno dei quali e associata ` una coppia di dimensioni (l, w), si deve trovare l’insieme di pezzi, sottoinsieme di P , estraibile dallo stock che massimizzi la somma dei profitti dei pezzi in esso contenuti (Figure 1.1). Un insieme S di pezzi estraibile ` definito in letteratura e come “feasible pattern”. Un esempio di pezzi non estraibile, nel caso di stock con dimensioni (5, 5) ` S = (3, 3), (4, 4). Se pi` pezzi sono identici essi costituiscono e u un “tipo” di pezzo ed il numero ne rappresenta la domanda. Un caso particolare di TDC ` classificato come guillotine e riguarda tutte le problematiche di taglio e di sagome a partire da un unico pezzo e si prefigge come obiettivo quello di minimizzare lo sfrido (scarto) con alcuni vincoli operativi di seguito elencati: • lo stock iniziale ha forma rettangolare, ` limitato in altezza e larghezza con e dimensioni rispettivamente di (30, 20) e con area pari a 600; • i tagli eseguiti sono tutti “a ghigliottina” vale a dire tagli che cominciano e terminano su punti perimetrali (Figure 1.2); • i pezzi hanno dimensioni variabili e forme rettangolari. I tagli a ghigliottina paralleli realizzati sullo stock iniziale sono definiti di primo livello (first-stage). Quelli ad essi perpendicolari e realizzati sui rettangoli ottenuti sono definiti di secondo livello (second-stage). Il programma carica le coordinate dei pezzi leggendo un file .txt memorizzato nella directory data. Gli oggetti ven- gono piazzati a livelli e sono affiancati sulla base di ogni livello. L’altezza di un
  • 9. 1.1. DESCRIZIONE DEL PROBLEMA ix Figure 1.2: TDC ghigliottinato livello ` quella dell’oggetto pi` alto che va a determinare i tagli di primo livello. e u Il primo oggetto viene inserito partendo sempre dall’angolo in basso a sinistra di ogni livello (Figure 1.3). Ogni volta che viene inserito un oggetto viene decre- mentata la larghezza dello stock e il valore viene salvato in un variabile chiamata larghezza rimasta. Da questo punto in avanti, ciascun oggetto successivo al primo viene inserito solo se soddisfa le seguenti condizioni: • la sua altezza ` minore o uguale a quella del primo oggetto del livello; e • la sua larghezza ` minore o uguale di larghezza rimasta. e In caso negativo l’oggetto viene inserito in un nuovo livello partendo dall’angolo in basso a sinistra e si ricomincia la valutazione dei pezzi successivi. Ciascun pezzo pu` essere ruotato sia verticalmente che orizzontalmente (free orientation) o e i pezzi non possono essere sovrapposti. L’insieme pu` contenere un set di pezzi o con la stessa dimensione ma nessuno dei pezzi pu` avere una dimensione mag- o giore dello stock iniziale. Tutti gli oggetti hanno lo stesso valore di profitto e non esiste nessun vincolo di priorit`. Dato un set di oggetti l’obiettivo ` quello di a e minimizzare lo sfrido per cui l’area totale degli oggetti inseriti determina il val- ore della soluzione. Non ` detto quindi che tutti gli oggetti dell’insieme iniziale e facciano parte della soluzione e in tal caso non vengono presi in considerazione per la soluzione finale. Il problema TDC ` NP-hard infatti esso diventa equiva- e
  • 10. x CHAPTER 1. CUTTING STOCK BIDIMENSIONALE Figure 1.3: Corner-left lente al problema dello zaino mono-dimensionale che e noto essere NP-hard. In ` letteratura sono stati proposti differenti approcci al problema TDC, ad esempio in termini di schemi di programmazione dinamica (Gilmore e Gomory, 1966; Hifi e Zissimopoulos, 1996), di meta-euristiche (Alvarez-Valdes, Parajon e Tamarit, 2002; Puchinger, 2005), di programmazione lineare (Lodi e Monaci, 2003; Belov, 2003). Molti lavori scientifici propongono algoritmi ad hoc classificabili, rispetto alla versione a ghigliottina, in tre classi: top-down, bottom-up e strip heuristics. In questo lavoro ` stata sfruttata una tecnica euristica basata sugli algoritmi e genetici. 1.2 Risoluzione del problema con algoritmo ge- netico Non esiste una tecnica rigorosa di algoritmo genetico. Gli algoritmi genetici (AG) sono tecniche euristiche atte a risolvere problemi di ricerca e di ottimiz- zazione. Holland, inventore e sviluppatore degli AG, aveva come scopo lo studio del fenomeno dell’adattamento, come avviene in natura, e dei suoi meccanismi tipici all’interno dei sistemi informatici. In biologia lo sviluppo di idee mod- erne relative ai processi coinvolti nell’evoluzione e iniziato con Charles Darwin. ` Darwin dedusse che la maggior parte degli individui muore prima di potersi ripro- durre e ci` avviene per il possesso di caratteri sfavorevoli. Questa e la selezione o ` naturale Darwiniana. Dato che le esigenze ambientali cambiano continuamente, la selezione naturale favorisce caratteri via via diversi infatti nella lotta per la sopravvivenza quelli che hanno sviluppato un miglior adattamento all’ambiente sono quelli che riescono a riprodursi.
  • 11. 1.2. RISOLUZIONE DEL PROBLEMA CON ALGORITMO GENETICO xi Popolazione di base Valutazione Selezione Reverse e Spin No Terminato? Si Risultati Figure 1.4: Schema di funzionamento di un GA In perfetta analogia con gli eventi descritti, gli AG partendo da un’iniziale popolazione di cromosomi, ognuno dei quali rappresenta una possibile soluzione del problema, associano ad ognuno di questi un certo livello di adattamento, il “fitness score”, dipendente dalla bont` della soluzione del problema. Gli indi- a vidui migliori, in altre parole con maggior fitness, si riproducono combinandosi con altri individui e si ottiene cos` una nuova popolazione di possibili soluzioni, ı prodotta dalla selezione degli individui migliori della generazione corrente. In questo modo, dopo molte generazioni, le buone caratteristiche vengono prop- agate a tutta la popolazione. Favorendo l’accoppiamento fra gli individui pi` u adatti vengono esplorate le aree pi` promettenti dello spazio di ricerca. Per com- u prendere maggiormente quanto detto sopra ` necessario dare alcune indicazioni. e
  • 12. xii CHAPTER 1. CUTTING STOCK BIDIMENSIONALE 1.2.1 Rappresentazione genetica del problema Gli AG risolvono un determinato problema ricorrendo ad una popolazione di soluzioni che, inizialmente casuali e quindi con fitness bassa, vengono fatte evol- vere per un certo numero di generazioni successive, sino all’apparizione di almeno una soluzione con fitness elevata. Per poter applicare l’algoritmo genetico occorre anzitutto codificare numericamente le soluzioni e individuare una opportuna fun- zione di fitness. 1.2.2 Scelta della funzione di fitness La funzione di fitness si occupa di misurare la bont` di una soluzione. Nel TDC la a bont` corrisponde alla somma delle aree dei pezzi ricavati dallo stock. Si deduce a che pi` ` alto il valore di fitness e pi` basso sar` lo scarto. Lo stock iniziale ` ue u a e un rettangolo le cui dimensioni sono (30, 20) e l’area ` pari a 600. Una soluzione e ottima per il problema si ottiene quando la funzione di fitness coincide con l’area dello stock. 1.2.3 Strutture dati Taglio: classe che contiene tutto quello che riguarda la creazione, manipolazione e visualizzazione dei cromosomi. Shape: classe che contiene la definizione di oggetto. Cromosoma: classe che contiene la definizione di cromosoma. Piece: vector di tipo shape che contiene l’insieme iniziale dei pezzi. Chromosome: vector di tipo cromosoma che contiene tutte le possibili soluzioni. Solution: vector che contiene il cromosoma con il fitness migliore. 1.2.4 Cromosoma in dettaglio Ogni individuo della popolazione ` codificato mediante un cromosoma la cui strut- e tura si compone di tre parti:
  • 13. 1.3. OPERAZIONI GENETICHE xiii • nella prima vengono memorizzati i pezzi. Ciascun pezzo viene codificato come coppia di coordinate, in cui le posizioni con indice dispari corrispon- dono alla larghezza mentre le posizioni con indice pari corrispondono all’altezza; • la seconda parte rappresenta il cromosoma vero e proprio ed e specifi- ` cato mediante una codifica numerica. Questa risulta essere una stringa di lunghezza costante formata da geni. I geni sono binari, con valori di 0 o 1, e sono utilizzati per effettuare le operazioni di reverse e spin. Pi` u precisamente, ciascuna delle operazioni utilizza un range di bit contenuto fra due indici (iniziale e finale) specificati da ogni operazione; • l’ultimo elemento del cromosoma, invece, memorizza il valore della funzione di fitness associato a quel cromosoma. Si tenga presente che inizialmente ogni cromosoma avr` come valore di fitness zero. a In seguito verranno spiegate le funzioni utilizzate per ottenere cromosomi “figli” dalla manipolazione di cromosomi “genitrici”. 1.3 Operazioni genetiche La popolazione che evolve ha un numero N di individui che viene mantenuto costante da una generazione all’altra. Ad ogni generazione vengono eseguite opportune operazioni genetiche che producono nuovi individui. Per mantenere costante N, occorre riprodurre nella generazione successiva solo N individui, pre- miando quelli dotati di maggiore fitness. Le operazioni genetiche utilizzate sono la reverse e la spin. 1.3.1 Fase di creazione La funzione creation serve per generare i cromosomi in maniera casuale. Inizial- mente ogni cromosoma contiene una possibile configurazione di pezzi (generata con la funzione mix), i geni (generati casualmente) e un valore di fitness pari a zero. Prima del termine della funzione tutti i cromosomi generati vengono raddoppiati in modo da avere uno spazio doppio rispetto ai cromosomi iniziali.
  • 14. xiv CHAPTER 1. CUTTING STOCK BIDIMENSIONALE Questo passaggio serve per favorire la sopravvivenza dei cromosomi migliori. In- fatti, nei passaggi successivi, i cromosomi saranno ordinati in maniera decrescente e quelli peggiori (che si trovano in fondo) verranno rimpiazzati da cromosomi migliori e questi diventeranno la base delle successive mutazioni. In questo modo, sfruttando la bont` dei cromosomi genitori, verr` favorita la generazione di figli a a con caratteristiche pi` performanti. u 1.3.2 Fase di riproduzione La funzione riproduction genera nuovi cromosomi a partire da quelli gi` es- a istenti. In questa funzione vengono richiamate con il 50% di probabilit` o la a reverse o la spin. Reverse Questa operazione sceglie due punti k e l (k < l) nelle stringhe binarie “genitrici” < A1 , A2 , . . . , Ak , . . . , Al , . . . , An > < B1 , B2 , . . . , Bk , . . . , Bl , . . . , Bn > ed effettua lo scambio (Figure 1.5) < A1 , A2 , . . . , Ak , Bk+1 , Bk+2, . . . , Bn > < B1 , B2 , . . . , Bk , Ak+1 , Ak+2, . . . , An > Al termine di questa operazione si ottengono nuovi cromosomi figli che rispetto ai genitori presentano alcuni pezzi invertiti. Supponiamo di aver ottenuto un cromosoma figlio di questo tipo: 1001000010 con questa configurazione di pezzi: (10, 5), (20, 10), (5, 10), (20, 5) Questo ` quello che avviene in dettaglio: e
  • 15. 1.3. OPERAZIONI GENETICHE xv • si considerano i geni compresi tra l’indice di reverse iniziale e quello finale (nell’esempio 1 0 0 1) • la stringa ottenuta viene convertita in base 2 e da questa operazione si ottiene un intero (nell’esempio 20 + 23 = 9). L’operazione reverse lavora sulle x di ogni pezzo. Queste si trovano in posizioni dispari quindi si deve ottenere un valore dispari, perci`: o 1. se il valore dell’intero ` pari si aggiunge 1 e 2. se il valore dell’intero ` dispari non viene modificato e • il valore ottenuto viene diviso in modulo per il numero di coordinate dei pezzi (nell’esempio 9 mod 8 = 1) • il resto della divisione rappresenta la coordinata x del pezzo da scambiare con il pezzo successivo (nell’esempio x1 = 10) • a questo punto il pezzo indicato dalla coordinata (nell’esempio (10, 5)) viene scambiato con il successivo (nell’esempio (20, 10)) La soluzione suggerita dal cromosoma ` la seguente e (20, 10), (10, 5), (5, 10), (20, 5) e attraverso la funzione fitness verr` valutata. a Spin Questa operazione coinvolge 2 stringhe binarie “genitrici” < A1 , A2 , . . . , An > < B1 , B2 , . . . , Bn > ed effettua lo scambio dei geni compresi tra k e la fine del cromosoma producendo le stringhe “figlie” (Figure 1.6) < A1 , A2 , . . . , Ak , Bk+1 , Bk+2, . . . , Bn > < B1 , B2 , . . . , Bk , Ak+1 , Ak+2, . . . , An >
  • 16. xvi CHAPTER 1. CUTTING STOCK BIDIMENSIONALE Figure 1.5: Esempio di Reverse I nuovi cromosomi figli presentano alcuni pezzi ruotati rispetto ai genitori. Sup- poniamo che il cromosoma ottenuto sia quello dell’esempio precedente: 1001000010 con la configurazione di pezzi vista in precedenza: (10, 5), (20, 10), (5, 10), (20, 5) Questo ` quello che avviene in dettaglio: e • si considerano i geni compresi tra l’indice di spin iniziale e quello finale (nell’esempio 0 0 0 0 1 0) • la stringa ottenuta viene convertita in base 2 e da questa operazione si ottiene un intero (nell’esempio 21 = 2). L’operazione spin lavora sulle x di ogni pezzo. Queste si trovano in posizioni dispari quindi si deve ottenere un valore dispari, perci`: o 1. se il valore dell’intero ` pari si aggiunge 1 (nell’esempio 2 + 1 = 3) e 2. se il valore dell’intero ` dispari non viene modificato e
  • 17. 1.3. OPERAZIONI GENETICHE xvii Figure 1.6: Esempio di Spin • il valore ottenuto viene diviso in modulo per il numero di coordinate dei pezzi (nell’esempio 3 mod 8 = 3) • il resto della divisione rappresenta la coordinata x del pezzo da ruotare (nell’esempio x3 = 20) • a questo punto il pezzo indicato dalla coordinata viene ruotato (nell’esempio (20, 10) diventa (10, 20)) La soluzione suggerita dal cromosoma ` la seguente e (10, 5), (10, 20), (5, 10), (20, 5) e attraverso la funzione fitness verr` valutata. Mentre la reverse assicura il man- a tenimento di buoni individui per migliorare le soluzioni, la spin mantiene la di- versit` nella popolazione e permette di ampliare l’esplorazione. a 1.3.3 Fase di visualizzazione Le funzioni appena descritte vengono richiamate all’interno di un ciclo iterativo. L’iterazione avanza nel caso in cui la differenza tra il miglior valore di fitness
  • 18. xviii CHAPTER 1. CUTTING STOCK BIDIMENSIONALE Figure 1.7: Stock con sfrido attuale e il precedente ` uguale a zero. Nel caso in cui la differenza ` diversa da e e zero il ciclo torna all’inizio. Questo serve a garantire che la soluzione finale sia la migliore possibile. Quando termina il ciclo vengono richiamate due funzioni: la visualize e la draw. La prima stampa il cromosoma soluzione con il relativo valore di fitness. La seconda richiama la classe disegna visualizzando in output la rappresentazione grafica relativa al cromosoma soluzione. Un esempio di output del programma ` quello in Figure 1.7 e rappresenta la e soluzione migliore con soli 6 degli 8 oggetti dell’insieme iniziale. Si pu` notare che o una parte dello stock non ` stata riempita (sfrido). Un altro esempio di output e ` quello in Figure 1.8 dove lo stock iniziale ` stato riempito completamente. e e Anche in questo caso sono stati utilizzati 6 degli 8 oggetti dell’insieme iniziale ma a differenza del precedente esempio non c’` stato spreco e la soluzione risulta e essere la migliore possibile. I numeri che affiancano le rette verticali e orizzontali rappresentano l’ordine in cui i tagli devono essere effettuati.
  • 19. 1.3. OPERAZIONI GENETICHE xix Figure 1.8: Stock senza sfrido
  • 20. xx CHAPTER 1. CUTTING STOCK BIDIMENSIONALE
  • 21. Bibliography [1] J. Holland, ”Genetic Algorithms”. [2] http://en.wikipedia.org. [3] http://www.obitko.com. xxi