Discuss Scratch
- koDoz
-
Scratcher
42 posts
gewichtete Zufallszahlen
(Mai 22, 2014) … für eine Animation benötige ich sog. gewichtete Zufallszahlen:
In einer Regen-Simulation ( http://scratch.mit.edu/projects/22555906 ) sollen die Tropfen vorne seltener fallen, als im Hintergrund. Die gewürfelten Zahlen (z=Entfernung im Raum) sollen also nicht gleichmäßig verteilt sein, viele große Zahlen - wenig kleine Zahlen.
Meine intuitive Lösung ist:
Es scheint zu klappen. Aber was sagt der Mathematiker dazu? Gibt es andere Lösungen, mit der man die Häufigkeitsverteilung noch etwas flexibler einstellen kann?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(Mai 28, 2014) Nachlese: Schön, welche Resonanz dieses Thema hat. Dank den Kommentatoren! Aber schließlich kommt wohl kein Scratcher ohne Zufallsfunktionen aus, der Spiele, Simulationen, Art-Experimente usw schreibt. @TM_ hat daher den Artikel Zufallszahl im deutschsprachigen Scratch-Wiki angelegt. Dort werden dann umgehend die Ergebnisse dieses Forenthemas einfließen …
In einer Regen-Simulation ( http://scratch.mit.edu/projects/22555906 ) sollen die Tropfen vorne seltener fallen, als im Hintergrund. Die gewürfelten Zahlen (z=Entfernung im Raum) sollen also nicht gleichmäßig verteilt sein, viele große Zahlen - wenig kleine Zahlen.
Meine intuitive Lösung ist:
set (gewichtete Zufallszahl) to ([sqrt v] of (pick random (1) to ((max) * (max))))
Es scheint zu klappen. Aber was sagt der Mathematiker dazu? Gibt es andere Lösungen, mit der man die Häufigkeitsverteilung noch etwas flexibler einstellen kann?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(Mai 28, 2014) Nachlese: Schön, welche Resonanz dieses Thema hat. Dank den Kommentatoren! Aber schließlich kommt wohl kein Scratcher ohne Zufallsfunktionen aus, der Spiele, Simulationen, Art-Experimente usw schreibt. @TM_ hat daher den Artikel Zufallszahl im deutschsprachigen Scratch-Wiki angelegt. Dort werden dann umgehend die Ergebnisse dieses Forenthemas einfließen …
Last edited by koDoz (May 28, 2014 07:18:24)
- MeDiaMond
-
Scratcher
500+ posts
gewichtete Zufallszahlen
deine Variante ist gut. Hier ist auch noch eine Variante:
set [random 1 v] to (pick random (1) to ([sqrt v] of (max)))
set [random 2 v] to (pick random (1) to ([sqrt v] of (max)))
set [gewichtete Zufallszahl v] to ((random 1)*(random 2))
- TM_
-
Scratcher
1000+ posts
gewichtete Zufallszahlen
Sowas löse ich nach einem Prozentzahlen-Prinzip, ungefähr so:
Natürlich muss man auch nicht 100 nehmen, es geht mit jeder Zahl. Das Ganze hat halt den Vorteil, dass die Verteilung recht überschaubar ist und man das Ganze schnell anpassen kann falls das aktuelle Ergebnis einem nicht gefällt
Da du aber wahrscheinlich viele Ereignisse hast, weil jedes z ein neues wäre, könntest du dann jedes Ereignis so definieren:
Das wahrschienliche: (falls z= 0 vorne und z=100 hinten) setze z auf random 100 bis 60
das seltenste: setze z auf random 20 bis 0. So ist es dann auchgewichtet
set [r1 v] to (pick random (0) to (100))
if <[r1] < [60]> then
set [E v] to [wahrscheinliches Ereignis]
else
if <[r1] < [80]> then
set [E v] to [unwahrscheinliches Ereignis]
else
if <[r1] < [95]> then
set [E v] to [seltenes Ereignis]
else
set [E v] to [sehr seltenes Ereignis]
end
end
end
Natürlich muss man auch nicht 100 nehmen, es geht mit jeder Zahl. Das Ganze hat halt den Vorteil, dass die Verteilung recht überschaubar ist und man das Ganze schnell anpassen kann falls das aktuelle Ergebnis einem nicht gefällt

Da du aber wahrscheinlich viele Ereignisse hast, weil jedes z ein neues wäre, könntest du dann jedes Ereignis so definieren:
Das wahrschienliche: (falls z= 0 vorne und z=100 hinten) setze z auf random 100 bis 60
das seltenste: setze z auf random 20 bis 0. So ist es dann auchgewichtet

Last edited by TM_ (May 22, 2014 19:17:52)
- fuenf
-
Scratcher
44 posts
gewichtete Zufallszahlen
ich wüßte noch:
Zufallszahl = max * sin( random( 1, typ))
z.B. mit max = 480 typ = 90
Analog dazu lassen sich auch die kleinen Zahlen betonen: \
Zufallszahl = max * cos( random( 1, typ))
Nachtrag: Die Häufigkeit einzelner Zahlen steigt bei dieser Scratch-Lösung leider nicht kontinuierlich an, sondern erzeugt auch bei hohen Testdurchläufen in den kleinen Werte-Bereichen eine unerwartete regelmäßige kamm-artige Verteilung. Hmmm …
Zufallszahl = max * sin( random( 1, typ))
z.B. mit max = 480 typ = 90
- typ=90 erzeugt eine am Ende stark ansteigende Häufigkeit: /
- typ=180 sollte die hohen Werte noch stärker betonen (nicht getestet)
- typ=360 erzeugt auch negative Zahlen
Analog dazu lassen sich auch die kleinen Zahlen betonen: \
Zufallszahl = max * cos( random( 1, typ))
Nachtrag: Die Häufigkeit einzelner Zahlen steigt bei dieser Scratch-Lösung leider nicht kontinuierlich an, sondern erzeugt auch bei hohen Testdurchläufen in den kleinen Werte-Bereichen eine unerwartete regelmäßige kamm-artige Verteilung. Hmmm …
Last edited by fuenf (May 23, 2014 07:40:47)
- TM_
-
Scratcher
1000+ posts
gewichtete Zufallszahlen
ich wüßte noch:
Zufallszahl = max * sin( random( 1, typ))
z.B. mit max = 480 typ = 90
- typ=90 erzeugt eine am Ende stark ansteigende Häufigkeit: /
- typ=180 sollte die hohen Werte noch stärker betonen (nicht getestet)
- typ=360 erzeugt auch negative Zahlen
Analog dazu lassen sich auch die kleinen Zahlen betonen: \
Zufallszahl = max * cos( random( 1, typ))
Nachtrag: Die Häufigkeit einzelner Zahlen steigt bei dieser Scratch-Lösung leider nicht kontinuierlich an, sondern erzeugt auch bei hohen Testdurchläufen in den kleinen Werte-Bereichen eine unerwartete regelmäßige kamm-artige Verteilung. Hmmm …
Die Sinus Funktion verläuft in einer Welle, siehe dazu einfach einige Bilder auf Google
Die Cosinusfunktion auch, aber dise ist um Pi versetzt. Kann man mit dem Richtungsblock verwenden um schritte zu gehen. Denn bei 10er Schritten mitder Richtung 45° wird x ja nicht um 10 geändert. X wird um sin(Richtung) verändert und y um cos(Richtung). Es ist also nicht wie du es erst dachtest, dass eine immer stärker ansteigende Häufigkeit stattfindet. Sin(-90) ist = 0 und sin(90) ist = 0, sin von 0 hingegen ist 1. Aber da die Funktion nicht zick-zack, sondern kurvenartig verläuft, ändern sich die Werte auch nicht gleichmäßig wenn man den Wert den man in Sinus einsetzt immer um 1 erhöht.- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Du könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis 100) dann ist es wahrscheinlicher niedrige Zahlen zu bekommen als hohe. Es geht schnell in nur einer Zeile. Man kann es nur nicht so genau einstellen
- TM_
-
Scratcher
1000+ posts
gewichtete Zufallszahlen
Du könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis 100) dann ist es wahrscheinlicher niedrige Zahlen zu bekommen als hohe. Es geht schnell in nur einer Zeile. Man kann es nur nicht so genau einstellen
Einfach aber genial
dass ich auf sowas noch nie gekommen bin ^^- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Dir is das noch nie eingefallen? Ich benutz des ständig. Is einfach praktisch^^Du könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis 100) dann ist es wahrscheinlicher niedrige Zahlen zu bekommen als hohe. Es geht schnell in nur einer Zeile. Man kann es nur nicht so genau einstellen
Einfach aber genialdass ich auf sowas noch nie gekommen bin ^^
- koDoz
-
Scratcher
42 posts
gewichtete Zufallszahlen
Du könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis 100) dann ist es wahrscheinlicher niedrige Zahlen zu bekommen als hohe. Es geht schnell in nur einer Zeile. Man kann es nur nicht so genau einstellen
Das ist es - jetzt fällt es mir wie Schuppen von den Augen. In den alten Basic-Zeiten wäre mir der Groschen bestimmt schneller gefallen. Für meine Regen-Simulation (wo es hinten in größerer Entfernung häufiger tropfen soll, als vorne) verwende ich dann also sinngemäß:Zufallszahl = maxRandom - random( 1, random( 1, maxRandom))
Danke Dir @Tohmis für den Qualitätstipp, das war genau das, was ich brauche und natürlich den andern Scratchern Dank für's mit-denken.Zusatz: Die ‘steigung’ der Häufigkeitsverteilung lässt sich mit zusätzlichen Verschachtelungen sogar noch extremer herauskitzeln:
Zufallszahl = random( 1, random( 1, random( 1, maxRandom)))
Last edited by koDoz (May 23, 2014 20:07:41)
- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Immer wieder gerneDu könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis 100) dann ist es wahrscheinlicher niedrige Zahlen zu bekommen als hohe. Es geht schnell in nur einer Zeile. Man kann es nur nicht so genau einstellenDas ist es - jetzt fällt es mir wie Schuppen von den Augen. In den alten Basic-Zeiten wäre mir der Groschen bestimmt schneller gefallen. Für meine Regen-Simulation verwende ich dann also sinngemäß:
Zufallszahl = maxRandom - random( 1, random( 1, maxRandom))Danke Dir @Tohmis für den Qualitätstipp, das war genau das, was ich brauche und den andern Scratchern Dank für's Interesse.
Zusatz: Die ‘steigung’ der Häufigkeitsverteilung lässt sich mit weiteren Verschachtelungen sogar noch weiter verstärken:
Zufallszahl = random( 1, random( 1, random( 1, maxRandom)))

Was ich noch nicht raushab. Kann man die wahrscheinlichkeit auch stärker angleichen? Also das Gegenteil von weiteren verschachtelungen.
- koDoz
-
Scratcher
42 posts
gewichtete Zufallszahlen
Immer wieder gerneDu könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis 100) dann ist es wahrscheinlicher niedrige Zahlen zu bekommen als hohe. Es geht schnell in nur einer Zeile. Man kann es nur nicht so genau einstellenDas ist es - jetzt fällt es mir wie Schuppen von den Augen. In den alten Basic-Zeiten wäre mir der Groschen bestimmt schneller gefallen. Für meine Regen-Simulation verwende ich dann also sinngemäß:
Zufallszahl = maxRandom - random( 1, random( 1, maxRandom))Danke Dir @Tohmis für den Qualitätstipp, das war genau das, was ich brauche und den andern Scratchern Dank für's Interesse.
Zusatz: Die ‘steigung’ der Häufigkeitsverteilung lässt sich mit weiteren Verschachtelungen sogar noch weiter verstärken:
Zufallszahl = random( 1, random( 1, random( 1, maxRandom)))
Was ich noch nicht raushab. Kann man die wahrscheinlichkeit auch stärker angleichen? Also das Gegenteil von weiteren verschachtelungen.
Ufff! … Erst optimiere ich mal mein Projekt.
Und wenn ich heute nich pennen kann, dann werde ich es Dir anlasten- MeDiaMond
-
Scratcher
500+ posts
gewichtete Zufallszahlen
Wie wäre es damit:
set [andersrum gewichtete Zufallszahl v] to ((pick random (pick random (min) to (max)) to (max)) - (min))Oder einfach so:
set [andersrum gewichtete Zufallszahl v] to ((max) - (pick random (min) to (pick random (min) to (max))
- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Wie wäre es damit:Genau diese Lösung hat er ja schon hingeschriebenset [andersrum gewichtete Zufallszahl v] to ((pick random (pick random (min) to (max)) to (max)) - (min))Oder einfach so:set [andersrum gewichtete Zufallszahl v] to ((max) - (pick random (min) to (pick random (min) to (max))

- MeDiaMond
-
Scratcher
500+ posts
gewichtete Zufallszahlen
Stimmt, hab ich gar nicht gesehen.
Aber warum hast du dann das geschrieben?
Aber warum hast du dann das geschrieben?
Immer wieder gerne
Was ich noch nicht raushab. Kann man die wahrscheinlichkeit auch stärker angleichen? Also das Gegenteil von weiteren verschachtelungen.
- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Stimmt, hab ich gar nicht gesehen.Deine Lösung löst dieses Problem leider auch nicht. Es schränkt nur den wert ein bzw. Kehrt ihn um.
Aber warum hast du dann das geschrieben?Immer wieder gerne
Was ich noch nicht raushab. Kann man die wahrscheinlichkeit auch stärker angleichen? Also das Gegenteil von weiteren verschachtelungen.
Ich meinte, ob man auch das Gegenteil von weiteren verschachtelungen machen kann. Weniger als eine geht ja nicht.
- MeDiaMond
-
Scratcher
500+ posts
gewichtete Zufallszahlen
Ach so. Ich dachte du meintest wie man mehr kleine als große zahlen bekommt.
- forth
-
Scratcher
15 posts
gewichtete Zufallszahlen
Du könntest zwei Zufallszahlen ineinander verschachtel. Zufallszahl von (0) bis (Zufallszahl von 0 bis
Was ich noch nicht raushab. Kann man die wahrscheinlichkeit auch stärker angleichen? Also das Gegenteil von weiteren verschachtelungen.
@Thomis: Für weitere Parametrisierungen fehlt mir leider die mathematische Basis. Die vorliegenden Lösungen sind aber schon ziemlich robust und dürften schon viele Fälle abdecken!
Ich hab mal die Grafen einiger Formeln anzeigen lassen. Überraschend die Verläufe! (mein Sinus-Ansatz scheint ziemlicher Murks zu sein)
@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.
- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Ich hab noch was gefunden
Is eigentlich ziemlich interressant das thema 
Es geht so
in diesem fall 1 und 100
weitherhin ist wichtig, das bei mindestens einer zahl ein .0 dahintersteht,dami die zahlen enger zusammenliegen. wenn man will, kann man das ergebnis dann wieder runden.
wie stark es gewichtet is kann man dann durch ändern der werte realisieren
Is eigentlich ziemlich interressant das thema 
Es geht so
((pick random (1) to (20.0)) * (pick random (1) to (5)))Dabei ist es wichtig, das die beiden höchsten werte multipliziert den maximalwert ergeben und die beiden niedrigsten den minimalwert
in diesem fall 1 und 100
weitherhin ist wichtig, das bei mindestens einer zahl ein .0 dahintersteht,dami die zahlen enger zusammenliegen. wenn man will, kann man das ergebnis dann wieder runden.
wie stark es gewichtet is kann man dann durch ändern der werte realisieren
- Tohmis
-
Scratcher
100+ posts
gewichtete Zufallszahlen
Ich hab sogar noch ne lösung
einfach bestes thema
sieht so aus
Is definitiev besser als meine letzte lösung
Je höher verteilung ist, desto gleicher ist die warscheinlichkeit für jedes ergebnis von min bis max
Bei einem niedrigen verteilung ist das ergebnis mit einer höheren Warschenlichkeit niedrig
Ist sehr gut schnell und leicht einstellbar. und dazu ist es noch sehr einfach
einfach bestes themasieht so aus
((pick random (min) to (max)) mod (pick random (min) to (verteilung)))
Is definitiev besser als meine letzte lösung
Je höher verteilung ist, desto gleicher ist die warscheinlichkeit für jedes ergebnis von min bis max

Bei einem niedrigen verteilung ist das ergebnis mit einer höheren Warschenlichkeit niedrig
Ist sehr gut schnell und leicht einstellbar. und dazu ist es noch sehr einfach

Last edited by Tohmis (May 24, 2014 20:16:51)
- koDoz
-
Scratcher
42 posts
gewichtete Zufallszahlen
Ich hab mal die Grafen einiger Formeln anzeigen lassen.
Nun gibt es auch ein Remix mit der skalierbaren Formel von @Thomis: http://scratch.mit.edu/projects/22724118Last edited by koDoz (May 24, 2014 21:55:33)
dass ich auf sowas noch nie gekommen bin ^^
Das ist es - jetzt fällt es mir wie Schuppen von den Augen. In den alten Basic-Zeiten wäre mir der Groschen bestimmt schneller gefallen. Für meine Regen-Simulation verwende ich dann also sinngemäß: