Simpy - Container

Wikikirjastosta

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
>>>