TdP-prove-finali / Introduzione

Istruzioni e documentazione per la proposta e lo svolgimento delle prove finali relative al corso di Tecniche di Programmazione.
http://bit.ly/tecn-progr
Apache License 2.0
4 stars 13 forks source link

Software per la gestione degli ordini di produzione e per la simulazione produttiva #95

Closed orionP22 closed 1 year ago

orionP22 commented 1 year ago

Studente proponente

S272199 Proglio Davide

Titolo della proposta

Software per la gestione degli ordini di produzione e per la simulazione produttiva

Descrizione del problema proposto

Il software si propone di realizzare un piano di produzione per stabilire le quantità di un determinato prodotto finito da produrre su un orizzonte temporale di un anno, in modo da soddisfare la domanda della clientela. A tale scopo viene impiegato un algoritmo ricorsivo nella fase di Lot Sizing in modo da ottenere una schedulazione di produzione mensile ottimale nel rispetto dei parametri limite introdotti dall’utente. La seconda parte del software procederà con la simulazione della produzione di un certo prodotto finito su una linea produttiva i cui parametri saranno introdotti dall’utente, in modo da poterne valutare le performance.

Descrizione della rilevanza gestionale del problema

In ambito produttivo è fondamentale stabilire le quantità da produrre periodicamente per ogni singolo prodotto in modo da riuscire a soddisfare la domanda dei clienti in tempo utile, rispettando la capacità produttiva a disposizione e minimizzando i costi (gestione e produzione ). Le linee produttive che si occupano della realizzazione di questi ordini produttivi devono avere performance adeguate, è quindi un problema centrale capire come quest’ultime operino in modo da comprendere se sono possibili miglioramenti che giovino alle performance.

Descrizione dei data-set per la valutazione

Il dataset su cui il software opera è stato reperito sul sito Kaggle.com (comunità di data scientist in cui è possibile trovare e pubblicare set di dati). I dati rappresentano l’ordinazione di prodotti da parte di diversi clienti dal 2018 al 2022. La tabella è costituita da 4 colonne e circa un milione di righe: -Identificativo dell’ordine -Identificativo del cliente -Data dell’ordine -Identificativo del prodotto

Descrizione preliminare degli algoritmi coinvolti

-Selezione ordini di un determinato prodotto dato in input -Compilazione piano produttivo per l'anno di interesse dato in input: -> Netting: calcolo dei fabbisogni netti mensili -> Lot Sizing: la dimensione dei lotti di produzione mensili è calcolata attraverso un algoritmo ricorsivo che stabilisce quanto produrre per ogni mese in modo da soddisfare la domanda e minimizzare i costi di gestione/produzione rispettando i vincoli di capacità produttiva. I costi di gestione corrispondono ai costi di stoccaggio, mentre i costi di produzione si distinguono in costi di produzione ordinaria, costi di produzione straordinaria e costi di produzione esterna. I costi come i vincoli di capacità produttiva ordinaria e straordinaria saranno richiesti come input all'utente. -Simulazione produzione: -> L’utente crea una linea produttiva inserendo in input i dati relativi alle sue caratteristiche (numero workstations, dati relativi a interruzioni preemptive e non-preemptive, presenza e dimensione buffer). -> Viene simulato il processo produttivo di un prodotto ricavando le prestazioni della linea (Troughput, Cycle Time, WIP) che andranno poi confrontati con i parametri worst-case, best-case e practical worst-case in modo da capire come si comporta la linea (sarebbe efficace presentare all’utente un grafico, in modo da poter ideare delle migliorie).

Descrizione preliminare delle funzionalità previste per l’applicazione software

Il software sarà utilizzabile dall’utente attraverso un’interfaccia grafica divisa in due sezioni. Nella prima sezione all’utente sarà possibile selezionare un anno e un prodotto d’interesse tra quelli presenti nel database per calcolarne il fabbisogno su un orizzonte temporale suddiviso in mesi, inoltre potrà inserire la capacità produttiva mensile per il prodotto scelto (ordinaria e straordinaria), il costo unitario di produzione (ordinaria, straordinaria ed esterna), il costo di stoccaggio per singolo prodotto, il prezzo di vendita del prodotto e la quantità iniziale disponibile a magazzino. Questi valori saranno impiegati nella fase di Lot Sizing per determinare le quantità di prodotto ottimali da produrre mensilmente e da delegare a produttori esterni per soddisfare gli ordini e minimizzare i costi. Come risultato della prima sezione di software all’utente saranno presentati il piano di produzione per il prodotto scelto, i costi di gestione (minimi) e il profitto atteso. Nella seconda sezione all’utente sarà richiesto di introdurre in input i dati relativi a una linea di produzione delegata alla produzione di un prodotto anch’esso selezionato dall’utente: -Numero workstations (max 2 o 3). -Fermi macchina preemptive (non schedulati): tempo medio tra due guasti successivi (mf), tempo medio di riparazione (mr). -Fermi macchina non-preemptive (schedulati): numero medio di jobs tra setups consecutivi (Ns), tempo medio di setup (ts) e coefficiente di variazione del tempo di setup (cs). -Dimensione buffer tra workstations. A partire da questi dati verrà simulato il processo di produzione del prodotto e come risultato saranno restituiti all’utente le performance della linea produttiva: throughput (TH), tempo ciclo (CT) e work in progress (WIP). Le performance saranno confrontate con lo scenario best case, worst case e practical worst case della linea (possibilmente attraverso un grafico, in modo che l'utente riesca a comprendere se la linea produttiva lavora in modo efficiente o se sono necessarie modifiche).

fulcorno commented 1 year ago

Il problema proposto è decisamente "classico" (non particolarmente originale), ma è adeguato dal punto di vista algoritmico ed applicativo. Temo che la dimensione dei data-set proposti possa rendere impraticabile un algoritmo di tipo ricorsivo, hai pensato a delle contromisure in merito? Algoritmi alternativi? semplificazione del problema?

Visti anche progetti simili, ritengo molto noiosa la fase di definizione della linea di produzione (occorre immettere molti parametri poco intuitivi), suggerisco di predefinire alcune linee di produzione "tipiche" già parametrizzate.

Ritengo anche fondamentale una visualizzazione grafica dei risultati.

orionP22 commented 1 year ago

Una volta calcolate le quantità da produrre per i singoli mesi dell’anno di interesse, si andrà a diminuire la capacità produttiva ordinaria dei corrispettivi mesi (producendo nel corrispettivo mese di interesse si ha il costo minimo). Nel caso la quantità da produrre per un mese ecceda la capacità ordinaria corrispettiva, verrà applicato l’algoritmo ricorsivo su questa eccedenza in modo da distribuirla nei mesi precedenti nel modo meno dispendioso possibile. La mia intenzione era lavorare sulle singole unità di prodotto, ma nel caso la ricorsione risulti troppo macchinosa, per semplificare il problema, potrei usare lotti di produzione fissi (non è possibile produrre un'unità per volta). Utilizzando ad esempio lotti di produzione da 5 unità l’algoritmo ricorsivo opererà di 5 unità in 5 unità e non di una in una, in questo modo sarà possibile ridurre le tempistiche algoritmiche. Il gran numero di righe della tabella è influenzato oltre che dal gran numero di prodotti (1367) anche dal fatto che ogni riga rappresenta l’ordinazione di un singolo prodotto (la quantità è sempre 1), di conseguenza se per un determinato mese vengono ordinate 100 unità di un determinato prodotto nel database vi saranno 100 righe. Per quanto riguarda la seconda parte del problema sono d’accordo con il suo suggerimento riguardo alla definizione di alcune linee standard.

fulcorno commented 1 year ago

ok, la proposta è approvata, scusa per il ritardo nella risposta