def test12(): class X(sim.Component): def process(self): sim.Animate(text='Piet' ,x0=100,y0=100,x1=500,y1=500,t1=10) while True: print(sim.default_env()) yield self.hold(1) de=sim.Environment(trace=True) env.animation_parameters(speed=1) a=sim.Environment(name='piet.') b=sim.Environment(name='piet.') c=sim.Environment(name='piet.') print(a) print(b) print(c) X(auto_start=False) X(auto_start=False) X(auto_start=False) X() env.animation_parameters(speed=0.1,video='x.mp4') env.run(4) env.run(2) env.run(4)
def salabim(): class Control(sim.Component): def process(self): an1 = sim.Animate(text='sim', x0=227, y0=768 / 2, fontsize0=200) an2 = sim.Animate(text='ulation', x0=654, y0=768 / 2, fontsize0=200) yield self.hold(3) an2.update(y1=900, t1=env.now() + 3) an1.update(x1=176, t1=env.now() + 3) yield self.hold(3) an3 = sim.Animate(text='salabim', x0=676, y0=-100, y1=768 / 2, fontsize0=200, t1=env.now() + 3) yield self.hold(6) an1.update(x1=-130, t1=env.now() + 3) an3.update(x1=512, t1=env.now() + 1.5) yield self.hold(4) an3.update(fontsize1=300, t1=env.now() + 4, textcolor1='red') yield self.hold(6) an4 = sim.Animate(text='discrete event simulation', x0=512, y0=220, fontsize0=87) env = sim.Environment(trace=False) env.animation_parameters(x1=1024, background_color='30%gray') Control() env.run(30)
def main(num_floors=10, num_elevators=1, logic=0, seed=123456): env = sim.Environment(random_seed=seed) Building(num_floors=num_floors) global floors, elevators, requests floors = {i: Floor(i) for i in range(num_floors)} elevators = [Elevator(system=logic) for _ in range(num_elevators)] requests = {} env.trace(True) env.run(1000) env.trace(False) for floor in floors.values(): floor.occupants.reset_monitors() env.run(50000) with open("db.txt", "w") as f: with open('trace.txt', "w") as f_t: f_t.write("floor\tpeople\taverage length of stay\n") for floor in floors.values(): f.write(f"{floor.level_n},{floor.occupants.length_of_stay.mean()}\r\n") f_t.write(f"{floor.level_n}\t" f"{floor.occupants.length_of_stay.number_of_entries()}" f"{floor.occupants.length.mean():15.3f}" f"{floor.occupants.length_of_stay.mean():15.3f}\r\n")
def test1(): print('test1') class X(sim.Component): def __init__(self, extra=1, *args, **kwargs): sim.Component.__init__(self, *args, **kwargs) self.extra = extra def process(self): while True: yield self.hold(1) pass def action2(self): for i in range(5): yield self.hold(25) yield self.hold(1) def actionx(self): pass class Y(sim.Component): def process(self): x[3].reactivate(process=x[3].action2(), at=30) x[4].cancel() yield self.hold(0.5) yield self.standby() yield self.activate(process=self.action2(0.3)) def action2(self, param): yield self.hold(param) class Monitor(sim.Component): def process(self): while sim.now() < 30: yield self.standby() de = sim.Environment(trace=True) q = sim.Queue() x = [0] for i in range(10): x.append(X(name='x.', at=i * 5)) # x[i+1].activate(at=i*5,proc=x[i+1].action()) x[i + 1].enter(q) x[6].suppress_trace(True) i = 0 for c in q: print(c._name) i = i + 1 if i == 4: x[1].leave(q) x[5].leave(q) x[6].leave(q) y = Y(name='y') # y.activate(at=20) sim.run(till=35)
def test17(): def actiona(): bb.remove() sl.remove() def actionb(): ba.remove() de = sim.Environment() for x in range(10): for y in range(10): a = sim.Animate(rectangle0=(0, 0, 95, 65), x0=5 + x * 100, y0=5 + y * 70, fillcolor0='blue', linewidth0=0) ba = sim.AnimateButton(x=100, y=700, text='A', action=actiona) bb = sim.AnimateButton(x=200, y=700, text='B', action=actionb) sl = sim.AnimateSlider(x=300, y=700, width=300) sim.Animate(text='Text', x0=700, y0=750, font='Times NEWRomian Italic', fontsize0=30) de.animation_parameters(animate=True) sim.run(5) sim.animation_parameters(animate=False) sim.run(100) sim.animation_parameters(animate=True, background_color='yellow') sim.run(10)
def run_optimisation(envData, optData): for lightGreenTime in range(int(optData['lightGreenTimeRange'][0]), int(optData['lightGreenTimeRange'][1]), int(optData['lightGreenTimeStep'])): runningAverageTotal = 0 dataArray = [] for iter in range(int(optData['iterationsPerSetting'])): averageWaitingTime = 0 sim.random_seed = time.time() print(lightGreenTime) env = sim.Environment(trace=False, random_seed=time.time()) env.animation_parameters(speed=10) trafficEnv = TrafficEnvironment(envData, lightGreenTime) env.run(int(optData['envTime'])) averageWaitingTime = sum([ trafficEnv.lightList[0].vehiclesQueue.length_of_stay.mean(), trafficEnv.lightList[1].vehiclesQueue.length_of_stay.mean() ]) / 2 runningAverageTotal += averageWaitingTime print(averageWaitingTime) dataArray.append([lightGreenTime, runningAverageTotal / 20]) x, y = zip(*dataArray) xnew = np.linspace(np.array(x).min(), np.array(x).max(), 300) spl = make_interp_spline(np.array(x), np.array(y), k=3) ynew = spl(xnew) plt.plot(xnew, ynew, color='g') plt.xlabel('Light Green Time') plt.ylabel('Average Waiting Time') plt.show()
def test2(): de=sim.Environment() print('test2') x=[None] q=[None] for i in range(5): x.append(sim.Component(name='x.')) q.append(sim.Queue(name='q.')) y=sim.Component(name='y') x[1].enter(q[1]) y.enter(q[1]) x[1].enter(q[2]) x[2].enter(q[2]) x[2].enter(q[1]) x[3].enter(q[2]) q[1].print_statistics() q[2].print_statistics() q[1].union(q[2],'my union').print_statistics() q[1].difference(q[2],'my difference').print_statistics() q[1].intersect(q[2],'my intersect').print_statistics() q[1].copy('my copy').print_statistics() # q[1].move('my move').print_statistics() q[1].print_statistics() print (q[1]) yy=q[1].component_with_name('y') ii=q[1].index(y) print(yy,ii)
def test48(): class A(sim.Component): def myhold(self, t): print('**') yield self.hold(t) def process(self): while env.now()<5: if env.now()>30: env.main().activate() print('aa') self.myhold(1) yield self.hold(1) class B(sim.Component): def process(self): while True: yield self.hold(1) env = sim.Environment(trace=True) env.suppress_trace_standby(True) A() B() env.run(8) print('ready')
def test47(): class Dodo(sim.Component): pass class Car(sim.Component): def setup(self, color='unknown'): self.color=color print(self.name(),color) def process(self, duration): yield self.hold(duration) yield self.activate(process='process', duration=50) def other(self): yield self.hold(1) env=sim.Environment(trace=True) Car(process=None) Car(color='red', duration=12, mode='ABC') Car(color='blue',process='other') Dodo() env.run(100)
def define_environment(self): self.env = sim.Environment(trace=self.tracing, time_unit="minutes") self.env.modelname( "Circuit Board Production: A Two-Stage Hybrid Flow Shop Scheduling Problem" ) self.env.animation_parameters( animate=self.animation, synced=False, width=ENV_W, height=ENV_H, background_color="60%gray", ) if self.animation == True: self.info_makespan = sim.AnimateText(text="Makespan: ", x=10, y=420, fontsize=GLOB_FONTSIZE) self.info_tardiness = sim.AnimateText(text="Total Tardiness: 0", x=10, y=390, fontsize=GLOB_FONTSIZE) self.info_setups = sim.AnimateText(text="Major Setups: 0", x=10, y=360, fontsize=GLOB_FONTSIZE)
def test38(): def animation_objects(self, value): if value=='blue': an1=sim.Animate(circle0=(40,),fillcolor0=value, linewidth0=0) else: an1=sim.Animate(rectangle0=(-40,-20,40,20), fillcolor0=value,linewidth0=0) an2=sim.Animate(text=value,textcolor0='white') return (an1,an2) class X(sim.Component): def process(self): while True: for i in ('red','green','blue','yellow','red'): letters.set(i[0]) light.set(i) yield self.hold(1) class Q(sim.Queue): pass env=sim.Environment(trace=True) for i in range(3): q=Q(name='rij.') X() light=sim.State('light') light.animate() letters=sim.State('letters') letters.animate(x=100,y=100) env.animation_parameters(synced=False) env.run()
def test46(): class Y(sim.Component): pass class X(sim.Component): def process(self): x=0 for i in range(10): q.add(Y()) print ('q.length=', q.length()) if i==3: monx.monitor(False) monx.tally(x) if i==6: monx.monitor(True) yield self.hold(1) x += 1 env = sim.Environment() env.beep() monx = sim.MonitorTimestamp('monx') q = sim.Queue('q') X() env.run(20) print(monx.xt()) print(q.length.xt())
def test33(): class X(sim.Component): def process(self): yield self.hold(1) s1.set(1) yield self.hold(1) s1.set(2) s2.set('red') yield self.hold(2) s1.set(30) class Y(sim.Component): def process(self): while True: yield self.wait((s1,lambda x, component, state: x/2>self.env.now())) yield self.hold(1.5) class Z(sim.Component): def process(self): while True: yield self.wait((s2,lambda x, component, state: x in ("red","yellow"))) yield self.hold(1.5) env=sim.Environment(trace=True) env.print_info() s1=sim.State(name='s.',value=0) s2=sim.State(name='s.',value='green') s3=sim.State(name='s.') q=sim.Queue('q.') x=X() y=Y() z=Z() env.run(10)
def test29(): global light class Light(sim.Component): def setup(self): self.green=sim.State(name='green') def process(self): while True: yield self.hold(1) self.green.trigger(max=2) yield self.hold(1) self.green.reset() class Car(sim.Component): def process(self): while True: yield self.wait((light.green,True,1),(light.green,True,1),fail_delay=8,all=True) yield self.hold(sim.Uniform(1,3).sample()) de=sim.Environment(trace=True) for i in range(10): car=Car() light=Light() de.run(10) light.green.print_statistics() print(light.green.value.xt()) print(light.green.waiters())
def test57(): class X(sim.Component): def process(self): while env.now()<run_length: an.update(text=str(run_length - env.now())) yield self.hold(1) env.animation_parameters(animate=False) print(self.env._animate) # yield self.hold(0) env.video('') env.main().activate() env = sim.Environment() env.animation_parameters(background_color='blue', modelname='test') env.video('test.gif') env.video_pingpong(False) env.video_repeat(2) # env.animation_parameters(video='test.avi+MP4V', speed=0.5) an = sim.Animate(text='', x0=100,y0=100, fontsize0=100) run_length = 1 X() sim.Animate(line0=(0,50,None,None), line1=(0,50,1024,None), linewidth0=4,t1=run_length) sim.Animate(circle0=(40,), x0=200, y0=200) sim.Animate(circle0=40, x0=300, y0=200) env.run() print('done') env.quit()
def test5(): print('test5') class X1(sim.Component): def process(self): while True: while True: yield self.request(r1, 2, 5, r2, greedy=True, fail_at=de.now() + 6) if not self.request_failed()(): break yield self.hold(1) self.release(r1, r2) yield self.passivate() class X2(sim.Component): def process(self): while True: yield self.request((r1, 3), (r2, 1, 1)) yield self.hold(1) self.release(r1) yield self.passivate() class X3(sim.Component): def process(self): while True: yield self.request(r1, r2) yield self.hold(1) self.release(r1, r2) yield self.passivate() class Y(sim.Component): # def __init__(self,*args,**kwargs): # sim.Component.__init__(self,*args,**kwargs) def process(self): yield self.hold(3) x1.cancel() yield self.hold(10) r2.capacity(1) pass de = sim.Environment(trace=True) q = sim.Queue(name='q') r1 = sim.Resource(name='r1', capacity=3) r2 = sim.Resource(name='r2', capacity=0) r3 = sim.Resource(name='r3', capacity=1) x1 = X1() x2 = X2() x3 = X3() y = Y(name='y') sim.run(till=21)
def test51(): env = sim.Environment() d = sim.Poisson(2) x = [] m = sim.Monitor(name='samples') for i in range(10000): m.tally(d()) m.print_histogram(15, 0, 1)
def test54(): import test_a import test_b env = sim.Environment(trace=True) test_a.X() test_b.X() env.run(10)
def test39(): class C(sim.Component): def process(self): yield self.request(r,s='y') env=sim.Environment(trace=True) x=sim.Uniform(4) r = sim.Resource() C() env.run(4)
def test56(): env = sim.Environment() mon = sim.Monitor('number per second') for i in range(100): sample = sim.Normal(0.083,0.00166)() mon.tally(sample) mon = sim.Monitor('number per second') env.run(100) mon.print_histogram()
def test14(): class X(sim.Component): def process(self): yield self.request(*r) print(self.claimed_resources()) de=sim.Environment() X() r=[sim.Resource() for i in range(10)] de.run(till=10)
def test16(): de = sim.Environment() sim.animation_parameters() a = sim.Animate(text='Test', x0=100, y0=100, fontsize0=30, fillcolor0='red') a = sim.Animate(line0=(0, 0, 500, 500), linecolor0='white', linewidth0=6) sim.run()
def test53(): en =sim.Environment() d=sim.Normal(10, 3) d.print_info() d=sim.Normal(10, coefficient_of_variation=0.3) d.print_info() d=sim.Normal(0, standard_deviation=3) d.print_info() d=sim.Normal(0, coefficient_of_variation=4) d.print_info()
def test25(): de=sim.Environment() q=sim.Queue('q') c={} for i in range(8): c[i]=sim.Component(name='c.') c[i].enter(q) print(q) for c in q: c.priority(q,-c.sequence_number()) print(q)
def test59(): def do_next(): global ans global min_n for an in ans: an.remove() ans = [] x=10 y=env.height() - 80 sx= 230 sy=14 y -= 30 fontnames = [] n=0 for fns, ifilename in sim.fonts(): for fn in fns: fontnames.append(fn) fontnames.extend(sim.standardfonts().keys()) last = '' any = False for font in sorted(fontnames, key=sim.normalize): if font != last: # remove duplicates last = font n += 1 if n >= min_n: any = True ans.append(sim.Animate(text=font, x0=x, y0=y, anchor='sw', fontsize0=15, font=font)) x += sx + 5 if x + sx > 1024: y -= sy + 4 x = 10 if y<0: break min_n = n + 1 if not any: env.quit() global ans global min_n env = sim.Environment() sim.AnimateButton(x=500,y=-21, width=50, xy_anchor='nw', text='Next', fillcolor='red', action=do_next) ans = [] min_n = 0 # sim.Animate(text='Salabim fontnames', x0=x, y0=y, fontsize0=20, anchor='sw', textcolor0='white') do_next() env.background_color('20%gray') env.animate(True) env.run()
def test18(): for j in range(2): print('---') r=random.Random(-1) r1=random.Random(-1) d=sim.Exponential(3,r1) sim.Environment(random_seed=-1) for i in range(3): print(sim.Exponential(3,r).sample()) print(sim.Exponential(3).sample()) print(d.sample())
def test30(): env=sim.Environment() m=sim.Monitor('m') print (m.x(ex0=True)) m.tally(1) m.tally(2) m.tally(3) m.tally(0) m.tally('0') m.tally('12') m.tally('abc') print (m.x(ex0=True))
def test37(): env=sim.Environment() s = sim.Monitor('s') s.tally(1) s.tally(2) s.tally(3) s.tally(0) s.tally(4) s.tally('a') print(s.x(ex0=False,force_numeric=True))
def test13(): de=sim.Environment() q=sim.Queue() for i in range(10): c=sim.Component(name='c.') q.add(c) print(q) for c in q: print (c.name()) for i in range(20): print(i,q[i].name())
def test50(): env=sim.Environment() for i, c in enumerate(string.printable): if i <= 94: print(i,c) sim.Animate(text=c,x0=10+i*10,y0=100,anchor='w') sim.Animate(line0=(0, 100, 1024, 100), linecolor0='red') env.animation_parameters(modelname='Test') env.animating = True env.trace(True) env.run(5) print (env.main()._scheduled_time)