Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf4-20:simulation:alben-mit-python [2021/05/10 19:10] – created Ivo Blöchliger | lehrkraefte:blc:informatik:glf4-20:simulation:alben-mit-python [2021/05/11 06:23] (current) – Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Simulation vieler Sammelalben ====== | ||
| + | <code python> | ||
| + | from random import randrange | ||
| + | |||
| + | bilder = 200 # Anzahl Bilder pro Album | ||
| + | alben = 10 # Bis wie viele Alben pro Simulation | ||
| + | repe = 1000 # Anzahl Simulationen | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Eine Simulation ===== | ||
| + | * Die Idee ist, eine Liste '' | ||
| + | * Das kleinste Element der Liste '' | ||
| + | * Man kauft ein Bild nach dem anderen und passt den entsprechenden Eintrag in '' | ||
| + | * Immer wenn ein weiteres Album gefüllt werden kann, speichert man die Anzahl gekaufter Bilder an der entsprechenden Stelle in der Liste '' | ||
| + | * Das Resultat der Simulation ist eine Liste mit (aufsteigenden) Zahlen, die angeben, wie viele Bilder insgesamt für jede Anzahl Alben nötig waren. | ||
| + | |||
| + | <code python> | ||
| + | def simulation(bilder, | ||
| + | # Liste mit der Anzahl jedes Bildes | ||
| + | num = [0 for i in range(bilder)] | ||
| + | voll = 0 # Anzahl voller Alben | ||
| + | | ||
| + | result = [0 for i in range(alben)] | ||
| + | |||
| + | gekauft = 0 # Anzahl gekaufter Bilder | ||
| + | while voll< | ||
| + | gekauft+=1 | ||
| + | # Ein zufälliges Bild " | ||
| + | # TODO | ||
| + | m = min(num) | ||
| + | | ||
| + | # Ein Album mehr gefüllt? | ||
| + | if m>voll: | ||
| + | # Anzahl gekaufter Bilder an korrekter Stelle in der Liste result speichern. | ||
| + | # TODO | ||
| + | # Anzahl voller Alben aktualisieren | ||
| + | voll=m | ||
| + | return result | ||
| + | |||
| + | # Zum Testen: | ||
| + | print(simulation(200, | ||
| + | </ | ||
| + | |||
| + | ===== Viele Simulationen ===== | ||
| + | Interessant ist die Verteilung der Resultate (nebst dem Durchschnitt, | ||
| + | |||
| + | Um die Verteilung aufzeichnen zu können, müssen die Resultate sortiert werden. Dazu erstellen wir erst eine Liste deren Einträge Listen mit den Resultaten für eine bestimme Anzahl Alben sind. | ||
| + | <code text> | ||
| + | [[100, | ||
| + | 1 Album füllen, | ||
| + | </ | ||
| + | |||
| + | Dazu wird eine Liste mit leeren Liste wie folgt initialisiert: | ||
| + | <code python> | ||
| + | # Listen für die Resultate für jede Anzahl Alben | ||
| + | sims = [[] for i in range(alben)] | ||
| + | </ | ||
| + | |||
| + | Die Simulationen werden wie folgt durchgeführt und eingetragen: | ||
| + | <code python> | ||
| + | for i in range(repe): | ||
| + | # Simulation ausführen, Resultat in r (z.B. ist r[2] die benötigte Anzahl Bilder für 3 Alben) | ||
| + | r = simulation(bilder, | ||
| + | for j in range(alben): | ||
| + | # Das Resultat r[j] (für j+1 Alben) der korrekten Liste in sims hinten anhängen (mittels .append) | ||
| + | # TODO | ||
| + | |||
| + | # Listen sortieren, um eine Verteilung zu erhalten: | ||
| + | for j in range(alben): | ||
| + | sims[j] = sorted(sims[j]) | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Ausgabe als CSV ===== | ||
| + | Die Verteilung kann wie folgt als CSV ausgegeben werden: | ||
| + | <code python> | ||
| + | csv = " | ||
| + | for i in range(alben): | ||
| + | csv+= "; | ||
| + | csv+=" | ||
| + | for i in range(repe): | ||
| + | csv += " | ||
| + | for j in range(alben): | ||
| + | csv += "; | ||
| + | csv+= " | ||
| + | print(csv) | ||
| + | f = open(" | ||
| + | f.write(csv) | ||
| + | f.close() | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Auswertung ===== | ||
| + | * Zeichnen Sie die Daten als Diagramm und interpretieren Sie dieses. | ||
| + | * Berechnen Sie aus diesen Daten (in Excel oder Python) folgendes: | ||
| + | * Anzahl zu kaufender Bilder, um eine Wahrscheinlichkeit von 50%, 90% und 99% für das Füllen von 1,2, etc. Alben zu erhalten. | ||
| + | * Für jede Anzahl Alben, die Anzahl zu kaufender Bilder **pro Album**, um obige Füllwahrscheinlichkeiten für die gegebene Anzahl Alben zu erhalten. | ||