Simulazione a eventi discreti in Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy offre tre tipi di risorse:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Creare una resource
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Richiedere una risorsa
# Apri richiesta risorsa with resource_1.request() as request:# Effettua la richiesta yield request# Quando la risorsa è disponibile yield env.timeout(event_duration)
Variazione della risorsa precedente
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Alcuni processi possono avere priorità su altri
Esempio: tecnico
Uso simile a simpy.Resource()
Richiesta con priorità più alta
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Richiesta con priorità più bassa
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Utile per modellare produzione/consumo di materia omogenea e indifferenziata
Può essere continua (es. acqua) o discreta (es. mele)
Esempio: riserve di benzina in un distributore.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Aggiungere e rimuovere dal serbatoio
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Quantità attuale nel serbatoio
tank_1.level
Capacità totale del serbatoio
tank_1.capacity
Creare uno store
store_1 = simpy.Store(
env, capacity=2)
Simile a simpy.Container() ma consente di memorizzare oggetti diversi
A differenza della più astratta "quantità" nei container
yield store_1.put("item_1")
yield store_1.get()
Elenco degli oggetti disponibili
store_1.items
Capacità dello store
store_1.capacity
Esempio
Situazione attuale: 1 cassiere
simpy.Resource(env, capacity=1)...
ora: 23.7 min | Cliente 30 > Completato
Scenari simulati: n cassieri
simpy.Resource(env, capacity=2)...
ora: 13.2 min | Cliente 30 > Completato
simpy.Resource(env, capacity=3)...
ora: 8.6 min | Cliente 30 > Completato
simpy.Resource(env, capacity=4)...
ora: 8.6 min | Cliente 30 > Completato
Simulazione a eventi discreti in Python