Prozentualer Zufall

Sasser

Erfahrenes Mitglied
Guten Tag!

Ich möchte gern in PHP ein Ereignis per Zufall anzeigen lassen. Ausgangspunkt ist ein prozentualer Wert, nach welchem die Ausgabe zufällig erfolgen soll.

D.h. bei 100% soll das Ereignis auf jeden Fall immer angezeigt werden. Bei 10 Prozent steht eben die Change nur bei 1:10 dass das Ereignis stattfindet.

Irgendwie weiß ich aber nicht wie ich dies in Verbindung mit rand () oder anderen realisieren kann.
 
Die ZAHL 100 ist gleich 100%.

Jetzt sagst du, dass du nur 10% Antrittswahrscheinlichkeit haben willst, also nimmst du die ZAHL100 * 0.1 und erhälst die ZAHL 10.

Du lässt dir zufällig immer eine Zahl zwischen 1 und 100 geben und vergleichst dann mit der vorhigen ausgerechneten Zahl. (Kleinergleich = Tritt ein, größer tritt nicht ein)

So hast du pseudo 10% Wahrscheinlichkeit... für z.b. 70% rechnest du 100 *0.7.. etc


Wenn wir 100 zu groß ist, dann kannst du auch die Zahl 1 als 100% nehmen und dann musst du halt rechnen 1 * 0.3 (für 30%) und dann wieder mit einer Zufallszahl zwischen 0-1 abgleichen, wie oben.
 
Zuletzt bearbeitet:
Auf die schnelle würde ich das in etwa so angehen, ich bin mir aber sicher das es da
1000 mal schönere Lösungen für gibt aber zumindest funktionierts bei mir auf diese
Art:

PHP:
<?php

srand ((double)microtime () * 1000000 );
$wuerfeln = rand(1, 100);

if ($wuerfeln <= 10) {
    echo 'Gewuerzgurkenregen!' . '<br />';
   } else {
    echo 'Loch im Schuh!' . '<br />';
}
?>

Wenn ich das ganze hier 100 mal durchlaufen lasse sollte eigentlich in ~10 Prozent
der Fälle "Gewuerzgurkenregen!" ausgegeben werden und in ~90 Prozent der Fälle
"Loch im Schuh!".

Vielleicht hilft es Dir ja weiter auf der Suche nach einer eleganteren Variante, für
diese wäre ich dann auch sehr dankbar denn meinen "Kot" kann sich ja keiner
antun *g*
 
Zuletzt bearbeitet:
Hiho alle.

Also EnricoX Code funktioniert tadelos.
Habe da aber mal eine Frage dazu. Ist es möglich ein Wahrscheinlichkeitsfaktor einzubauen?
1 Soll sozusagen die Häufigste Zahl sein und 100 die seltenste.
So das die 100 eben einmal von 100mal möglich wäre und 1 eben sehr oft.

Die Wahrscheinlichkeit soll sozusagen steigend/fallend sein.

Geht sowas und wenn ja wie?
 
Grüße,

rand() liefert dir meines Wissens nach, Zahlen gleich verteilter Häufigkeit. Es kann also die 1 mit der gleichen Wahrscheinlichkeit auftreten wie die 56 (im Intervall [1,100]). Um das ganze vllt. irgendwie zu simulieren müsstest du dir eine mathematische Funktion basteln. Die Sinusfunktion wäre zum Beispiel bis PI/2 eine solche Funktion, bei der es ein Maximun gibt. Diese kannst du nach belieben auf der x-Achse verschieben.

Nachteil an der ganzen Sache - bei der Sinusfunktion hast du immer nur 1 Maximum.
Heißt, das Ganze funktioniert nur, solange es nicht 2 Zahlen mit der gleichen Wahrscheinlichkeit geben soll.

Hoffe das hat dir ein wenig geholfen.
 
  • Gefällt mir
Reaktionen: Joe
Uff also da muss ich mich wohl noch mal etwas näher Mit Mathematischen Funktionen auseinandersetzen. Dennoch Danke für den Tip.

Es soll ja eh immer nur eine Zahl und entsprechendes Ereigniss ausgegeben werden eben nur mit unterschiedlicher Wahrscheinlichkeit. Von daher würde nur 1 Maximum genügen.
 
Grüße,

ich bins nochmal.
Mir ist gerade noch eingefallen, dass es auch noch einfacher geht :p.
Du könntest dein Prüfintervall ja einfach vergrößern, um auch die Wahrscheinlichkeit zu erhöhen.

Mal auf das Beispiel weiter oben bezogen:

Man könnte sagen, dass
PHP:
if($wuerfeln <= 10)

eine Wahrscheinlichkeit von 10% hat.
Jetzt könntest du das Ganze noch ein wenig ausdehnen (wie oben beschrieben):

PHP:
if($wuerfeln >= 30 && $wuerfeln <= 60)

dann hättest du ja im zweiten Beispiel eine höhere Wahrscheinlichkeit (30%) gegenüber dem Ersten.

Wobei ich mir jedoch nicht sicher bin ist, ob beim zweiten mal abrufen von $wuerfeln eine neue Zufallszahl gesucht wird. Um dem entgegen zu wirken sollte man den Wert dann vielleicht lieber noch in einer separaten Variable abspeichern.
 
Das ist es ja gerade die Wahrscheinlichkeit ist bei jeder Zahl 1-100 in diesen Bsp gleich es kann sogar sehr gut möglich sein das eine Zahl zb 99 4 mal hintereinander auftaucht.

PHP:
//Zufallsgenerator erzeugt Zahl 1-100 für prozentuale Wahrscheinlichkeit ob Gegenstand gefunden wurde:
mt_srand ((double)microtime () * 1000000 );
$wuerfeln = mt_rand(1, 100);
switch ($wuerfeln) {
    case $wuerfeln >= 0 && $wuerfeln <= 10:
		echo "<p>Chance unter 10%</p>";
		break;
	case $wuerfeln >= 11 && $wuerfeln <= 20:
		echo "<p>Chance unter 20%</p>";
		break;
	case $wuerfeln >= 21 && $wuerfeln <= 30:
		echo "<p>Chance unter 30%</p>";
		break;
    case $wuerfeln >= 31 && $wuerfeln <= 40:
		echo "<p>Chance unter 40%</p>";
		break;
	case $wuerfeln >= 41 && $wuerfeln <= 50:
		echo "<p>Chance unter 50%</p>";
		break;
	case $wuerfeln >= 51 && $wuerfeln <= 60:
		echo "<p>Chance unter 60%</p>";
		break;
	case $wuerfeln >= 61 && $wuerfeln <= 70:
		echo "<p>Chance unter 70%</p>";
		break;
	case $wuerfeln >= 71 && $wuerfeln <= 79:
		echo "<p>Chance unter 80%</p>";
		break;
    case 80:
		echo "<p>Bauplan Stufe 1 Zufallsgenerator Bauplanart</p>";
		break;
    case 81:
		echo "<p>Bauplan Stufe 2 Zufallsgenerator Bauplanart</p>";
		break;
    case 82:
		echo "<p>Bauplan Stufe 3 Zufallsgenerator Bauplanart</p>";
		break;
    case 83:
		echo "<p>Bauplan Stufe 4 Zufallsgenerator Bauplanart</p>";
		break;
    case 84:
		echo "<p>Bauplan Stufe 5 Zufallsgenerator Bauplanart</p>";
		break;
    case 85:
		echo "<p>Bauplan Stufe 6 Zufallsgenerator Bauplanart</p>";
		break;
    case 86:
		echo "<p>Bauplan Stufe 7 Zufallsgenerator Bauplanart</p>";
		break;
    case 87:
		echo "<p>Bauplan Stufe 8 Zufallsgenerator Bauplanart</p>";
		break;
    case 88:
		echo "<p>Bauplan Stufe 9 Zufallsgenerator Bauplanart</p>";
		break;
    case 89:
		echo "<p>Bauplan Stufe 10 Zufallsgenerator Bauplanart</p>";
		break;
	default:
		echo "<p>Chance über 89%</p>";
		break;
}

Sagen wir mal es ginge um ein Gewinnspiel 100 wäre der absolute Jackpot sollte aber wirklich nur äusserst selten passieren. Und mit fallender Zahl fällt auch die Gewinngrösse.

Bei diesen Code kann man den Jackpot mit der selben Wahscheinlichkeit wie ein Trostpreis gewinnen. Daher ist die Idee mit der Sinusfunktion schon mal der beste Ansatz in meiner Thematik.
Leider kann ich mir noch nicht so recht ein Bild machen wie das in Code ausehen würde.
 
Also,

ich habe mich mal noch ein bisschen belesen, und erfahren, dass die Gleichverteilung nur ausbleibt, wenn man einen physikalischen Zufallszahlengenerator verwendet - heißt das Ergebnis ist nicht eindeutig vorhersehbar. Dazu benötigt man jedoch noch Hardware (sensoren und anderes), welche die physikalischen Gegebenheiten "misst".

Wie man das softwaretechnisch löst (ohne Hardware) kann ich dir dann leider auch nicht mehr sagen, aber ich werd morgen mal unseren Prof. fragen, was der dazu meint.
Wenn ich ne brauchbare Ausage von ihm erhalte, dann melde ich mich nochmal.

Schönen Abend noch.
 
Jap dir auch nen schönen Abend noch. Werd mir derweil auch noch mal Gedanken machen wie das Problem lösbar ist. Irgendwie ja nen nettes Rätsel :)
 
Zurück