Discuss Scratch

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

forth wrote:

@TM_: Dein Vorschlag könnte man zu einer universellen Lösung weiter entwickeln und eine Werteliste erstellen. Man würfelt dann nur den Listenindex und kann so jede beliebige Verteilungsfunktion erstellen.

Stimmt, mit einer Liste ist es noch kompakter aber auch besser

Man könnte dazu einen Wiki-Artikel schreiben, oder?

Last edited by TM_ (May 26, 2014 12:01:09)

Lirex
Scratcher
500+ posts

gewichtete Zufallszahlen

TM_ wrote:

Man könnte dazu einen Wiki-Artikel schreiben, oder?
+1
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

Tohmis wrote:

Ich hab noch was gefunden Is eigentlich ziemlich interressant das thema

Natürlich findet sich schon vieles in Scratch
Eine Anwendung mit der Gausschen Verteilung gibt es hier: http://scratch.mit.edu/projects/19733411/
(: damit die Herrschaften besser schlafen können

Im Prinzip errechnet sich die einfache symmetrischer Glockenkurve, also mit Mittenbetonung als:

setZufallszahltopickrandom0tomax+pickrandom0tomax/2

Die ‘schräge Glockenkurve’ findet sich im Projekt: Poisson Random Numbers (Poisson Distribution) http://scratch.mit.edu/projects/20496965/



Last edited by koDoz (May 27, 2014 10:08:12)

koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

Lirex wrote:

TM_ wrote:

Man könnte dazu einen Wiki-Artikel schreiben, oder?
+1

Warum nicht?

Gute Idee, denn am Randomize kommt kein ernsthafter Scratcher vorbei! Die meisten Games und ganz viele Grafikprojekte arbeiten schließlich mit Zufallszahlen.

Man könnte hier vielleicht zuvor noch etwas anschauliches Material sammeln.
(Mathematisch korrekt, aber ohne mathephobe Scratch-Praktiker gleich in die Flucht zu schlagen)

…fragt sich nun, wer sich als erster bewegt


Last edited by koDoz (May 27, 2014 10:17:19)

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

Habe schon mal die Überschrift hier reingehauen, aber wie sollten wir das am Besten strukturieren?
http://scratch-dach.info/wiki/Zufallszahl_von_%28%29_bis_%28%29_%28Block%29
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

TM_ wrote:

Habe schon mal die Überschrift hier reingehauen, aber wie sollten wir das am Besten strukturieren?
http://scratch-dach.info/wiki/Zufallszahl_von_%28%29_bis_%28%29_%28Block%29

Super, der Einstieg ist ja schon gemacht!
Vorschlag für die weitere Struktur: (von einfach/pragmatisch bis komplexer)

Gewichtete Zufallszahlen

+ Symmetrische Verteilung von Zufallszahlen
++ Berg-artige Verteilung
++ Tal-artige Verteilung

+ ‘schräge’ Verteilung
++ Links-lastige Verteilung
++ Rechts-lastige Verteilung

+ beliebige Verteilungen
++ Tabellengestützte Verteilungsfunktion
++ parametrisierbare Verteilungsfunktion

Random Hardcore (vielleicht)

+ Was sind ‘gute’ Verteilungsfunktionen?
++ Qualitätstest - Glaub keiner Random-Funktion!
+++ Die Modulo-Falle
++ Eigener Randomgenerator (mit Seed)
+++ Vorteil: reproduzierbare Folgen zu Testzwecken
+ AI: ‘lernender’ Pseudo-Zufallsgenerator
++ Stein Schere Papier






Last edited by koDoz (June 3, 2014 06:26:22)

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

Okay, ich werd sehen was ich machen kann. Aber natürlich können alle anderen mit Wiki-Account mitmachen und wer noch keinen hat, kann sich ja jetzt einen zulegen, denn zu diesem Thema kann man ja noch sehr viel hinzufügen. Ich denke da noch an spezielle Zufallsysteme wie sie bei Seeds benutzt werden (Minecraft ist hier das beste Beispiel). Dabei ist ein Seed, den man selber eingibt, oder er sich aus Werten wie aktuelle Uhrzeit ergibt, die Grundlage für alle Zufallsereignisse. Sie scheinen zwar zufällig aufzutreten, aber mit dem gleichen Seed kann man alle Zufallsereignisse exakt reproduzieren.
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

Ok ok @TM_, hab dann mal recheriert, ausprobiert und formuliert.
Hier nun mein Beitrag für das nächste Kapitel im DACH-Wiki Thema:
Zufallszahl

Gewichtete Zufallszahlen

Symmetrische Verteilungen

Erfahrungsgemäß treten mit zwei Würfeln die Augensummen 2 und 12 seltener auf als die 6 und 7. Die Zahlen fallen also nicht mehr gleichverteilt. In Scratch lässt sich das leicht simulieren:

Augenzahl = random( 1, 6) + random( 1, 6)

Die Auszählung genügend häufiger Versuche zeigt im Diagramm eine dachförmige Verteilung. Die Anzahl der geworfenen Zahlen steigt von der 2 geradlinig bis zum Maximum bei 6 und 7 an und fällt dann wieder geradlinig bis zur 12 ab. Diese gewichtete Zufallsverteilung unterscheidet sich also auffällig von dem, was der Scratch-Block liefert. Manche Projekte Spiele, Simulationen und Grafik-Experimenten erfordern aber genau diese Verteilung. Sie lässt sich aber in Scratch leicht nachbilden z.B. die Zahlen 1 bis 100 dachförmig verteilt geht so:

Min = 1
Max = 100
Zufallszahl Dach-Typ = ( random( Min, Max) + random( Min, Max)) / 2

Interessant wird es, wenn ein dritter Würfel hinzu kommt: Die resultierende Verteilungskurve wird dann geschwungen glockenförmig.

Zufallszahl Glocken-Typ-3 = ( random( Min, Max) + random( Min, Max) + random( Min, Max)) / 3

Diese glockenförmige Verteilung nennen Statistiker auch Normalverteilung. Sie erinnert an die Notenergebnisse einer Klassenarbeit. Bei einer Klassenstärke von 30 Schülern simuliert man das mit ebenso vielen Würfeln. Als Scratch-Lösung:

Min = 1
Max = 6
Anzahl = 30
Zufallszahl Glockentyp = 0
Wiederhole Anzahl mal
Zufallszahl Glocken-Typ = Zufallszahl Glocken-Typ + random( Min, Max)
end
Zufallszahl Glocken-Typ = round( Zufallszahl Glocken-Typ / Anzahl)

Diese Funktion lässt sich schon sehr universell in verschiedene Projekte verwenden. Es lohnt sich, hierfür einen eigenen Block zu definieren und diesen in einer Funktionssammlung zu speichern:

definiere: Z = normal verteilte Zufallszahl( Min, Max, Würfelanzahl)

Mit Würfelanzahl lässt sich der Verlauf der Verteilungskurve flacher oder spitzer einstellen. Übrigens sprechen wir bisher nur von ganzen Zahlen. Wenn aber ein Projekt zufällige Dezimalwerte benötigt, lässt sich das mit einem kleinen Trick bewerkstelligen:
Für Zufallswerte mit 2 Stellen hinter dem Komma multipliziert man z.B. Max zunächst mit 100 und dividiert die ermittelten Zufallszahlen Z dann wieder durch 100. Voilà !

Ein guter Generator für echte rationale Zufallszahlen braucht allerdings etwas mehr Mathematik (kommt vielleicht später). Wenn der Praktiker stärker gestreute Nachkommastellen benötigt, dann kommt aber auch schon mit folgender Scratch-Programmierung weiter:

Z = normal verteilte Zufallszahl( Min, Max-1, Würfelanzahl)
Z = verbinde( Z, “.”, random(1, 999999999999999))

Und wie ist es mit einer talförmigen Verteilung? Die mittleren Werte sollen nun selten, die Extremwerte dagegen häufiger kommen.
Achtung Falle: Die intuitive Idee, hier einfach die Differenz zu bilden zwischen Max und Zufallszahl geht leider ins Leere. Probier es aus, es kommt exakt die selbe Verteilungskurve heraus!

Hier behilft sich der Scratcher mit einer einfachen Verteilungsliste, die er mit den Zahlen in der gewünschten Verteilungshäufigkeit füllt:
setLto11122344555setZtoletterpickrandom1tolengthofLofL
Das funktioniert ganz gut mit einstelligen Ziffern. Es dürfen übrigens beliebige Zeichen -also auch Buchstaben- sein, die sich so gewichtet würfeln lassen.

Für eine allgemeinere Lösung bietet sich eine listengestützte Verteilungsfunktion an. Damit lassen sich dann mehrstellige Zahlen oder gar ganze Worte würfeln. Jeder kennt die Losbude auf der Kirmes - eine Trommel voller Nieten, die gelegentlich mit einer winzigen Prise Gewinn gewürzt wird:
setEimervollto1000repeatEimervolladdNietetolist Los-TrommeladdHauptgewinntolist Los-TrommelsetHandvollto10repeatHandvolladdTrostpreistolist Los-TrommelsetLostoitempickrandom1tolengthofLos-TrommelofLos-Trommel

Also: Traue keiner Verteilungsfunktion, die Du nicht selbst getestet hast!
Ich verwende hierzu das Zufalls-Labor: http://scratch.mit.edu/projects/21289848/

…soweit erst mal - und schönen Sonntag noch

Last edited by koDoz (June 1, 2014 10:50:01)

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

Danke für die Mühe! Hatte wenig Zeit daran zu arbeiten, aber nun gut, das sieht auch beser aus als das, was ich vor hatte ^^
Ich werd's dann mal gleich sofort einbuen
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

so fertig, hab auch noch kurz das Urnenmodell ergänzt
LiFaytheGoblin
Forum Moderator
1000+ posts

gewichtete Zufallszahlen

Wow gute Arbeit ihr alle!
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

LiFaytheGoblin wrote:

Wow gute Arbeit ihr alle!
ja, ‘a good Collab!’

Last edited by koDoz (June 3, 2014 06:01:43)

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

Update im Wiki-Beitrag
Noxxer
Scratcher
100+ posts

gewichtete Zufallszahlen

TM_ wrote:

Update im Wiki-Beitrag

auf so ne Idee vorne mehr und hinten weniger (Gewichtete Zufallszahlen) bin ich noch nie gekommen

Und ich habe fast nur Spiele mit Zufallszahlen.
LiFaytheGoblin
Forum Moderator
1000+ posts

gewichtete Zufallszahlen

koDoz wrote:

LiFaytheGoblin wrote:

Wow gute Arbeit ihr alle!
ja, ‘a good Collab!’
Du wärst sicher auch ein guter Wiki Autor! Hättest du nicht lust, da mitzumachen?
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

Sorry @TM_ wg Abtauchen. Hänge in anderen Projekten. Hier nun Part 2. Wenn Du wieder so freundlich wärst …


————————
Schräg gewichtete Zufallszahlen

Z.B. in einer Regen-Simulation ist eine gleichmäßige Verteilung der fallenden Tropfen auf dem Bildschirm wenig überzeugend. Gesucht wird eine Zufallsfunktion, deren Häufigkeitsverteilung an der Raumtiefe gekoppelt ist. Mit anderen Worten sollen große Zahlen häufiger auftreten, als kleine Zahlen. Ein erster Ansatz:

z = Max - sqrt( random( Min, Max) * random( Min, Max))

Tatsächlich erzeugt dies hinten (also in der größeren Raumtiefe Z) mehr Tropfen, als im Vordergrund. Eine noch überzeugendere Verteilung erzeugt diese einfache Verschachtelung zweier Zufallsfunktionen.

z = random( random( Min, Max), Max)

Weitere Verschachtelungen verschärft die Verteilung z.B. durch:

z = random( random( random( Min, Max), Max), Max)

Eine Umkehrung der Verteilung - die kleine Werte häufiger liefert - erreicht man durch folgende Formel:

z = random( Min, random( Min, Max))

'schräg' gewichtete Zufallsfunktionen lassen sich allerdings auch durch Subtraktion vom Maximalwert umkehren:

z = Max - random( random( Min, Max), Max)

Hinweis: die vorgestellte Lösung genügt visuell dem gesetzten Anspruch. Eine exakte mathematische Erörterung der perspektivischen Verkürzung bei räumlichen Simulationen gehört an anderer Stelle.
———————–

Für Part 3 fehlt mir noch etwas ‘Futter’. Ich bleib dran …


Last edited by koDoz (June 16, 2014 09:13:58)

TM_
Scratcher
1000+ posts

gewichtete Zufallszahlen

koDoz wrote:

Sorry @TM_ wg Abtauchen. Hänge in anderen Projekten. Hier nun Part 2. Wenn Du wieder so freundlich wärst …


Kein Problem, ich hab ja auch genug zu tun

koDoz wrote:

Für Part 3 fehlt mir noch etwas ‘Futter’. Ich bleib dran …



Was hast du denn dafür geplant? Ich hatte schließlich Mathe-LK, da kann ich noch so einiges mit reinnehmen, aber ich weiß halt nicht genau ab wann es für einen jungen Scratcher zu kompliziert wird
(Habe schonmal das Seed-System ergänzt und erklärt, Beispielscript folgt noch!)
koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

TM_ wrote:

Was hast du denn dafür geplant? Ich hatte schließlich Mathe-LK, da kann ich noch so einiges mit reinnehmen, aber ich weiß halt nicht genau ab wann es für einen jungen Scratcher zu kompliziert wird

Ja hast recht, die Balance zu halten ist nicht einfach
a) den jungen Scratchern praktische Handreichungen zur Problemlösung geben, ohne ihn gleich mit Theorie umzuhauen
b) die Themen nicht zu verniedlichen bzw. faktisch Zweifelhaftes meiden (das Mathematiker und ProgiProfis aufheulen läßt)

Aber das Thema ist es wert. Schließlich kommen Spiele, Simulationen und Grafikexperimente kaum ohne Random aus. Möglicherweise kann man letztendlich einen begleitenden Artikel aufsetzten, der die Materie etwas tiefer behandelt. Wäre auch schön, hierzu einige Projekte zu verlinken, die verschiedene Zufallsaspekte anschaulich verdeutlichen.

Der Wiki-Artikel liest sich sehr gut, auch Dank der Verzierungen. Die beiden Punkte 3.2 Urnenmodelle und 3.3 Reproduzierbare Zufallsergebnisse sind sicherlich eigene Hauptpunkte wert - also kommen bestimmt auch gut als Punkt 4. und 5.

Für mich derzeit spannend ist der sagenwirmal psychologische Aspekt von Zufallsverteilung. Z.B. wie zutreffend ist die individuelle Erwartungshaltung bei sog. Glückspielen wie Poker oder jetzt hier speziell bei diesem alten Kulturspiel Schnick-Schnack-Schnuck?
Nachweislich ist ein Programm, das die Symbole Schere Stein Papier stur zufällig wählt, dem menschlichen Spieler überlegen. Menschen können keine wirklich zufälligen Entscheidungen treffen.
Lassen sich die menschlichen Spielzüge mit einfachen Scratch-Mitteln analysieren, um die Gewinnquote des Programms noch weiter hinauf kitzeln? - Ich probier's gerade.



Last edited by koDoz (June 18, 2014 13:24:09)

koDoz
Scratcher
42 posts

gewichtete Zufallszahlen

Noxxer wrote:

auf so ne Idee vorne mehr und hinten weniger (Gewichtete Zufallszahlen) bin ich noch nie gekommen

Und ich habe fast nur Spiele mit Zufallszahlen.

na, vielleicht passt es

Last edited by koDoz (June 18, 2014 13:31:16)

Powered by DjangoBB