Visualisering af statistik i salabim

Efter at have introduceret salabim til simulering af diskret hændelse ( DES ) i Python vil jeg følge op på dens statistikrelaterede funktionalitet. Det gør jeg i dagens blogindlæg: Statistik med salabim !

Simulering af diskret begivenhed, jobshop og Python

Diskret-hændelsessimulering er en af ​​flere simuleringsmetoder, der kan anvendes af SCM-analytikere, produktionsplanlæggere og driftsanalytikere. Nedenstående diagram giver en grov kategorisering af disse simuleringsmetoder .

statistik med salabim til diskret hændelsessimulering i Python

Simulering af diskret hændelse anvendes hovedsageligt til operative og detaljerede mål, såsom f.eks. produktionsplanlægning, fabriksdesign eller design og forbedring af forretningsprocesser. Det er den passende metode til komplekse systemer beskrevet godt af sekventielle hændelser og køer. Her er nogle eksempler på simuleringsbrug, som du kan læse til en start:

En jobshop er for eksempel et system, der kan drage fordel af simulering af diskret hændelse til dets design og/eller fortsatte forbedringer.

Jobshop simulering og statistik med salabim

Nedenfor implementerer Python-koden en jobshop- simuleringsmodel i Python ved hjælp af salabim . Jeg har brugt dette simple eksempel i tidligere blogindlæg. I dette tilfælde modellerer vi en forenklet jobshop med 2 maskiner og 100 jobs. Opgaver kan behandles på enhver maskine, men kun af én maskine ad gangen. Maskiner behandler job med en specificeret behandlingstid (varighed). Maskiner har i dette tilfælde en kapacitet på 1. Når en maskine har behandlet et job, er det færdigt. Produktionsplanen er i dette tilfælde forenklet til en vis grad og modelleret af en tilfældig jobgenerator. Jobgeneratoren opretter nye job med tilfældigt fordelte intervaller med en specificeret middeltid mellem job. Koden implementerer animeret statistik udover modelimplementering og simuleringsudførelse.

Den første del importerer salabim og opsætter konstanter samt relevante datatyper (Produktklasse). Produktet udvider salabim -komponentklassen. Den implementerer en procesmetode. Denne metode bruges til at anmode om og opbevare en ressource i en specificeret varighed .

import salabim as sim

SEED = 42
MACHINES = 2    # amount of machines
INTERVAL = 3    # mean time between two jobs
DURATION = 5.0  # mean processing time of a job
JOBS = 100      # number of jobs that have to be completed

class Product(sim.Component):
    def process(self):
        yield self.request(machines)
        print(f"{self.name()} started at time {env.now()}")
        yield self.hold(DURATION)
        print(f"{self.name()} completed at time {env.now()}")

Den næste del sætter simuleringsmiljøet op og definerer ressourcerne. Delkilden, dvs. komponentgeneratoren, er også defineret i dette afsnit:

env = sim.Environment(random_seed=SEED)
machines = sim.Resource("machines", capacity=MACHINES)

sim.ComponentGenerator(Product, iat=sim.Exponential(INTERVAL), force_at=True, number=JOBS)

Til sidst implementeres simuleringskørsel og animation.

env.animate(True)
env.modelname("jobshop demonstration")

machines.claimers().animate(x=700, y=100, title="work in progress", direction="e")

machines.requesters().animate(x=200, y=100, title="work waiting", direction="e")

machines.claimers().length.animate(x=10, y=300, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work in prgress")

machines.requesters().length.animate(x=10, y=500, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work waiting")

env.speed(5)
env.run(100)

Dette resulterer i en animation. Nedenstående billede viser et øjebliksbillede af animationen.

Animationen viser igangværende arbejde og efterslæb / ventende arbejde gennem tiden.

Relateret indhold

Hvis du er interesseret i simulering af diskrete hændelser og dens applikationer eller dens specifikke implementeringer i f.eks. R, AnyLogic, VisualComponents og Python, så tjek følgende SCDA-publikationer:

You May Also Like

Leave a Reply

Leave a Reply

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.