-
Notifications
You must be signed in to change notification settings - Fork 0
/
Source.py
68 lines (53 loc) · 2.43 KB
/
Source.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
54
55
56
57
58
59
60
61
62
63
64
65
#millor treballar amb define o algun sistema simular a l'enum de C++
#from enumeracions import *
from Server import *
import numpy as np
import random
#from scipy.stats import triang
class Source:
server = None
entitatsCreades = 0
def __init__(self, scheduler, id):
# inicialitzar element de simulació
self.entitatsCreades = 0
self.scheduler = scheduler
self.my_id = id
def crearConnexio(self, server):
self.server = server
def tractarEsdeveniment(self, event):
if (event.type == 'SIMULATION_START'):
self.simulationStart(event)
if (event.type == 'NOVA_MADURACIO'):
self.processNextArrival(event)
def simulationStart(self, event):
nouEvent = self.properaArribada(0)
self.scheduler.afegirEsdeveniment(nouEvent)
self.state = "idle"
def processNextArrival(self, event):
# Cal crear l'entitat
#entitat=self.crearEntitat(self)
# Mirar si es pot transferir a on pertoqui
#transferir entitat (es pot fer amb un esdeveniment immediat o invocant a un métode de l'element)
#server.recullEntitat(event.time,entitat)
self.server.novaMaduracio(event.time)
# Cal programar la següent arribada
nouEvent = self.properaArribada(event.time)
self.scheduler.afegirEsdeveniment(nouEvent)
'''def crearEntitat(self) {
self.server.madurarTaronja(self)
}'''
def properaArribada(self, time):
# cada quan generem una arribada (aleatorietat)
tempsEntreArribades = self.calcularTempsEntreArribades()
# incrementem estadistics si s'escau
self.entitatsCreades = self.entitatsCreades + 1
#self.state = "busy"
# programació primera arribada
return Event(self, 'NOVA_MADURACIO', time + tempsEntreArribades, None)
def calcularTempsEntreArribades(self):
#random.triangular(low, high, mode)¶ Return a random floating point number N such that low <= N <= high and with the specified mode between those bounds.
#The low and high bounds default to zero and one. The mode argument defaults to the midpoint between the bounds, giving a symmetric distribution.
num = random.triangular(129, 167, 148) #distribució per la maduració d'una taronja
return num
def recollirEstadistics(self):
print("Source " + str(self.my_id) + " Número d'entitats creades: " + str(self.entitatsCreades) )