SlideShare a Scribd company logo
1 of 8
Costruzione di un Algoritmo Genetico per lo scheduling del ciclo di
prelievo
Al fine di gestire i cicli di prelievo con molti codici articolo si è scelto di implementare un algoritmo genetico
come strumento per la ricerca di una sequenza ottimale.

Il lavoro svolto si articola nelle seguenti fasi:

        Codifica semplificata delle locazioni di picking
        Costruzione della matrice delle distanze tra punti di prelievo
        Costruzione del vettore delle distanze tra punti di prelievo e punto IO
        Costruzione dell’algoritmo
        Costruzione dell’interfaccia grafica

Nel seguito vengono spiegati in dettaglio i passi sopra individuati e viene analizzato lo svolgimento in
Matlab.




Codifica semplificata delle locazioni di picking
Il centro di stoccaggio rivolto al picking consta di 4 scaffalature di 3 livelli poste l’una in fronte all’altra lungo
il lato lungo.

Ogni livello consta di 80 postazioni di picking disposte su due file.

Ogni fila è accessibile da un corridoio che separa due scaffalature.

Il numero totale di corridoi è pari a 5 (e. g. 3 corridoi tra le scaffalature e 2 esterni).

Ogni postazione di picking è associata ad un numero identificativo che varia da 1 a 960.

Il punto IO è situato ad uno dei vertici esterni di una delle scaffalature esterne.

Si assume che la postazione appartenente allo scaffale estremo più vicino al punto IO, che ne è posta al
vertice esterno più vicino al punto IO e che appartiene al primo livello ha codice identificativo 1.

Continuando la numerazione, la postazione attigua sulla stessa fila ha codice identificativo pari a 2 e la
quarantesima pari a 40.

Viceversa il codice 41 appartiene alla postazione attigua a quella con codice 1 ma che non appartiene alla
stessa fila e il codice 80 appartiene alla postazione attigua a quella con codice 40 ma che non appartiene
alla stessa fila.

Estendendo la numerazione agli altri scaffali si ha che la postazione del primo livello più lontana dal punto
IO ha codice 320, ed estendendo la numerazione ai livelli, la stessa postazione all’ultimo livello ha codice
960.
Per semplificare la codifica ai fini di una trattazione meno complessa ma non meno approssimativa ai fini
dello scheduling si è scelto di comprimere la dimensione altezza e si è scelto di identificare due postazioni
che si affacciano l’una in fronte all’altra sullo stesso corridoio con lo stesso codice.

In tal modo si perviene ad una codifica con un numero di codici pari a 200 disposti su 5 sequenze da 40
unità ciascuna. Chiamiamo queste unità col termine celle per distinguerle dalle postazioni reali.

Abbiamo quindi due codifiche per le postazioni di prelievo che possiamo denominare come codifica a
locazioni (introdotta precedentemente) e codifica a celle.

Le cinque sequenze di celle adiacenti risultano tra loro equidistanti se le tre interne si considerano
localizzate lungo l’asse del corridoio che separa due scaffali e le due esterne lungo l’asse del corridoio
esterno (e. g. se si considera questo di pari dimensioni di quelli interni).

Le celle adiacenti all’interno della stessa sequenza risultano anch’esse equidistanti e pari al valore ay.

La codifica a celle segue la stessa logica della codifica a locazioni per cui l’unità più vicina al punto IO
assume codice 1 mentre la più distante ha codice 200.

In Fig. 1 è riportata una schematizzazione grafica delle postazioni di magazzino, la relazione tra codifica a
locazioni e codifica a celle e delle distanze sopradescritte tra celle e file adiacenti.




                                       FILA 2 FILA 1    COD.LOCAZIONE {(41, 81), (361, 401), (681, 721)}




                                                                                  SEQ 1

                                                                        SEQ 2




                                                                                          COD.CELLA 41




           Fig. 1. Rappresentazione magazzino e postazioni di prelievo con codifica semplificata.
Viene inseguito presentato lo script implementato in Matlab per poter passare dalla codifica principale (a
locazioni) a quella semplificata (a celle) dato un vettore p di locazioni di picking.



function [pt] = trasformazionecodici(p, M, MM)


        MM è una matrice tridimensionale (dim. nfileXnpostazioniXnlivelli) che identifica le postazioni di
        picking nella codifica a locazioni in cui le tre dimensioni identificano il numero di fila, il livello e la
        posizione delle postazioni. Gli elementi della matrice rappresentano i codici locazione dati alle
        postazioni di picking.
        M è una matrice bidimensionale (dim. nfileXnpostazioni) che identifica le postazioni di picking nella
        codifica a celle. Le due dimensioni identificano il numero di fila e la posizione delle postazioni. La
        terza dimensione rappresentante il livello non è contemplata per le motivazioni espresse in
        precedenza. Gli elementi della matrice rappresentano i codici celle dati alle postazioni di picking.
        p è un vettore di lunghezza l i cui elementi rappresentano delle locazioni di magazzino secondo la
        codifica
        dettata da MM.
        pt è il vettore trasformato dei codici di locazione nella codifica a celle.

Le due matrici sono salvate col nome disposiz_mag.mat.




Costruzione della matrice delle distanze tra punti celle
Per la costruzione dei percorsi che separano due celle è possibile fare riferimento alla disposizione delle
celle nel magazzino.

Ogni cella è caratterizzata da due coordinate X e Y che ne individuano al posizione all’interno del
magazzino. La coordinata X è riferita alla sequenza a cui appartiene la cella mentre Y è riferita alla posizione
della cella lungo la sequenza. Per esempio la cella 1 ha coordinate (1,1), mentre la cella 200 ha coordinate
(5,40).

Il percorso per raggiungere due celle situate lungo la stessa sequenza è dato semplicemente dalla
differenza dei valori della coordinata Y delle due celle per la costante ay.

Il percorso per raggiungere due celle poste in sequenze diverse è di due tipologie in relazione al verso di
percorrenza dei corridoi ospitanti le postazioni di prelievo cui le celle si riferiscono. Si ha

        Return: dalla cella di partenza si torna indietro verso il corridoio principale, lo si percorre fino a
        raggiungere il corridoio che ospita la cella che si vuole raggiungere e si percorre tale corridoio fino
        al punto d’arrivo.

                                     Dr(i,j) = Y(i)*ay + Y(j)*ay + abs(X(i)-X(j))*ax;
Traversal: dalla cella di partenza si percorre il corridoio fino a raggiungere il corridoio principale
        posto sul retro della struttura di stoccaggio, lo si percorre fino al corridoio ospitante la cella che si
        desidera raggiungere e lo si percorre fino al punto d’arrivo.



                   Dt(i,j) = (ncelle + 1 - Y(i))*ay + (ncelle + 1 - Y(j))*ay + abs(X(i)-X(j))*ax



La distanza tra due posizioni di prelievo poste in corridoi diversi sarà posta uguale alla minima distanza che
si ha seguendo le due strategie di percorrenza dei corridoi.

Nel seguito viene descritto lo script implementato per il calcolo della matrice delle distanze.



function [D, DDI, X, Y] = matricedist(ax, ay, ncorr, ncelle)


        ax: costante indicante la distanza tra gli assi di due corridoi adiacenti.
        ay: costante indicante la distanza tra i baricentri di due celle adiacenti lungo la stessa sequenza.
        ncorr: numero di corridoi (e. g. di sequenze).
        ncelle: numero di celle per ogni corridoio.
        D: matrice simmetrica dim( ncorrXncelle) delle distanze tra le celle.
        DDI: matrice simmetrica delle stesse dimensioni di D a valori in {R, T, A, I, S} indicante il tipo di
        percorso tra celle.
                 R: percorso Return tra le celle.
                 T: percorso Traversal tra le celle.
                 A: percorso in Avanti seguendo la numerazione delle celle nel corridoio.
                 I: percorso in Indietro seguendo la numerazione delle celle nel corridoio in modo
                 regressivo.
                 S: presente lungo la diagonale principale. Questa distanza potrebbe essere richiesta
                 quando è richiesta la distanza tra la cella e se stessa che ovviamente è uguale a zero.
                 Questa eventualità si ha quando devono essere prelevati articoli che sono presenti a diversi
                 livelli dell’impianto di stoccaggio o l’uno in fronte all’altro (ad ognuno dei tre possibili
                 livelli). Visto che tali codici sono inclusi all’interno di un unico codice semplificato è possibile
                 che nella lista di prelievo semplificata il codice semplificato appaia più volte (questo non
                 deve comunque preoccupare poiché il codice principale è sempre rintracciabile attraverso
                 la posizione all’interno della lista originaria data quella semplificata).
                 Questo inoltre ha l’implicazione che durante il processo di ricerca della soluzione tali celle
                 verranno visitate verosimilmente in successione come a logica ci si aspetterebbe di fare.
                 Questa semplificazione non ha quindi implicazioni significative sulla calcolo della soluzione.
Costruzione del vettore delle distanze tra punti di prelievo e punto IO
Per il calcolo della soluzione bisogna considerare la distanza intercorrente fra le celle e il punto di IO.

Tale distanza dipende dalla posizione della cella all’interno del centro di stoccaggio e dalla posizione del
punto IO.

Esso è posto a lato struttura in prossimità della cella 1.

La distanza tra una qualsiasi cella e il punto IO sarà pari alla distanza tra la cella e il corridoio principale, più
la distanza tra il corridoio ospitante la cella e il corridoio 1, più la distanza tra quest’ultimo ed il punto IO.



function [DIO] = distanzaIO(ax, ay, aa, ncorr, ncelle)         % ax = 2, ay = 0.6, ncelle = 40, ncorr = 5, aa = 3.



        aa: distanza tra punto IO e corridoio principale in fronte a cella 1.

        DIO: vettore i cui elementi rappresentano le distanze tra il punto IO ed ogni cella.




Costruzione dell’algoritmo
Data una lista di prelievo nella codifica a celle l’algoritmo implementato col nome picking_genetico
permette la risoluzione del problema di scheduling fin qui descritto.

Dalla lista di prelievo è possibile generare una popolazione iniziale di sequenze di prelievo eseguendo delle
permutazioni su questa. È possibile definire la numerosità della popolazione come parametro di input dello
script.

Definita una popolazione ad ogni iterazione è valutata la funzione di fitness di ogni elemento della
popolazione. Essa è pari all’inverso della distanza totale percorsa nel ciclo di prelievo dettato dall’elemento
della popolazione.

Una volta calcolata la fitness per ogni individuo viene calcolata la fitness relativa. Esse vengono ordinate in
modo ascendente e sommate in modo progressivo in modo da avere una funzione cumulata di tipo Pareto.

In questo modo è possibile estrarre un (o più nel caso di crossover) elemento della popolazione generando
un numero random e ricercandolo all’interno della funzione cumulata prima trovata. Esso sarà
verosimilmente l’individuo con fitness migliore.

Sull’individuo, o individui, estratti si devono applicare uno dei tre operatori evolutivi quali la riproduzione, il
crossover o la mutazione. La scelta dell’operatore da applicare è data attraverso la generazione di un
numero random che si confronta con le probabilità (definite a priori) di applicazione degli operatori.

La riproduzione consiste semplicemente nel ricopiare l’individuo scelto precedentemente nella nuova
popolazione al posto dell’individuo attualmente peggiore.
Il crossover si applica a due individui scambiando delle sottoparti delle due sequenze tra loro. Nel nostro
caso viene scelto un gene e viene scambiato il suo valore con il gene scelto dell’altro individuo. In questo
modo si generano due nuovi individui che presentano le caratteristiche dei due “genitori”. Tuttavia bisogna
effettuare un’altra operazione sui due “figli” che elimini la ridondanza del valore del gene scambiato (e. g.
sostituiamo al posto del valore ridondante il valore del gene precedentemente scambiato).

 Infine i due nuovi individui sono copiati nella nuova generazione al posto degli individui con valore di
fitness peggiore.

La mutazione si applica ad un solo elemento scambiando la posizione di due geni e ricopiando tale
individuo mutato al posto dell’individuo con valore di fitness peggiore.

Nel seguito viene descritto lo script implementato.



function

[seq, sol, PP, FFF, Iseq, Xseq, Yseq] = picking_genetico(pt, D, DIO, DDI, X, Y, MAXiter, pr, pm, pc, npool)

        pt: è la lista di prelievo con codifica a celle.

        MAXiter: numero di iterazioni.

        pr: probabilità di riproduzione.

        pc: individua la probabilità di crossover attraverso pc – pr.

        pm: individua la probabilità di mutazione attraverso 1- pc.

        npool: dimensioni popolazione.

        seq: soluzione dell’algoritmo nella codifica a celle.

        sol: valore del percorso associato alla sequenza-soluzione.

        PP: popolazione finale.

        FFF: vettore dei valori di fitness degli individui migliori ad ogni iterazione.

        Iseq: vettore indicante la tipologia di percorso tra una cella e la successiva all’interno della
        sequenza di prelievo dettata da seq.

        Xseq: restituisce la posizione di corridoio della cella.

        Yseq: restituisce il numero di postazione di prelievo all’interno del corridoio dato in Xseq.
Per ottenere nuovamente la codifica a locazioni è possibile richiamale lo script trasfcodinver.m come
descritto in seguito.



function [pinv] = trasfcodiciinver(p, pt, seq)
dato il vettore p della sequenza originale, il vettore pt della sequenza a codifica a celle e il vettore seq della
sequenza soluzione dell’algoritmo, restituisce il vettore pinv della nuova sequenza, espressa secondo la
codifica a locazioni.

Nel seguito si presenta uno script che raccoglie tutte le funzioni viste precedentemente.



function

[S, Iseq, sol] = pickinggeneticoaggregato(p,M,MM,ax,ay,aa,ncorr, ncelle, MAXiter, pr, pm, pc, npool)



        S racchiude in un unica matrice pinv, Xseq e Yseq.




Costruzione dell’interfaccia grafica
L’interfaccia grafica è costruita attraverso il Toolbox di Matlab Guide.

Essa consta di due file GPkI.m e GPkI.fig. il primo contiene la parte di codice mentre il secondo la parte
grafica.

Per lanciare la maschera basta digitare GPkI dal Command Window di Matlab posizionandosi all’interno
della cartella genetico grafico.

Essa richiama le funzioni trasformazionecodici., picking_genetico.m e trasfcodicinv.m viste in precedenza.

Necessita, invece, delle matrice delle M, MM, D, DDI, DIO, X, Y che sono caricate nel Workspace al lancio di
GPkI e sono salvate nei file .mat disposiz_mag, matricedist_out e distanzaIO_out.

Quest’ultimo modo di operare segue dal voler mantenere separate le due fasi di definizione dei parametri
dell’impianto e la gestione del ciclo di prelievo.

All’interno della maschera troviamo i seguenti oggetti:

        Inserisci lista di prelievo: campo in cui inserire la lista di prelievo (codici postazioni con codifica a
        locazioni).
        Pannello grafici: è possibile visualizzare in tempo reale l’evoluzione della popolazione e della
        Fitness Function migliore cliccando sul comando Visualizzazione. In basso al pannello è riportata la
        distanza totale del percorso migliore ottenuto all’ultima iterazione.
Pannelli di Risposta: i pannelli di risposta sono 3 e sono situati a lato destro della maschera. Il
       pannello Codice a celle restituisce la sequenza di Input secondo la codifica a celle ed il risultato del
       calcolo secondo la stessa codifica. Il pannello Posizione restituisce le posizioni di corridoio e di
       profondità lungo i corridoi di servizio. Il pannelo Output restituisce la sequenza con fitness migliore
       all’ultima iterazione e le rispettive indicazioni sul percorso.
       Pannello Parametri e Calcolo: in questo pannello si possono definire i parametri di calcolo quali la
       numerosità della popolazione, il numero di iterazioni e le probabilità dei tre operatori.

In figura 2 è riportata un’immagine della maschera al completamento del calcolo.




                                           Fig. 2. Output di GPkI.

More Related Content

Recently uploaded

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 

Recently uploaded (9)

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 

Featured

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Costruzione Di Un Algoritmo Genetico Per Lo Scheduling Del Ciclo Di Prelievo

  • 1. Costruzione di un Algoritmo Genetico per lo scheduling del ciclo di prelievo Al fine di gestire i cicli di prelievo con molti codici articolo si è scelto di implementare un algoritmo genetico come strumento per la ricerca di una sequenza ottimale. Il lavoro svolto si articola nelle seguenti fasi: Codifica semplificata delle locazioni di picking Costruzione della matrice delle distanze tra punti di prelievo Costruzione del vettore delle distanze tra punti di prelievo e punto IO Costruzione dell’algoritmo Costruzione dell’interfaccia grafica Nel seguito vengono spiegati in dettaglio i passi sopra individuati e viene analizzato lo svolgimento in Matlab. Codifica semplificata delle locazioni di picking Il centro di stoccaggio rivolto al picking consta di 4 scaffalature di 3 livelli poste l’una in fronte all’altra lungo il lato lungo. Ogni livello consta di 80 postazioni di picking disposte su due file. Ogni fila è accessibile da un corridoio che separa due scaffalature. Il numero totale di corridoi è pari a 5 (e. g. 3 corridoi tra le scaffalature e 2 esterni). Ogni postazione di picking è associata ad un numero identificativo che varia da 1 a 960. Il punto IO è situato ad uno dei vertici esterni di una delle scaffalature esterne. Si assume che la postazione appartenente allo scaffale estremo più vicino al punto IO, che ne è posta al vertice esterno più vicino al punto IO e che appartiene al primo livello ha codice identificativo 1. Continuando la numerazione, la postazione attigua sulla stessa fila ha codice identificativo pari a 2 e la quarantesima pari a 40. Viceversa il codice 41 appartiene alla postazione attigua a quella con codice 1 ma che non appartiene alla stessa fila e il codice 80 appartiene alla postazione attigua a quella con codice 40 ma che non appartiene alla stessa fila. Estendendo la numerazione agli altri scaffali si ha che la postazione del primo livello più lontana dal punto IO ha codice 320, ed estendendo la numerazione ai livelli, la stessa postazione all’ultimo livello ha codice 960.
  • 2. Per semplificare la codifica ai fini di una trattazione meno complessa ma non meno approssimativa ai fini dello scheduling si è scelto di comprimere la dimensione altezza e si è scelto di identificare due postazioni che si affacciano l’una in fronte all’altra sullo stesso corridoio con lo stesso codice. In tal modo si perviene ad una codifica con un numero di codici pari a 200 disposti su 5 sequenze da 40 unità ciascuna. Chiamiamo queste unità col termine celle per distinguerle dalle postazioni reali. Abbiamo quindi due codifiche per le postazioni di prelievo che possiamo denominare come codifica a locazioni (introdotta precedentemente) e codifica a celle. Le cinque sequenze di celle adiacenti risultano tra loro equidistanti se le tre interne si considerano localizzate lungo l’asse del corridoio che separa due scaffali e le due esterne lungo l’asse del corridoio esterno (e. g. se si considera questo di pari dimensioni di quelli interni). Le celle adiacenti all’interno della stessa sequenza risultano anch’esse equidistanti e pari al valore ay. La codifica a celle segue la stessa logica della codifica a locazioni per cui l’unità più vicina al punto IO assume codice 1 mentre la più distante ha codice 200. In Fig. 1 è riportata una schematizzazione grafica delle postazioni di magazzino, la relazione tra codifica a locazioni e codifica a celle e delle distanze sopradescritte tra celle e file adiacenti. FILA 2 FILA 1 COD.LOCAZIONE {(41, 81), (361, 401), (681, 721)} SEQ 1 SEQ 2 COD.CELLA 41 Fig. 1. Rappresentazione magazzino e postazioni di prelievo con codifica semplificata.
  • 3. Viene inseguito presentato lo script implementato in Matlab per poter passare dalla codifica principale (a locazioni) a quella semplificata (a celle) dato un vettore p di locazioni di picking. function [pt] = trasformazionecodici(p, M, MM) MM è una matrice tridimensionale (dim. nfileXnpostazioniXnlivelli) che identifica le postazioni di picking nella codifica a locazioni in cui le tre dimensioni identificano il numero di fila, il livello e la posizione delle postazioni. Gli elementi della matrice rappresentano i codici locazione dati alle postazioni di picking. M è una matrice bidimensionale (dim. nfileXnpostazioni) che identifica le postazioni di picking nella codifica a celle. Le due dimensioni identificano il numero di fila e la posizione delle postazioni. La terza dimensione rappresentante il livello non è contemplata per le motivazioni espresse in precedenza. Gli elementi della matrice rappresentano i codici celle dati alle postazioni di picking. p è un vettore di lunghezza l i cui elementi rappresentano delle locazioni di magazzino secondo la codifica dettata da MM. pt è il vettore trasformato dei codici di locazione nella codifica a celle. Le due matrici sono salvate col nome disposiz_mag.mat. Costruzione della matrice delle distanze tra punti celle Per la costruzione dei percorsi che separano due celle è possibile fare riferimento alla disposizione delle celle nel magazzino. Ogni cella è caratterizzata da due coordinate X e Y che ne individuano al posizione all’interno del magazzino. La coordinata X è riferita alla sequenza a cui appartiene la cella mentre Y è riferita alla posizione della cella lungo la sequenza. Per esempio la cella 1 ha coordinate (1,1), mentre la cella 200 ha coordinate (5,40). Il percorso per raggiungere due celle situate lungo la stessa sequenza è dato semplicemente dalla differenza dei valori della coordinata Y delle due celle per la costante ay. Il percorso per raggiungere due celle poste in sequenze diverse è di due tipologie in relazione al verso di percorrenza dei corridoi ospitanti le postazioni di prelievo cui le celle si riferiscono. Si ha Return: dalla cella di partenza si torna indietro verso il corridoio principale, lo si percorre fino a raggiungere il corridoio che ospita la cella che si vuole raggiungere e si percorre tale corridoio fino al punto d’arrivo. Dr(i,j) = Y(i)*ay + Y(j)*ay + abs(X(i)-X(j))*ax;
  • 4. Traversal: dalla cella di partenza si percorre il corridoio fino a raggiungere il corridoio principale posto sul retro della struttura di stoccaggio, lo si percorre fino al corridoio ospitante la cella che si desidera raggiungere e lo si percorre fino al punto d’arrivo. Dt(i,j) = (ncelle + 1 - Y(i))*ay + (ncelle + 1 - Y(j))*ay + abs(X(i)-X(j))*ax La distanza tra due posizioni di prelievo poste in corridoi diversi sarà posta uguale alla minima distanza che si ha seguendo le due strategie di percorrenza dei corridoi. Nel seguito viene descritto lo script implementato per il calcolo della matrice delle distanze. function [D, DDI, X, Y] = matricedist(ax, ay, ncorr, ncelle) ax: costante indicante la distanza tra gli assi di due corridoi adiacenti. ay: costante indicante la distanza tra i baricentri di due celle adiacenti lungo la stessa sequenza. ncorr: numero di corridoi (e. g. di sequenze). ncelle: numero di celle per ogni corridoio. D: matrice simmetrica dim( ncorrXncelle) delle distanze tra le celle. DDI: matrice simmetrica delle stesse dimensioni di D a valori in {R, T, A, I, S} indicante il tipo di percorso tra celle. R: percorso Return tra le celle. T: percorso Traversal tra le celle. A: percorso in Avanti seguendo la numerazione delle celle nel corridoio. I: percorso in Indietro seguendo la numerazione delle celle nel corridoio in modo regressivo. S: presente lungo la diagonale principale. Questa distanza potrebbe essere richiesta quando è richiesta la distanza tra la cella e se stessa che ovviamente è uguale a zero. Questa eventualità si ha quando devono essere prelevati articoli che sono presenti a diversi livelli dell’impianto di stoccaggio o l’uno in fronte all’altro (ad ognuno dei tre possibili livelli). Visto che tali codici sono inclusi all’interno di un unico codice semplificato è possibile che nella lista di prelievo semplificata il codice semplificato appaia più volte (questo non deve comunque preoccupare poiché il codice principale è sempre rintracciabile attraverso la posizione all’interno della lista originaria data quella semplificata). Questo inoltre ha l’implicazione che durante il processo di ricerca della soluzione tali celle verranno visitate verosimilmente in successione come a logica ci si aspetterebbe di fare. Questa semplificazione non ha quindi implicazioni significative sulla calcolo della soluzione.
  • 5. Costruzione del vettore delle distanze tra punti di prelievo e punto IO Per il calcolo della soluzione bisogna considerare la distanza intercorrente fra le celle e il punto di IO. Tale distanza dipende dalla posizione della cella all’interno del centro di stoccaggio e dalla posizione del punto IO. Esso è posto a lato struttura in prossimità della cella 1. La distanza tra una qualsiasi cella e il punto IO sarà pari alla distanza tra la cella e il corridoio principale, più la distanza tra il corridoio ospitante la cella e il corridoio 1, più la distanza tra quest’ultimo ed il punto IO. function [DIO] = distanzaIO(ax, ay, aa, ncorr, ncelle) % ax = 2, ay = 0.6, ncelle = 40, ncorr = 5, aa = 3. aa: distanza tra punto IO e corridoio principale in fronte a cella 1. DIO: vettore i cui elementi rappresentano le distanze tra il punto IO ed ogni cella. Costruzione dell’algoritmo Data una lista di prelievo nella codifica a celle l’algoritmo implementato col nome picking_genetico permette la risoluzione del problema di scheduling fin qui descritto. Dalla lista di prelievo è possibile generare una popolazione iniziale di sequenze di prelievo eseguendo delle permutazioni su questa. È possibile definire la numerosità della popolazione come parametro di input dello script. Definita una popolazione ad ogni iterazione è valutata la funzione di fitness di ogni elemento della popolazione. Essa è pari all’inverso della distanza totale percorsa nel ciclo di prelievo dettato dall’elemento della popolazione. Una volta calcolata la fitness per ogni individuo viene calcolata la fitness relativa. Esse vengono ordinate in modo ascendente e sommate in modo progressivo in modo da avere una funzione cumulata di tipo Pareto. In questo modo è possibile estrarre un (o più nel caso di crossover) elemento della popolazione generando un numero random e ricercandolo all’interno della funzione cumulata prima trovata. Esso sarà verosimilmente l’individuo con fitness migliore. Sull’individuo, o individui, estratti si devono applicare uno dei tre operatori evolutivi quali la riproduzione, il crossover o la mutazione. La scelta dell’operatore da applicare è data attraverso la generazione di un numero random che si confronta con le probabilità (definite a priori) di applicazione degli operatori. La riproduzione consiste semplicemente nel ricopiare l’individuo scelto precedentemente nella nuova popolazione al posto dell’individuo attualmente peggiore.
  • 6. Il crossover si applica a due individui scambiando delle sottoparti delle due sequenze tra loro. Nel nostro caso viene scelto un gene e viene scambiato il suo valore con il gene scelto dell’altro individuo. In questo modo si generano due nuovi individui che presentano le caratteristiche dei due “genitori”. Tuttavia bisogna effettuare un’altra operazione sui due “figli” che elimini la ridondanza del valore del gene scambiato (e. g. sostituiamo al posto del valore ridondante il valore del gene precedentemente scambiato). Infine i due nuovi individui sono copiati nella nuova generazione al posto degli individui con valore di fitness peggiore. La mutazione si applica ad un solo elemento scambiando la posizione di due geni e ricopiando tale individuo mutato al posto dell’individuo con valore di fitness peggiore. Nel seguito viene descritto lo script implementato. function [seq, sol, PP, FFF, Iseq, Xseq, Yseq] = picking_genetico(pt, D, DIO, DDI, X, Y, MAXiter, pr, pm, pc, npool) pt: è la lista di prelievo con codifica a celle. MAXiter: numero di iterazioni. pr: probabilità di riproduzione. pc: individua la probabilità di crossover attraverso pc – pr. pm: individua la probabilità di mutazione attraverso 1- pc. npool: dimensioni popolazione. seq: soluzione dell’algoritmo nella codifica a celle. sol: valore del percorso associato alla sequenza-soluzione. PP: popolazione finale. FFF: vettore dei valori di fitness degli individui migliori ad ogni iterazione. Iseq: vettore indicante la tipologia di percorso tra una cella e la successiva all’interno della sequenza di prelievo dettata da seq. Xseq: restituisce la posizione di corridoio della cella. Yseq: restituisce il numero di postazione di prelievo all’interno del corridoio dato in Xseq.
  • 7. Per ottenere nuovamente la codifica a locazioni è possibile richiamale lo script trasfcodinver.m come descritto in seguito. function [pinv] = trasfcodiciinver(p, pt, seq) dato il vettore p della sequenza originale, il vettore pt della sequenza a codifica a celle e il vettore seq della sequenza soluzione dell’algoritmo, restituisce il vettore pinv della nuova sequenza, espressa secondo la codifica a locazioni. Nel seguito si presenta uno script che raccoglie tutte le funzioni viste precedentemente. function [S, Iseq, sol] = pickinggeneticoaggregato(p,M,MM,ax,ay,aa,ncorr, ncelle, MAXiter, pr, pm, pc, npool) S racchiude in un unica matrice pinv, Xseq e Yseq. Costruzione dell’interfaccia grafica L’interfaccia grafica è costruita attraverso il Toolbox di Matlab Guide. Essa consta di due file GPkI.m e GPkI.fig. il primo contiene la parte di codice mentre il secondo la parte grafica. Per lanciare la maschera basta digitare GPkI dal Command Window di Matlab posizionandosi all’interno della cartella genetico grafico. Essa richiama le funzioni trasformazionecodici., picking_genetico.m e trasfcodicinv.m viste in precedenza. Necessita, invece, delle matrice delle M, MM, D, DDI, DIO, X, Y che sono caricate nel Workspace al lancio di GPkI e sono salvate nei file .mat disposiz_mag, matricedist_out e distanzaIO_out. Quest’ultimo modo di operare segue dal voler mantenere separate le due fasi di definizione dei parametri dell’impianto e la gestione del ciclo di prelievo. All’interno della maschera troviamo i seguenti oggetti: Inserisci lista di prelievo: campo in cui inserire la lista di prelievo (codici postazioni con codifica a locazioni). Pannello grafici: è possibile visualizzare in tempo reale l’evoluzione della popolazione e della Fitness Function migliore cliccando sul comando Visualizzazione. In basso al pannello è riportata la distanza totale del percorso migliore ottenuto all’ultima iterazione.
  • 8. Pannelli di Risposta: i pannelli di risposta sono 3 e sono situati a lato destro della maschera. Il pannello Codice a celle restituisce la sequenza di Input secondo la codifica a celle ed il risultato del calcolo secondo la stessa codifica. Il pannello Posizione restituisce le posizioni di corridoio e di profondità lungo i corridoi di servizio. Il pannelo Output restituisce la sequenza con fitness migliore all’ultima iterazione e le rispettive indicazioni sul percorso. Pannello Parametri e Calcolo: in questo pannello si possono definire i parametri di calcolo quali la numerosità della popolazione, il numero di iterazioni e le probabilità dei tre operatori. In figura 2 è riportata un’immagine della maschera al completamento del calcolo. Fig. 2. Output di GPkI.