Fejlett Python fejlesztési tanfolyam
Fejezet
>
Szint
Matematikai modulok
Véletlen modul
Cél
Futtass szimulációkat és teszteket, hogy felkészülj a hibákra és visszaesésekre a mezőgazdasági telepítés során a random modul használatával.
A melléképület átlépése után van egy iroda, amely bizonyos adminisztratív feladatokat lát el, többek között a szállítással, lakhatással és logisztikával kapcsolatos papírmunkát a telepítéshez. Jó ötlet lenne néhány szcenáriót lefuttatni az elérhető adatok alapján, hogy kiszámoljuk a visszaeséseket és a berendezés meghibásodását. Ehhez segítségünkre van a random modul, amit az import random paranccsal aktiválunk.
A modul különböző mértékű véletlenszerű kimenetek generálására szolgál, lehetővé téve szimulációk futtatását vagy véletlenszerű elemek hozzáadását a számításokhoz/gyakorlatokhoz. Számunkra az alábbi függvények lesznek használatosak:
random.seed(): Beállítja a véletlenszám-generálás magját, egy argumentumot vár, amely a kívánt mag számot adja meg. Ez azt jelenti, hogy bármely véletlen függvény egy adott maggal ugyanazokat az eredményeket fogja visszaadni. Ezt arra használjuk, hogy bizonyos mértékű ellenőrzést gyakoroljunk a véletlenszerű generálás felett, és képesek legyünk bizonyos eredmények újbóli létrehozására.random.random(): Visszaad egy véletlenszerű lebegőpontos számot 0 és 1 között.random.randint(): Két(2) argumentumot vár, a két szám között generál egy számot, beleértve magukat is. Az eredményt egész számként adja vissza.random.uniform(): Ugyanaz, mint az előző függvény, de véletlenszerű lebegőpontos számot ad vissza, nem pedig egész számot.random.triangular(): Ugyanaz, mint az előző függvény, de egy extra argumentuma van, a mode, ami egy módosító. A mode egy olyan szám kell, hogy legyen, amely a véletlenszerű tartomány két száma között van. Az így generált véletlenszerű szám statisztikailag közelebb lesz a mode-hoz, mint egy tisztán véletlenszerű szám az első két argumentum között.random.choice(): Egy listát vár argumentumként, véletlenszerűen kiválaszt egy elemet a listából.random.choices(): Egy másik listából mintát véve generál véletlenszerű listát, három(3) argumentumot vár: egy listát, amelyből mintát szeretnél venni, egy másik listát, amely meghatározza, hogy az egyes elemekből mekkora súlyt szeretnél venni, valamint egy k számú változót, amely meghatározza, hány mintát szeretnél venni a listából. A minták száma meghaladhatja maga a listát, mivel a hozzárendelt súlyok alapján duplikált elemeket generál.random.shuffle(): Egy listát vár argumentumként, és véletlenszerűen összekeveri azt.random.sample(): Két argumentumot vár: egy listát, amelyből mintát vesz, és a venni kívánt minták számát. Ez arandom.choices()egyszerűsített változata.
Kezdésként sétálj a világító X jel felé, állj a pult elé, használd a read() függvényt, hogy elolvasd a memo-t, és azonosítsd azokat az adatpontokat, amelyek szükségesek egy véletlenszerű varianciával rendelkező szimuláció futtatásához. Egy berendezés meghibásodásának szimulációját fogjuk futtatni, a memo tájékoztat arról, hogy melyik seed-et kell használnunk a véletlenszerű generáláshoz, valamint az abból mintavételezett listát. Használd a random.seed() függvényt, és illeszd be a memo-ban megadott értéket.
Sétálj a sötét X jel felé a kék szőnyegen keresztül, és állj a pult elé, mert van egy sectors nevű lista konstansunk, amely tartalmazza a mezőgazdasági terület részeinek leírását a korábbi memo alapján. Hozz létre egy selection nevű változót, amelyben tárolod a random.choice() eredményét, a sectors lista konstans segítségével kiválasztva egy mintát a listából, így: selection = random.choice(sectors). Hozz létre egy másik delay nevű változót, és tárold benne a random.random() értékét a késések miatti hibahatár szimulálásához.
Hozz létre még egy defect nevű változót, és tárold benne a random.randint() eredményét, hogy egy lehetséges eszközhibára vonatkozó százalékot generálj. Add meg argumentumként a 0 és 15 értékeket, hogy ezen két szám között generáljon egy százalékot. Miután a selection, delay és defect változók be lettek állítva, használd a már előre megírt write() függvényt a három(3) változóval ebben a sorrendben, hogy lerajzold azokat az adatpontokat, amelyek a telepítés esetleges problémáinak teszteléséhez szükségesek.
Sétálj az arany X jel felé, és használd a read() függvényt a további előrejelzések futtatásához, a memo adatokat, anyagokat, mennyiségeket és mintavételi adatokat tartalmaz majd. Egy nagyobb szimulációt fogunk futtatni a memo adatait felhasználva, beleértve egy materials nevű lista konstansot, amely az anyagtípusokat tartalmazza, ahogy azt a memo részletezi.
Sétálj a sötét X jel felé a piros szőnyegen keresztül, és állj a pult elé. Hozz létre egy weights nevű listát, és tárold benne a memo-ban szereplő négy(4) számértéket, amelyek az anyagok sorrendjét tükrözik. Például: weights = [400, 600 , -insert value-, -insert value-]
Hozz létre egy simulation nevű változót, és tárold benne a random.choices() eredményét, add meg a materials lista konstansot, a létrehozott weights listát, valamint egy k nevű változót, amely a memo-ban szereplő mintavételi egységeket határozza meg, így: simulation = random.choices(materials, weights , k = insert sampling units ). Használd a simulation változót a már előre megírt write() függvénnyel az adatok lerajzolásához.
Sétálj a sötét X jel felé a zöld szőnyegen keresztül, és állj a pult elé, használd a random.shuffle() függvényt a létrehozott simulation listával annak véletlenszerű összekeveréséhez, így: random.shuffle(simulation). Ez összekeveri a listát, nincs szükség az érték tárolására, mivel közvetlenül módosítja a listát. Hozz létre egy sample nevű listát, amelyben tárolod a random.sample() eredményét, add meg első argumentumként a simulation listát, és a második argumentumként végezz egy három(3) elemből álló véletlenszerű mintavételt, így: sample = random.sample(simulation, k=3). Használd a simulation és sample változókat a már előre megírt write() függvénnyel az új minták rögzítéséhez.
Végül sétálj a sötét X jel felé a lila szőnyegen keresztül, és állj a pult elé, hozz létre egy defect nevű változót, és tárold benne a random.uniform() eredményét, add meg az argumentumokat 3 és 10. Ezek az eredeti szimulációhoz, valamint az abból vett minta esetében a mintavételi értékek, amelyek alapján a lehetséges eszközhiba határolását generáljuk a kivett mintából.
Hozz létre egy losses nevű változót, és tárold benne a random.triangular() eredményét, add meg az értékeket 200, 600 és 400. Ezek az anyagszámok a korábbi memo szerint, konkrétan a legalacsonyabb, legmagasabb és a középső értékhez legközelebb eső számot jelölik. Ez lehetővé teszi számunkra, hogy háromszög alakú véletlenszerű értéket kapjunk a szimulációban használt anyagok száma alapján. Használd a defect és losses értékeket a már előre megírt write() függvénnyel az eredmények lekérdezéséhez, és a szint befejezéséhez.