AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zufals-Boolean erzeugen

Ein Thema von ManuMF · begonnen am 25. Sep 2005 · letzter Beitrag vom 27. Sep 2005
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#21

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 19:45
@Olli:Ob ich nun
bRand := Boolean (Random (2)) nehme, oder
bRand := Boolean (Random (10000) mod 5000) ist, zumindest beim Delphi-Randomgenerator, auch mathematisch ein und die selbe Sosse.

@BenjaminH: Stimmt, aber ist das Zufall? Nein! Denn Du hast vorher bestimmt, wie das Ergebnis sein soll: Wenn Du Dir die ersten 999 Ergebnisse anschaust, weist Du 100%ig, wie das 1000ste aussieht. Da kann man dann von Zufall nun wahrlich nicht mehr sprechen. Du wirst also mit deinem Verfahren keine 1000 Zufallsbooleans erzeugen, sondern maximal 999. Im Regelfall sogar weniger.

Bei Zufallszahlen kann man eben nicht vorhersagen, wie oft welche Zahl kommt. Man weiss nur, das 'am Ende des Tages', also in der Tendenz, die Wahrscheinlichtkeit am höchsten ist, das die Zahlen gleichverteilt sind. Ob nun 'zufällig' die 10000000 Zahlen 1 sind, weiss man nicht, aber es könnte sein und wäre natürlich legitim.

Hört auf, Euch den Zufall so hinzubiegen, wie ihr ihn gerne hättet. Nehmt dann lieber Permutationen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#22

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 19:46
Zitat von Sergej:
Außerdem kann es bei deiner Lösung durchaus genauso vorkommen, dass man 10 mal hintereinander true bekommt oder?
Das stimmt so nicht, dass das genauso vorkommen kann wie 5 mal true und 5 mal falsch.

Die Wahrscheinlichkeit, dass beim ersten Wurf TRUE rauskommt, beträgt 1:2
Die Wahrscheinlichkeit, dass beim zweiten Wurf UND beim ersten TRUE rauskommt, beträgt 11:2), also 1:4=1:2^2

10 mal hintereinander TRUE zu erhalten hat also eine Wahrscheinlichkeit von 1:2^10, also 1:1024

Die Wahrscheinlichkeit hingegen, 5 mal TRUE und 5 mal FALSE rauszubekommen beträgt 1:2.

Noch ne andere Anmerkung... Das Erstellen eines Arrays, anschliessendes Mischen, und wieder Ausspucken der Werte hat nun aber mal rein gar nichts mehr mit Wahrscheinlichkeit zu tun, da damit garantiert wird, dass 5 mal true und 5 mal FALSE bei rauskommt. Das Problem ist also damit bestimmt, und hat nichts mehr mit random zu tun.
  Mit Zitat antworten Zitat
Sergej

Registriert seit: 12. Jun 2003
Ort: Stuttgart
169 Beiträge
 
#23

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 19:53
Zitat von Jelly:
Zitat von Sergej:
Außerdem kann es bei deiner Lösung durchaus genauso vorkommen, dass man 10 mal hintereinander true bekommt oder?
Das stimmt so nicht, dass das genauso vorkommen kann wie 5 mal true und 5 mal falsch.

Die Wahrscheinlichkeit, dass beim ersten Wurf TRUE rauskommt, beträgt 1:2
Die Wahrscheinlichkeit, dass beim zweiten Wurf UND beim ersten TRUE rauskommt, beträgt 11:2), also 1:4=1:2^2

10 mal hintereinander TRUE zu erhalten hat also eine Wahrscheinlichkeit von 1:2^10, also 1:1024

Die Wahrscheinlichkeit hingegen, 5 mal TRUE und 5 mal FALSE rauszubekommen beträgt 1:2.

Noch ne andere Anmerkung... Das Erstellen eines Arrays, anschliessendes Mischen, und wieder Ausspucken der Werte hat nun aber mal rein gar nichts mehr mit Wahrscheinlichkeit zu tun, da damit garantiert wird, dass 5 mal true und 5 mal FALSE bei rauskommt. Das Problem ist also damit bestimmt, und hat nichts mehr mit random zu tun.



Also mit "genauso" meinte ich auf keinen Fall "genauso oft". Ich wollte damit nur darauf hinweisen, dass es durchaus möglich ist.


Greetz Sergej
Ceterum censeo cartaginem esse delendam
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#24

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 19:57
Zitat von Sergej:
Ich wollte damit nur darauf hinweisen, dass es durchaus möglich ist.
Das stimmt natürlich.
  Mit Zitat antworten Zitat
Sergej

Registriert seit: 12. Jun 2003
Ort: Stuttgart
169 Beiträge
 
#25

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 20:11
[Ein wenig OT]

@Jelly: Es ist doch von der Wahrscheinlichkeit her völlig egal welchen der folgenden Fälle ich habe:

0 0 0 0 0 0
1 0 0 0 0 0
1 1 0 0 0 0
.
.
.

Die W. liegt bei jedem 'Wurf' bei 0.5, sowohl für 1 also auch für 0. Das bedeutet aber wiederum, dass die W. für einen bestimmtenes Ergebnis bei (1/2)^n liegt...oder?

Lasse mich gerne belehren

[Edit] Formulierung verdeutlicht


Greetz Sergej
Ceterum censeo cartaginem esse delendam
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#26

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 20:30
Zitat von Sergej:
Es ist doch von der Wahrscheinlichkeit her völlig egal welchen der folgenden Fälle ich habe:

0 0 0 0 0 0
1 0 0 0 0 0
1 1 0 0 0 0
.
.
.
Das stimmt so schon. Bei deinem Bsp. von 6 Würfen musst du dann aber auch so deine Tabelle woweiterbauen, und alle Möglickeiten betrachten. Bei 6 Würfen kriegst du somit 2^6 unterschiedliche Kombinationen von möglichen Reihenfolgen. Und von diesen 2^6 Möglichkeiten trifft nun mal eben nur eine einzige zu, wo lauter EINSEN stehen. Also ist die Wahrscheinlichkeit, 6 mal TRUE zu erhalten 1:2^6.

Zitat von Sergej:
Die W. liegt bei jedem 'Wurf' bei 0.5, sowohl für 1 also auch für 0. Das bedeutet aber wiederum, dass die W. für einen bestimmtenes Ergebnis bei (1/2)^n liegt...oder?
Fast. Was Du hierbei nicht berücksichtigst, ist der Fakt, dass es im Grunde egal ist ob deine ersten 3 Würfe TRUE ergeben, und deine letzten 3 FALSE, oder eben umgekehrt... Ich verdeutliche es mal am Bsp. von 4 Würfen. Hier gibt es 2^4 Kombinationen, und zwar diese hier:
Code:
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
In dieser Liste spielen 2 Kombinationen eine gesonderte Rolle und entsprechen deiner Vorstellung von (1/2)^n. Nämlich 0000 und 1111. Für beide gilt eine Wahrscheinlichkeit von 1:16=1:2^4 diese Kombination zu erhalten.

Die Wahrscheinlichkeit jedoch 2 mal 0 und 2 mal1 zu erhalten, ist dabei grösser, da es ja egal ist ob du 0011, 1100, 0101, 1010 usw. hast, um 2 mal 0 und 2 mal 1 zu erhalten... Zähle aus der obigen Liste alle Kombinationen von 2 mal 0 und 2 mal 1, so sind das diese:
Code:
0011
0101
0110
1001
1010
1100
Die Gesamtwahrscheinlichkeit 2 mal 0 und 2 mal 1 zu erhalten beträgt demnach 6:16=3:8, also 37,5%

Das kann man aber auch ausrechnen. Googeln nach Bei Google suchenPermutationen sollte das zu was führen.
  Mit Zitat antworten Zitat
Sergej

Registriert seit: 12. Jun 2003
Ort: Stuttgart
169 Beiträge
 
#27

Re: Zufals-Boolean erzeugen

  Alt 25. Sep 2005, 20:43
Ahhh...ich erkenne meinen Denkfehler Die Reihenfolge wird ja nicht berücksichtigt...Danke für die Erklärung


Greetz Sergej
Ceterum censeo cartaginem esse delendam
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Zufals-Boolean erzeugen

  Alt 26. Sep 2005, 04:11
Ähm, Leute... jetzt mal ganz pragmatisch, ohne Ausschweife in Theorien über Zufall etc. (Auch wenn ich das ebenso interessant finde):
Die Variante mit einem zu gleichen Teilen gefüllten gemischten Array scheint mir doch sehr nach dem auszusehen, was der Fragesteller haben will!? Da hilft auch langes Lamentieren nix .

Und um an der Fachsimpelei anzuknüpfen: Auch bei dieser Variante ist sehr wohl Zufall enthalten. Nicht was das Verhältnis der Vorkommen der Werte angeht, aber durchaus (ja nach verwendetem Mischalgo) in der Reihenfolge der Vorkommen. Ob nun das letzte Vorkommen mit Kenntniss aller vorigen determiniert ist, ist doch völlig unerheblich. Mit geeigneter Mischmethode ist das letzte Vorkommen genauso mit einer Wahrscheinlichkeit von 1:2 true (bzw. false) wie es an jeder anderen Stelle auch wäre (wenn das Array 1:1 true:false gefüllt ist).

Ich glaube nicht dass der Fragesteller ausdiskutieren wollte ob er nun (pseudo-)echten Zufall haben möchte / brauchen kann, sondern ganz einfach eine Lösung zu seinem Problem sucht. Diese wäre ein solches Array denke ich


Eine RandomBool-Funktion gibt es in Delphi nicht, allerdings stehen im Thread verteilt nun mehrere Wege das zu erreichen. Und wenn es nun unbedingt als Funktion sein soll... verpack es in eine . Die Bedingung nach N Ziehungen aber je N/2 true und false zu erhalten garantiert diese Herangehensweise jedoch nicht. Dazu wäre es eben im Vorfeld nötig zu wissen wie viele Ziehungen letztlich gemacht werden sollen, und sich der Möglichkeit des Arrays zu bedienen.
Ohne Kenntnis über die Gesamtzahl der Ziehungen ließe sich das nur noch näherungsweise erzwingen, in dem man jedes Mal mitprotokolliert in welchem Verhältnis true/false aufgetreten sind, und die nächste Ziehung mit einer entprechend gegengerichteten Wahrscheinlichkeit durchzuführen. (Wie dies gemacht werden kann steht auch schon im Thread.) Bei dieser Variante ist es ebenfalls nicht garantiert ein 1:1 herauszubekommen, allerdings ließe sich so erreichen dass der "Zufall" schon früher als nach 1000 Ziehungen eine Ausgewogenheit erreicht. Wenn man die Wahrscheinlichkeit extrem setzt, so erhält man jedoch irgendwann ein alternierendes System bei dem lediglich true/false/true/false/... erzeugt wird -> also voll deterministisch. D.h. mit dieser Variante lässt sich der (Pseudo-)Zufall quasi stufenlos in eine deterministische Folge wandeln, die zwar frühe Ausgewogenheit immer wahrscheinlicher macht, aber eben den "Zufall" unwahrscheinlicher


Und nu geh ich schlafen
Gruss,
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#29

Re: Zufals-Boolean erzeugen

  Alt 26. Sep 2005, 05:56
Ihr könnte ja bei dem gefüllten Array bleiben, auch wenn der 1000ste Wert nchtvorhersehbar sein soll.

Man nehme einfach euer Array mit den 1000 Werten und fülle es per "Zufall" sagen wir mal mit 450 bis 550 True's (den Rest natürlich dann mit False).
Und danach wird das Array dann ebenfalls durchgemischt.

Da jetzt aber keine 500 mal True und False im Array vorhanden sind, sonder eine "zufällige" Anzahl derer, ist der 1000ste Wert nicht mehr "vorhersehbar".

Und da sich die Anzahl der "zufälligen" True's ebenfalls um die 500 bewegt, ergibt das auf dir 1000 gerechner fast eine gleichmäßige Verteilung.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#30

Re: Zufals-Boolean erzeugen

  Alt 26. Sep 2005, 08:27
Zitat von dizzy:
Ich glaube nicht dass der Fragesteller ausdiskutieren wollte ob er nun (pseudo-)echten Zufall haben möchte / brauchen kann, sondern ganz einfach eine Lösung zu seinem Problem sucht. Diese wäre ein solches Array denke ich
Ich will nicht fachsimpeln, sondern einfach nur mal kurz erklären was Wahrscheinlichkeitsrechnung ist, und man nicht einfach mal so sich ne Methode überlegen kann, damit die zufälligen Werte dann doch besser in irgendein Muster passen. Ausserdem:

Zitat von ManuF:
Das ist mir klar. Im Unterricht sollte wir mal ein Programm schreiben, in das man die Anzahl der Würfe eines Würfels eingibt und dann anzeigt, wie oft eine Augenzahl vorkommt.
Wenn man wirklich eine nach einem bestimmten Muster verteilte Zufallszahl erhalten will, z.B. bei Zahlen zwischen 1..10 sollen mit einer Wahrscheinlichkeit von 0,1% nur die 1 kommen, so muss man in die Monte Carlo Methode eintauchen, die eine Zufallszahl anders abbilden kann. Aber ich will nicht schon wieder zu weit ausholen. Meine Aussage ist einfach, dass man nicht einfach beliebig an der Erstellung der Zufallszahlen rumspielen darf. Das ist Manipulation. Da kommen nicht nur Las Vegas Kasino Inhaber in der Knast, da wird auch der Informatiklehrer seine Augen verdrehen, und die Arbeit entsprechend benoten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 6     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz