Simpy muokkaa

Simpy on Python-ohjelmointikielen prosesseihin pohjatuva tapahtumaperusteinen simulointiympäristö.

Tässä ohjeessa simulointia ja Pythonin Simpyä lähestytään hyvin yksinkertaisten esimerkkien avulla. Ohjeessa ei opeteta varsinaista simulointia, mutta yksinkertaiset esimerkit ovat samanlaisia kuin yleisesti käytössä olevissa simuloinnin oppikursseissa. Simuloinnista voi lukea enemmän Wikipediasta.

Ohjeen käyttämiseksi oletetaan, että käyttäjä tuntee Python-ohjelmointikielen perusteet ja ohjelmointirakenteet, merkkijonokäsittelyä sekä ainakin List- ja Dictionary – tiedostorakenteet. Lisäksi oliohjelmoinnin perusteet tulee hallita.

Ohjeessa ei käsitellä kaikkia Simpyn ominaisuuksia, vaan keskitytään yksinkertaisimpiin perusrakenteisiin esimerkkien avulla. Täydellisemmän englanninkielisen ohjeistuksen löytää osoitteesta: https://simpy.readthedocs.org/en/latest/

Ohjeessa käsitellään Python 3:n Simpy versiota, joka eroaa jossain määrin Python 2 -versiosta.

Mikä Simpy on? muokkaa

Simpy on Python-ohjelmointikielen prosesseihin pohjatuva tapahtumaperusteinen simulointiympäristö.

Simuloinnin tapahtumat luodaan generaattoreiksi kutsutuilla ohjelmamoduleilla (generator). Simpy tarjoaa myös erilaisia jaettuja resursseja, joilla voi olla tiettyjä ominaisuuksia, kuten esim. varastossa tilaa, bensiiniasemalla polttoainepumppuja, kaupassa kassoja jne.

Simulointi voi ajan suhteen tapahtua ’niin nopeasti kuin mahdollista’ tai reaaliaikaisesti (real time), jolloin silmulointitapahtumat toteutuvat seinäkellon mukaan.

Simuloinnissa käytetään runsaasti erilaisia satunnaislukugeneraattoreita. Ohjeessa ei oteta kantaa, mikä satunnaisjakauma soveltuu esimerkkiin, vaan satunnaislukujen muodostamisessa käytetään yleisintä menetelmää. Lisää Pythonin satunnaislukukirjastosta löytyy englanninkieliseltä sivulta https://docs.python.org/3/library/random.html

Python tarjoaa runsaasti erilaisia tehokkaita ohjelmointikeinoja, joilla ohjelmakoodia saadaan supistettua. Supistetun koodin luettavuus kuitenkin kärsii, mikäli lukija ei ole Pythonin asiantuntija. Esimerkeissä pyritään käyttämään hyvin yksinkertaisia ja selkeitä ohjelmistorakenteita, jotka toivottavasti helpottavat asian ymmärtämistä.

Muutamia yleisiä ohjeita, neuvoja ja havaintoja muokkaa

    • Käytä ohjelman koodauksessa Python-ohjelmistopaketin mukana tulevaa IDLE-ohjelmistoympäristöä.
    • Simpyssä ei voi käyttää globaaleja muuttujia. Globaalimuuttuja on muuttuja, joka on käytettävissä kaikissa aliohjelmissa, ja jonka arvoa voidaan muuttaa aliohjelmassa. Simpyssä kaikkialla käytössä olevia rakenteita ovat vain List-, Tulpe- ja Dictionaryt, joita kannattaa käyttää esim. simuloinnin tilastotietojen tallentamisessa.
    • Simuloinnissa on joskus vaikea tietää, mitä ohjelmakoodi tekee ja missä kohdassa ohjelman suoritus on menossa. Koodaus- ja testausvaiheessa kannattaa käyttää tulostuslauseita esim. print(’Nyt olen kohdassa x’) tai print(’i:n arvo on nyt ’, i).
    • Simpyn virheilmoitukset ovat varmasti oikeita, mutta joskus ne eivät anna kovin selkeää vihjettä, missä virhe on. Virhe ei saatakaan olla juuri siinä kohdassa, jossa Python sen näyttää, vaan edellisellä rivillä. Esim. edellisen komennon päättävä sulkumerkki ) puuttuu. Muita helposti unohtuvia koodausvirheitä, joiden virheilmoitus ei aina aukene ovat mm.
      • Oliomuuttujan metodin sulkumerkit puuttuva esim. auto.get_matka()
      • Generaattorissa yield – määre puuttuu env.process – käskyssä
      • List- ja Dictioanry-rakenteiden erilaisten sulkumerkkien käytössä on virheitä (),[],{}

Tässä ohjeessa joudutaan käyttämään Pythonin kommenttimerkkinä '# -merkintää, koska pelkkä hashtag tulkittaisiin wikissä luettelomerkiksi.

Simpyn asentaminen Windowsiin muokkaa

Pythonin asentaminen Windows koneelle käy helposti. Valmis asennuspaketti löytyy https://www.python.org/ - sivustolta Downloads – osiosta. Asennus tuntuu toimivan varsin luuotettavasti. Asennusohjelma oletusarvoisesti sijoittaa Pythonin kovin hankalaan hakemistoon, minkä vuoksi suosittelen, että asennusohjelman kysyessä mihin hakemistoon Python asennetaan, niin teet sille oman hakemiston suoraan C:-aseman juureen esim. C:\Python \ tai johonkin muuhun helppoon hakemistoon.

Simpyn asentaminen Windows – ympäristöön on sen sijaan hieman kimuranttista. Asennuspaketit näyttävät olevan suunniteltuja Linux-ympäristöön. Mikään netissä olevista keinoista ei sellaisenaan tunnu toimivan, mutta alla olevalla tavalla Simpyn asentaminen sekä Windows 7 että Windows 8 –ympäristöön on onnistunut.

Pythonin sivulta https://pypi.python.org/pypi/simpy tulee ladata tiedosto simpy-3.0.8.tar.gz (md5) omalle koneelle. Jos koneeltasi ei löydy ohjelmaa, jolla voit purkaa tämän gz-pakatun tiedoston, niin sellaisen ohjelman voi ladata ja asentaa esim. http://www.7-zip.org/ - sivustolta. Varmista, että lataat oikeabittisen version (32/64 bittinen). Ohjelma asentuu helposti, kun lataat oikean tiedoston ja käynnistät sen sisältämän asennusohjelman.

Simpyn asentaminen Windowsiin:

  1. Tee Pyhton-ohjelmiston Lib-kansioon uusi kansio nimeltä ”simpy”.
  2. Lataa asennustiedosto simpy-3.0.8.tar.gz (md5) – tähän kansioon.
  3. Pura asennustiedosto esim. 7-zip –ohjelmalla tähän kansioon. Purkuohjelma luo dist-nimisen kansion ja luo sinne simpy-3.0.8.tar – nimisen tiedoston.
  4. Pura simpy-3.0.8.tar - tiedosto em. ohjelmistollasi \Lib\simpy\ - kansioon (ei siis dist-kansioon). Purkuohjelman luo uuden simpy-3.0.8 -nimisen kansion.
  5. Nyt sinun pitää käynnistää Windowsin komentotulkki. Sen voi käynnistää esim. Käynnistä-valikosta kirjoittamalla Hae-ikkunaan cmd ja painamalla Enteriä, jolloin perinteinen Window-komentotulkki -ikkuna käynnistyy.
  6. Siirry komentotulkissa simpy-3.0.8 – kansioon (esim. cd \Python\Lib\simpy\simpy-3.0.8\ ) ja käynnistä siellä Simpyn asennus komennolla setup.py install. Asennusohjelma rakentaa valmiin Simpy-ajoympäristön hakemistoon. Simpy on nyt käyttövalmis.

Kappale 1: Process, Yield, env.timeout muokkaa

Kappale 2: Resource muokkaa

Kappale 3: Interrupt muokkaa

Kappale 4: Resource - resurssista kilpailevat prosessit muokkaa

Kappale 5: Store muokkaa

Kappale 6: Container muokkaa

Kappale 7: List- ja Dictionary -rakenteet Simpyssä muokkaa

Kappale 8: Lisää kilpailevista prosesseista muokkaa

Harjoitustehtävä 1: Puusepän vertas muokkaa

Harjoitustehtävä 2: Satama muokkaa

Harjoitustehtävä 3: Turvatarkastus muokkaa