Simpy - Container
Kappale 6 – Container
[muokkaa | muokkaa wikitekstiä]Tehtävä
Tee ohjelma, jossa tuotanto tuottaa nestemäistä tuotetta varastotankkiin, josta myynti myy sitä satunnaisia määriä satunnaisella syklillä. Kts. Edellinen tehtävä kappaleesta 5.
Edellisessä kappaleessa käytimme Simpyn ’kappaletavaraan’ soveltuvaa Store-menetelmää. Nestemäisen tuotteen käsittelyyn on käytettävissä yhtälainen Container-menettely.
Tuotteen lisääminen ”tankkiin” tapahtuu samalla tavalla kuin Storessa, eli
tankki.put(maara)
jossa tankki on varaston nimi ja maara, sinne lisättävä määrä. Vastaavasti tavaraa otetaan pois samantapaisesti
tankki.get(maara) – metodilla.
Kun kappaletavarassa saatii varastossa olevien tavaroden määrä len(varasto.items) -kutsulla, niin nestemäärä saadaan Containerista selville tankki.level – metodilla
”Tankki” luodaan
tankki = simpy.Container(env, kapasiteetti,init=maara)
Tuossa tankki on tietysit varaston nimi, env on env-Enviroment muuttuja , kapasiteetti on maksimi nestemäärä ja maara on varaston luontitilanteessa sinne jo varastoitu määrä. Kapasiteetti voidaan jättää halutessa pois, jolloin tankkiin voi varastoida ehtymättömästi, kuten myös init-määreen voi jätteen pois, jolloin tankki on alussa tyhjä.
Ilman suurempia selityksiä tässä edellisen esimerkin mukainen tehtävä sovitettuna niin, että tuotanto tekee tietyn määrän nestettä tankkiin, jota myynti sitten myy aina satunnaisen määrän.
import simpy import random def tuotanto(env, varasto): while True: tuotantoaika = 5 yield env.timeout(tuotantoaika) tuotantomaara = 10 tankki.put(tuotantomaara) print(env.now, 'Tuotanto toimitti tuotetta',tuotantomaara,'tankkiin') tankissa = tankki.level print('Tankissa',tankissa,'verran tavaraa') def myynti(env, varasto): while True: myyntitahti = random.randint(10,20) myyntimaara = random.randint(5,25) yield env.timeout(myyntitahti) print(env.now,'Myynti myi', myyntimaara,' tavaraa') yield tankki.get(myyntimaara) print(env.now, 'Toimitettiin tavaraa', myyntimaara) tankissa = tankki.level print('Tankissa',tankissa,'verran tavaraa') env=simpy.Environment() tankki=simpy.Container(env, capacity=200) env.process(tuotanto(env,tankki)) env.process(myynti(env,tankki)) env.run(until=50)
Ohjelman tuottaa seuraavanlaista tulosta.
Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 19:28:18) [MSC v.1600 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> =========== RESTART: C:/Users/Similointi/tankki.py =========== 5 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 10 verran tavaraa 10 Myynti myi 24 tavaraa 10 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 20 verran tavaraa 15 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 30 verran tavaraa 15 Toimitettiin tavaraa 24 Tankissa 6 verran tavaraa 20 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 16 verran tavaraa 25 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 26 verran tavaraa 28 Myynti myi 11 tavaraa 28 Toimitettiin tavaraa 11 Tankissa 15 verran tavaraa 30 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 25 verran tavaraa 35 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 35 verran tavaraa 38 Myynti myi 15 tavaraa 38 Toimitettiin tavaraa 15 Tankissa 20 verran tavaraa 40 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 30 verran tavaraa 45 Tuotanto toimitti tuotetta 10 tankkiin Tankissa 40 verran tavaraa >>>