Det er mere end fem år siden, at jeg dimitterede fra universitetet og kom ind i erhvervslivet. Siden da har jeg dedikeret det meste af min tid til produktions- og forsyningskædeplanlægning. Udover ERP-baserede modelimplementeringer, såsom fx partistørrelsesoptimering eller produktionsnivellering i SAP, har jeg altid været stærkt involveret i simuleringsmodellering af diskrete hændelser. Jeg har arbejdet med flere værktøjer, og i denne artikel vil jeg opsummere et ende-til-ende-simuleringsbaseret analyseværktøj for fjerkræforsyningskæden , som jeg implementerede i Python.
Simulering fremmer bedre forståelse af kontrollogikker
Simuleringsværktøjet beskrevet af mig i denne artikel hjalp brugeren på flere måder:
- Bedre forståelse af eksisterende processer og afhængigheder i hele forsyningskæden
- Fælles reference til diskussion mellem de forskellige interne interessentgrupper
- Forudsige virkningen af visse politik- og kontrolflowjusteringer
- End-to-end forsyningskædens omkostninger gennemsigtighed
- Værktøj til uddannelse af nye supply chain managers
Værktøjet optimerede en vertikalt integreret fjerkrækødforarbejdningsvirksomhed i Middelhavsregionen. De lovgivningsmæssige rammer for fjerkrækødavl er omfattende, og selvom de regulerende myndigheder ikke var involveret i udviklingen og implementeringen af dette simuleringsværktøj, kunne det meget vel tjene de regulerende myndigheder på lignende måder. Regulatoriske begrænsninger, såsom f.eks. All-In All-Out-regler (også kendt i f.eks. svineproduktion), blev dog naturligvis taget i betragtning af modellen og implementeret i overensstemmelse hermed.
Beskrivelse af konceptuel fjerkræforsyningskædemodel
Fjerkræforsyningskæden omfatter mange faser. Nedenstående figur giver et overblik.
De relevante enheder, som jeg gerne vil fremhæve for et konceptuelt overblik, er følgende:
- Æggebonde. Producerer og leverer æg til rugeriet.
- Klækkeri. Udklækker æg i en række processer, nemlig inkubation, rugning og rugning.
- Landmand. Modtager kyllingerne fra rugeren og dyrker dem i bondegårde.
- Slagteanlæg. Modtager eller afhenter kyllinger fra bondegårdene, når de har nået slagteklar vægt.
- Kødprocessor. Trækker efterspørgsel efter slagtekroppe til kødforarbejdning fra slagteriets færdigvarelager.
- Distributør. Afgiver ordrer på færdigvarer hos kødforarbejderen, opbevarer midlertidigt og videredistribuerer forarbejdet kød til markeder.
- Marked. Afgiver bestillinger hos distributøren og sælger forarbejdet kød på markedet til slutforbrugeren.
Nedenstående konceptuelle modeltegning giver et andet overblik over de processer, der tages i betragtning af fjerkræforsyningskædesimuleringsværktøjet.
Fjerkræforsyningskæden er en stærkt reguleret forsyningskæde. Som nævnt er regulatoriske begrænsninger en del af modellen. Sådanne regler har f.eks. til formål at reducere risikoen for sygdomsspredning, og de er fælles for kødproduktion ud over fjerkrækødproduktion (f.eks. svineproduktion).
Styrelogikker, reguleringer og informationsflowmodeller
Simuleringsmodellen omfatter en bred vifte af kontrollogikker, regler og ordrerelaterede informationsstrømme. Nedenstående tabel giver et overblik.
STAGE, KATEGORI | BESKRIVELSE | IMPLEMENTERING |
Ægleverandør, kundeordrelogik | Ægleverandør afsender baseret på ordrelog | Med et specificeret interval tjekker ægleverandøren ordrebogen og sender den ønskede mængde |
Ægleverandør, ordreforsendelseslogik | Fuld ordremængde afsendt | Fuld mængde afsendes samme dag, men ankommer efter en specificeret transporttid |
Udklækkeri, lagerstyringslogik | Inventar for indkommende æg forud for rugemaskinen | Ordrepunktspolitikker styrer ægbeholdningen. Når efterspørgslen falder under et specificeret niveau, afgives en ordre hos ægleverandøren, der er målrettet mod et fast højere lagerniveau |
Ruge-, inkubations- og rugeproces | Inkubations- og udklækningsprocesser i sort boks | Inkubation og udrugning har en specificeret varighed og en specificeret produktionskapacitet. Der er også et specificeret udrugningssuccesforhold og en specificeret dødelighed |
Rugleri, ruger ved ruger | Brooder proces følger inkubation og vellykket udrugning | Inden unger sendes til en bondegård, bliver de ved yngelen i en bestemt varighed. Dødelighedsrater er også defineret for denne proces |
Klækkeri, flok tildeling til rugerier | Efter at ungerne har opholdt sig i ruger i et minimumsbestemt tidsrum, sendes de til en bondegård | Gården skal være klar til en ny flok, og tom og høns kan ikke blandes. Bondegårde har forskellig kapacitet, da de er placeret på forskellige gårde. Kyllinger bør placeres i stalde med mindst overskydende kapacitet |
Farm coops, kylling vækst | Kyllingevækst i gården adskiller sig fra kyllingearter og køn | Kyllinger, afhængigt af deres køn og art, opholder sig i gården i et bestemt tidsrum. Denne varighedsperiode modellerer kyllingens vækst indtil slagteklar vægt |
Farm coops, sender kylling kalkun til slagtning | Kyllinger sendes til slagteri, når de er modne | Når kyllingerne har nået slagteklar vægt, sendes de videre, hvis slagteriet har kapacitet. Ellers venter de i bondegården. Herefter bliver gården renset. På dette stadium er relevante regulatoriske regler overvejet og indlejret i simuleringsmodellen |
Slagteri, slagteproces | Daglig slagteproces | Slagteriet slagter kylling op til en specificeret maksimal daglig produktionskapacitet |
Slagteri, slagtekropopgørelse | Produktion på lager, men efterspørgselsdrevet varelager | Kødforarbejderen trækker sin efterspørgsel efter slagtekroppe fra slagteriets beholdning |
Slagteri, ordrebeholdning | Kødforarbejdningsvirksomheden placerer efterslæb på slagteriet, hvis slagtekropbeholdningen ikke er tilstrækkelig | Efterslæbet er opfyldt i den kommende produktionscyklus, og slagtekroppen produceres kun på lager, hvis der ikke er åbne ordrer |
Slagteri, eksternt kyllingekøb | Ekstern kylling købes, hvis slagteriets beholdning og den nuværende slagteprocesvolumen er for lav | Hvis efterspørgslen efter fjerkrækroppe er højere end slagtekroppen, og slagtekroppen i øjeblikket i produktion, indkøbes og slagtes eksternt fjerkræ, hvilket optager produktionskapaciteten i overensstemmelse hermed. Eksternt indkøbt fjerkræ slagtes altid først |
Kødprocessor, efterspørgsel efter slagtekrop | Fordeling af efterspørgsel efter slagtekroppe, der skal trækkes fra slagteriets lagerbeholdning | Forskellige efterspørgselsmodeller kan implementeres. For eksempel kan en deterministisk eller stokastisk efterspørgselsplan implementeres med specificeret efterspørgsel efter periode |
Hele logikken opsummeret i ovenstående tabel blev parametriseret. Relaterede værdier kan justeres i en konfigurationsfil. Dette giver brugerne mulighed for at køre forskellige scenarier og derved opnå en bedre forståelse af forsyningskæden.
Simulationsmodelimplementering i Python ved hjælp af SimPy
Gennem de seneste 5 års modeludvikling har jeg arbejdet med forskellige værktøjer og software til simuleringsmodellering af diskrete hændelser. Nogle populære værktøjer er FlexSim, simio, AnyLogic, SIEMENS Plant Simulation, VisualComponents, Simul8 og mange flere. Der findes mange kommercielle simuleringsværktøjer , og alle de netop nævnte er kommerciel software. Denne model udviklede jeg imidlertid i SimPy , en simuleringsramme for diskret hændelse i Python. Denne ramme er gratis – men det var ikke grunden til, at jeg valgte den.
SimPy er ren kode. Den har ikke en grafisk brugergrænseflade (GUI). Dvs. modeludvikleren kan ikke bruge en GUI til modelimplementering. Desuden har SimPy ikke nogen indbygget modelvisualisering. Med andre ord er det meget abstrakt at bygge og verificere en model i SimPy – men da det er ren Python-kode, er det også meget fleksibelt. Til forsyningskædemodellering med mange forskellige entiteter og en bred vifte af mulige kontrollogikker gør dette SimPy til et godt valg. I kombination med objektorienteret programmering, dvs. Objektorienteret programmering er et krav i dette tilfælde, da det giver mulighed for udvikling af rammer og passende strukturering af den meget komplekse opgave at modellere en forsyningskæde med alle dens processer og enheder. Brugere af modellen skal dog have en vis forståelse af Python.
Eksemplarisk model output og resultater
I dette afsnit viser jeg nogle eksemplariske modeloutput, der blev udsendt af fjerkræforsyningskædesimulatoren. Data indsamles og vises i kyllingenheder, dvs. enhedsneutral. Dette giver et solidt grundlag for beregning af relevante KPI’er oven i købet. Relevante KPI’er kunne være omkostninger og vægte (f.eks. af kylling eller slagtekrop). Sådanne KPI’er kan implementeres for brugere efter behov ved at tilføje nogle få linjer kode til forsyningskædesimulatoren – eller ved at justere (dvs. udskifte) nogle eksisterende kodelinjer.
Nedenstående skema viser lagerudviklingen på slagteriet, dvs. slagtebeholdningen. Et for stort lager ville resultere i høje driftsomkostninger, og i sidste ende ville det betyde, at slagtekroppen skulle bortskaffes på grund af udløbsdatoer og relaterede politikker.
Ovenstående diagram viser lagerudviklingen på slagteriet gennem et simuleret år med 52 uger (simuleringsperioder). I denne kørsel var hver uge en iteration af simuleringskørslen. Lagerudvikling på slagteriet er direkte forbundet med efterslæbsudvikling. Denne udvikling kan ses i nedenstående graf.
Som det fremgår af ovenstående skema, er der ikke opbygget noget slagtekroplager på slagteriet. Dette skyldes, at slagteriet altid løb bagefter kødforarbejdningsefterspørgslen, hvilket resulterede i et betydeligt efterslæb.
På grund af de eksisterende ordrebeholdningsrelaterede ordrepolitikker på slagteriet, udløser høje ordrer store indkøbsordrer hos eksterne fjerkræbedrifter. Da eksternt indkøbt fjerkræ altid slagtes først, resulterer dette i et betydeligt lager hos yngleren. Rudderen venter på, at gårdens coops skal rydde og har i denne simuleringskørsel ingen kapacitetsbegrænsninger i den forbindelse.
Da rugeren selv ikke har nogen kapacitetsbegrænsning, blev rugeriet således ikke påvirket af produktionsflaskehalsen nedstrøms. Dette bliver tydeligt fra nedenstående graf, der visualiserer ægbeholdningen på rugeriet.
Udviklingen af ægbeholdningen på rugeriet var stabil under hele simuleringen.
Afsluttende bemærkninger om simulering af fjerkræforsyningskæden
I denne artikel demonstrerede jeg, hvordan simulering af diskrete hændelser er et effektivt værktøj til modellering og analyse af fjerkræforsyningskæder. Fordelene ved at implementere en forsyningskædesimulator er mangfoldige, hvor alle fordele i sidste ende sigter mod omkostningsreduktion i forsyningskæden og forbedring af tilgængelighed (dvs. kundetilfredshed). Dette er især vigtigt i en fjerkræforsyningskæde, da høje lagerbeholdninger resulterer i f.eks. udløb og bortskaffelse af slagtekroppen. Implementering af en forsyningskædesimulator hjalp mine brugere med at få en bedre forståelse af eksisterende logikker og politikker for forsyningskædekontrol og udstyrede forsyningskædens ledelsesteam med et effektivt kommunikations-, trænings- og analyseværktøj.
Hvis du er interesseret i simulering af diskret hændelse, er du muligvis også interesseret i nogle af følgende relaterede publikationer:
- Link: Proceduremodel for diskret hændelsessimulering
- Link: Maskinlæring og simulering af diskret hændelse
- Link: Simre i R til simulering af diskret hændelse
- Link: Simulering af krangård i AnyLogic
- Link: AGV simulering af del routings i AnyLogic
Industriingeniør som gerne beskæftiger sig med optimering, simulation og matematisk modellering i R, SQL, VBA og Python
Leave a Reply