AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zufall: Mit Wahrscheinlichkeit 1:x generieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zufall: Mit Wahrscheinlichkeit 1:x generieren

Ein Thema von yankee · begonnen am 30. Jun 2005 · letzter Beitrag vom 31. Okt 2005
Antwort Antwort
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Jun 2005, 06:57
Eigentlich will ich das in PHP machen, aber Delphicode würde mir genauso weiterhelfen, schließlich geht es ums prinzip und nicht um die Syntax. Sry, ich komme einfach nicht drauf.
Ich habe in einer variable x eine float-Zahl. Jetzt will ich einen Boolean-Zufall generieren und zwar so, dass je höher meine Zahl ist, je höher ist die Wahrscheinlichkeit true raus zu bekommen.
Also nach dem Prinzip, dass die Wahrscheinlichkeit true zu bekommen 1:x ist.
Wie mache ich das?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Jun 2005, 07:10
Delphi-Quellcode:
function Odds(x: double): boolean;
begin
  Result := Random < Frac(x);
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#3

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Jun 2005, 07:19
@marabu:
Das würde doch dazu führen, dass sich der Wert nur zwischen 0 und 1 bewegen darf (bzw. dass wenn der Wert größer als 1, dann kommt immer true raus.
Aber wenn der wert 1 ist, soll es ja 1:1 sein, als 50% Wahrscheinlichkeit. Und 1:2 oben doppelt so wahrscheinlich, dass true rasukommt, als das false rauskommt...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Jun 2005, 07:25
Hast Recht - ich hatte bei Float bereits Frac() unterstellt und - na ja - so geht es dann besser:

Delphi-Quellcode:
function Odds(x: double): boolean;
begin
  Result := Random > (1 / x);
end;
marabu

Dritter Anlauf: Langsam werde ich munter. Deine Anforderung widerspricht sich irgendwie.

Zitat von yankee:
Jetzt will ich einen Boolean-Zufall generieren und zwar so, dass je höher meine Zahl ist, je höher ist die Wahrscheinlichkeit true raus zu bekommen.
Diese Anforderung erfüllt der obige Code.

Eine Wahrscheinlichkeit 1:x erhältst du aber so:

Delphi-Quellcode:
function Odds(x: double): boolean;
begin
  Result := (Random * (1 + x)) < 1;
end;
marabu
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#5

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Jun 2005, 20:32
Zitat von marabu:
Delphi-Quellcode:
function Odds(x: double): boolean;
begin
  Result := (Random * (1 + x)) < 1;
end;
marabu
Danke, dass funzt.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Okt 2005, 09:13
ich hab grad den thread zufällig gefunden.

wäre folgendes nicht viel intuitiver?

Delphi-Quellcode:
function Wahrscheinlichkeit(W: Integer):Boolean;
begin
  Result:=not (Random(W+1)=0);
end;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 30. Okt 2005, 11:47
Was hier allgemein erreicht werden will, ist aus einer Verteilungsfunktion einen Random Wert zu erhalten, der bei genügend vielen Werten die Verteilungsfunktion beliebig genau abdeckt. Da Ganze fällt unter den Begriff "Monte Carlo Simulation2. Ich hab hier mal ein Kapitel aus meiner Diplomarbeit angehängt, das hoffentlich das Prinzip erklärt. Interessant ist dabei nur Abschnitt 1.1.
Angehängte Dateien
Dateityp: pdf montecarlo_296.pdf (413,5 KB, 17x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 31. Okt 2005, 00:01
Zitat von yankee:
Ich habe in einer variable x eine float-Zahl. Jetzt will ich einen Boolean-Zufall generieren und zwar so, dass je höher meine Zahl ist, je höher ist die Wahrscheinlichkeit true raus zu bekommen.
Also nach dem Prinzip, dass die Wahrscheinlichkeit true zu bekommen 1 ist.
Auch wenn der Thread schon etwas älter ist, was ich vorhin nicht bemerkt habe, versteh ich deine Aussage nicht. Mit x wachsend heisst 1/x ist fallend.

Dir fehlt hier definitiv eine Aussage, ab wann deine Zahl gross ist.

Die von Marabu gezeigte Lösung mag wohl zustimmen, aber wer mal mein Kapitel über Monte Carlo durchgelesen hat, kommt zu folgendem Ergebnis, mit xi eine Zufallszahl zwischen 0..1:

Code:
xi = Integral[0..x] (1/x dx)
   = ln x

=> x = e^xi
Ich bin etwas verwirrt, was die Anfangsfragestellung angeht. Aber vielleicht kann das ja nochmals genauer dargestellt werden.
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#9

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 31. Okt 2005, 00:41
@Jelly: Naja, also wie ich schon geschrieben habe, hat sich das Problem an sich eigentlich längst erledigt. Der Thread ist nicht nur ein bißchen älter, sondern schon etwa 5 Monate alt. Ich kann mich zwar noch daran erinnern, dass Problem gehabt zu haben, aber nichtmehr so ganz genau in welchem Zusammenhang.
Wenn wir das hier also noch weiter diskutieren, dann nur noch für andere, die mal das gleiche Problem haben und einfach so wegen dem Prinzip.
Aber gut, dann mal los: Ich glaube du hast das Problem trotzdem etwas missverstanden. Es geht nämlich darum einen boolean-Wert zu generieren. Also wie zum Beispiel bei einem Kartenspiel mit 3 Karten, wo du die richtige ziehen musst. Es interessiert in diesem Fall jetzt mla nicht wie hoch die Wahrscheinlichkeit ist, dass ich die richtige Karte ziehe, sondern ich ziehe einfach und es war richtig oder nicht. Und e^xi ist jedenfalls kein Boolean.

@glkgereon:
Nein, das geht nicht. Random ohne Parameter liefert dir eine Zahl (float) zwischen 0 und 1 und mit Paremeter einen Integer. Alleridngs musst du soweit ich weiß Random, wenn du ihm schon etwas übergibst einen Integer übergeben.
Zitat von yankee:
Ich habe in einer variable x eine float-Zahl.
Hilft also nicht.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

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

Re: Zufall: Mit Wahrscheinlichkeit 1:x generieren

  Alt 31. Okt 2005, 10:39
Ich glaub jetzt hab ich das Problem verstanden. Ich hatte in de Vergangenheit wohl zu viel mit "Monte Carlo" zu tun, und meine alles was mit Wahrscheinlichkeiten zu tun hat, hat zwangsläufig was mit Monte Carlo zu tun.

Aber die Lösung wurde demnach ja dann schon geschrieben und muss jetzt nicht wieder neu aufgerollt werden. Danke aber für detaillierte Schilderung.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:25 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