def test3(): print('test3') sim.Environment(random_seed=1234567) print('string') d = sim.Distribution('Exponential (1000)') sample_and_print(d, 5) sim.random_seed(1234567) sample_and_print(d, 5) sim.random_seed(None) sample_and_print(d, 5) print('triangular') tr = sim.Triangular(1, 5, 3) sample_and_print(tr, 5) print('uniform') u = sim.Uniform(1, 1.1) sample_and_print(u, 5) print('constant') c = sim.Constant(10) sample_and_print(c, 5) print('normal') n = sim.Normal(1, 2) sample_and_print(n, 5) sample_and_print(n, 5) print('cdf') cdf = sim.Cdf((1, 0, 2, 25, 2, 75, 3, 100)) sample_and_print(cdf, 5) sample_and_print(cdf, 5) print('pdf') pdf = sim.Pdf((1, 2), 1) sample_and_print(pdf, 5) print('pdf 1') pdf = sim.Pdf((sim.Uniform(10, 20), 10, sim.Uniform(20, 30), 80, sim.Uniform(30, 40), 10)) sample_and_print(pdf, 5) print('pdf 2') pdf = sim.Pdf( (sim.Uniform(10, 20), sim.Uniform(20, 30), sim.Uniform(30, 40)), (10, 80, 10)) sample_and_print(pdf, 5) print('pdf 3') pdf = sim.Pdf(('red', 'green', 1000), (10, 1, 10)) sample_and_print(pdf, 5)
def test7(): print('test7') class X1(sim.Component): def process(self): yield self.request(r1,5,r2,2,greedy=True,fail_at=5) yield self.passivate() class X2(sim.Component): def process(self): yield self.request(r1,8,r2) yield self.passivate() class X3(sim.Component): def process(self): yield self.request(r1,7) yield self.passivate() de=sim.Environment(trace=True) x1=X1() x2=X2() x3=X3() X4=sim.Component() r1=sim.Resource(capacity=10,anonymous=True) r2=sim.Resource() r3=sim.Resource() q={} for i in range(1,5): q[i]=sim.Queue() x1.enter(q[1]) x1.enter(q[2]) x1.enter(q[3]) x2.enter(q[1]) x3.enter(q[1]) env.run(10) r2.capacity(2) env.run(20) print(sim.default_env) print(x1) print(x2) print(x3) print (q[1]) print (q[2]) print (q[3]) print (q[4]) print(r1) print(r2) print(r3) d=sim.Exponential(10) print(d) print(sim.Uniform(1,2)) print(sim.Triangular(40,150,55)) print(sim.Distribution('Constant(5)'))
finwaitingline = sim.Queue("finwaitingline") paintwaitingline = sim.Queue("paintwaitingline") deckwaitingline = sim.Queue("deckwaitingline") assemblywaitingline = sim.Queue("assemblywaitingline") machiningwaitingline = sim.Queue("machiningwaitingline") printingwaitingline = sim.Queue("printingwaitingline") wheelwaitingline = sim.Queue("wheelwaitingline") #armazens armazem = sim.Queue("armazem") armazem2 = sim.Queue("armazem2") armazem3 = sim.Queue("armazem3") armazem4 = sim.Queue("armazem4") #distributions pressing_time = sim.Triangular(95, 105, 100) cutting_time = sim.Triangular(50, 70, 60) finishing_time = sim.Triangular(5, 25, 15) painting_time = sim.Triangular(10, 30, 20) foundry_time = sim.Triangular(50, 60, 55) machining_time = sim.Triangular(55, 65, 60) printing_time = sim.Triangular(15, 25, 20) pack_d_time = sim.Triangular(0, 20, 10) pack_w_time = sim.Triangular(25, 35, 30) assembly_time = sim.Triangular(20, 40, 30) #configs env.run(till=24 * 60 * 24) print(wheel_pack.capacity(), 'conjunto de rodas') print(skate_unity.capacity(), 'skates')
def process(self): global nAppointmentsDict, totDaysInWaitingListDict, visitStatus, patientAppointmentsDayDict, patientAppointmentsStatusDict, patientAppointmentsWaitingDaysDict if trace: print( f"Appointment schedule {self.nAppointment} -> Patient: {self.patientId}" ) if self.info['Visit status'] == 'Cancelled Pat': # Attendo un valore tra 0 e i giorni che mancano alla visita per cancellare l'appuntamento yield self.hold( sim.Uniform(0, int(self.info['relative_visit_day'] - env.now()))) if trace: print( f"Appointment cancelled from Pat {self.nAppointment} -> Patient: {self.patientId}" ) elif self.info['Visit status'] == 'Cancelled HS': yield self.passivate() if trace: print( f"Appointment cancelled from HS {self.nAppointment} -> Patient: {self.patientId}" ) elif self.info['Visit status'] == 'NoShowUp': if np.random.choice( 2, 1, p=[ 1 - float(config['Probabilities']['noShowUpNotice']), config['Probabilities']['noShowUpNotice'] ]) == 0: # Attendo fino al giorno dell'appuntamento yield self.passivate() if str(env.now())[-5:] == ".0001": yield self.hold(sim.Uniform(8, 18, "hours")) # Richiedo una risorsa slot yield self.request(slots) if trace: print( f"Appointment no show up {self.nAppointment} -> Patient: {self.patientId}" ) # Tengo lo slot occupato per 15 minuti yield self.hold(env.minutes(timeSlot)) self.release(slots) else: yield self.hold( sim.Triangular( 0, int(self.info['relative_visit_day'] - env.now()), math.floor( int(self.info['relative_visit_day'] - env.now())) * 90 / 100)) self.leave(appointmentScheduleQueue) self.info['Visit status'] = 'Cancelled Pat (noShowUp)' ReplaceAppointment(appointment=self) elif self.info['Visit status'] == 'Done': # Attendo fino al giorno dell'appuntamento yield self.passivate() if str(env.now())[-5:] == ".0001": yield self.hold(sim.Uniform(8, 18, "hours")) # Richiedo una risorsa slot yield self.request(slots) # Richiedo una risorsa dottore yield self.request(doctors) # Quando il dottore è disponibile faccio la visita di 15 minuti yield self.hold(env.minutes(timeSlot)) # Rilascio la risorsa dottore self.release(doctors) self.release(slots) if trace: print( f"Appointment done {self.nAppointment} -> Patient: {self.patientId}" ) if validate: if self.info['Visit status'] == 'Cancelled Pat (noShowUp)': self.info['Visit status'] = 'Cancelled Pat' nAppointmentsDict['TriedToReplaced'] += 1 if self.patientId not in patientAppointmentsStatusDict: patientAppointmentsStatusDict[self.patientId] = { "NoShowUp": 0, "Done": 0, "Cancelled Pat": 0, "Cancelled HS": 0 } nAppointmentsDict['Tot'] += 1 visitStatus[self.info['Visit status']] += 1 patientAppointmentsStatusDict[self.patientId][ self.info['Visit status']] += 1 if self.info['Visit status'] == 'Done' or self.info[ 'Visit status'] == 'NoShowUp': if self.patientId not in patientAppointmentsDayDict: patientAppointmentsDayDict[self.patientId] = [] patientAppointmentsDayDict[self.patientId].append( int(env.now())) if self.patientId not in patientAppointmentsWaitingDaysDict: patientAppointmentsWaitingDaysDict[self.patientId] = 0 patientAppointmentsWaitingDaysDict[self.patientId] += int( env.now()) - self.startWaitingDay totDaysInWaitingListDict['Tot'] += int( env.now()) - self.startWaitingDay if self.info[ 'Character of visit'] == 'Preferential' or self.info[ 'Character of visit'] == 'Ordinary': totDaysInWaitingListDict[ self.info['Character of visit']] += int( env.now()) - self.startWaitingDay nAppointmentsDict[self.info['Character of visit']] += 1 if self.info['Visit status'] == 'Done': totDaysInWaitingListDict[ 'OnlyDone' + self.info['Character of visit']] += int( env.now()) - self.startWaitingDay nAppointmentsDict['OnlyDone' + self.info['Character of visit']] += 1 if self.info['Visit type'] == 'First' or self.info[ 'Visit type'] == 'Revision': totDaysInWaitingListDict[self.info['Visit type']] += int( env.now()) - self.startWaitingDay nAppointmentsDict[self.info['Visit type']] += 1 if self.info['Visit status'] == 'Done': totDaysInWaitingListDict[ 'OnlyDone' + self.info['Visit type']] += int( env.now()) - self.startWaitingDay nAppointmentsDict['OnlyDone' + self.info['Visit type']] += 1 if int(env.now()) != int(self.info['relative_visit_day']): nAppointmentsDict['Wrong'] += 1