/
simulatore.py
53 lines (41 loc) · 1.99 KB
/
simulatore.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from random import randint
import numpy as np
from utility import printLog
from variabili import upNumClientiTot, setLambda, appendmuM, appendTempiAttesa, _lambdaPArrivi, _dateTest, upHofinito, upnumeroClientiPacchi, upnumeroClientiPensioni
# ###################################################################################
# ############################## SIMULATORE #########################################
# ###################################################################################
def source(env, risorse):
numClienti = 60 # np.random.poisson(60, 1)[0] # 34.95 = 1/(103/3600)
upNumClientiTot(numClienti)
cliente = 0
for x in range(numClienti):
cliente += 1
c = risorsa(env, 'Cliente' + str(cliente), "tagliaCode", risorse)
env.process(c)
t = np.random.exponential(_lambdaPArrivi, size=None)
setLambda(t)
yield env.timeout(t)
def risorsa(env, name, tipoRisorsa, risorse):
arrive = env.now
printLog(_dateTest, '%7.4f - %s - Sono arrivato in %s' % (arrive, name, tipoRisorsa))
with risorse[tipoRisorsa][0].request() as req:
yield req
wait = env.now - arrive
appendTempiAttesa(tipoRisorsa, wait)
printLog(_dateTest, '%7.4f - %s - Ho aspettato %s' % (env.now, name, wait))
tempoDiServizio = (np.random.exponential(scale=risorse[tipoRisorsa][1], size=None)) if tipoRisorsa != "tagliaCode" else 7.5
appendmuM(tipoRisorsa, tempoDiServizio)
yield env.timeout(tempoDiServizio)
printLog(_dateTest, '%7.4f - %s - Ho finito in %s' % (env.now, name, tipoRisorsa))
if tipoRisorsa == "tagliaCode":
if randint(0, 100) < 83:
upnumeroClientiPensioni()
c = risorsa(env, name, "sportelloPensioni", risorse)
env.process(c)
else:
upnumeroClientiPacchi()
c = risorsa(env, name, "sportelloPacchi", risorse)
env.process(c)
else:
upHofinito()