Stochastik
Eric Teubert
- php
0 dedlfix0 Daniel Thoma
Hallo erstmal,
Zu Beginn ein kleines Bildchen:
Wie man sehen kann, ist dies ein typisches Baumdiagramm mit 16 Strängen. Ich bin gerade dabei, mir ein Script in PHP zu schreiben, welches am Ende Chancen für jeden Strang ausgeben soll.
Vorausgehende Problemstellung:
Es existieren beliebig viele Items mit beliebigen Ziehchancen. Für jedes Item wird gesondert ausgewürfelt, ob es gezogen wird oder nicht. Bleiben wir mal wie im Baumdiagramm bei 4 Items:
#1 zu 50%
#2 zu 33%
#3 zu 25%
#4 zu 11%
Was ich bisher ausgerechnet habe ist, wie die Gesamtwahrscheinlichkeit ist, also wieviele Items im Durchschnitt gezogen werden. Im angesprochenen Beispiel wären das 0.97
Jeder Strang beschreibt ein Ereignis, also
( von links nach rechts )
Strang1: #1 #2 #3 #4
Strang2: #1 #2 #3 nichts
Strang3: #1 #2 nichts #4
Strang4: #1 #2 nichts nichts
.
.
.
Strang16: nichts nichts nichts nichts
Soweit, so gut ...
Was ich jetzt suche, ist eine allgemeine Berechnungsformel für einen Strang, wobei zu bedenken ist, dass es nicht immer 16 Stränge sind, sondern 2^(Anzahl Items).
Hoffe alle Klarheiten wurden beseitigt und ihr könnt mir etwas auf die Sprünge helfen :)
MfG
Eric
PS: Hups, das heißt ja Ast und nicht Strang ... nunja, hoffe ihr versteht mich trotzdem ;)
Anbei noch der bisherige Quellcode, falls er zum Verständnis beitragen sollte.
<html>
<body>
<?
$anz_items=$HTTP_POST_VARS['anzahl_items'];
if (isset($HTTP_POST_VARS['chance1'])) {
for ($i=1;$i<=$anz_items;$i++){
${'chance'.$i}=$HTTP_POST_VARS['chance'.$i]/100;
${'chance'.$i.'gw'}=1-${'chance'.$i};
}
}
?>
<form action=" <?$PHP_SELF;?> " method="POST" >
<input type="text" name="anzahl_items" value="<?echo$anz_items;?>" style="width:50px;text-align:center">
<input type="submit" value="Anzahl bestätigen">
<?
for ($i=1;$i<=$anz_items;$i++){
$left=75*$i;
echo"<form action='".$PHP_SELF."' method='POST'>\n";
echo"<input type='text' name='chance".$i."' value='".(${'chance'.$i}*100)."' style='position:absolute;left:".$left."px;top:75px;width:50px'>\n";
}
// Berechnung von Chance, wieviel durchschnittlich droppt Strang ( leer - leer - leer )
$gegenchancen=1;
$gesamtchancen=0;
for ($i=1;$i<=$anz_items;$i++){
if (${'chance'.$i.'gw'} != 0) {
$gegenchancen *= ${'chance'.$i.'gw'};
}
$gesamtchancen += ${'chance'.$i};
}
$endchance=$gesamtchancen-$gegenchancen;
echo"<br><b><u>Effektive Dropchance:</u></b> ".round(($endchance*100),2)."%";
?>
</form>
</body>
</html>
echo $begrüßung;
Wie man sehen kann, ist dies ein typisches Baumdiagramm mit 16 Strängen.
Eignet sich dafür nicht auch ein Nested Set? Es muss ja nicht unbedingt mit einer DB verbunden sein. Zur Not sollte sich da auch ein Array dafür verwenden lassen. Die Elemente des Array (= Datensätze) sind Objekte/Arrays (Eigenschaften/Elemente entsprechen den Feldern).
Ich bin gerade dabei, mir ein Script in PHP zu schreiben, welches am Ende Chancen für jeden Strang ausgeben soll.
Ein Ende erkennt man daran, dass R = L + 1 ist. Die Vorgängerelemente bis zur Wurzel sind die mit kleinerem L und größerem R.
echo "$verabschiedung $name";
Eignet sich dafür nicht auch ein Nested Set?
Hi,
sieht interessant aus, werde es mir auf jeden Fall mal anschaun. Glaube aber, noch eine andere Möglichkeit gefunden zu haben.
Danke,
MfG
Eric
Hallo Eric,
Du willst die Wahrscheinlichkeit eines bestimmten Pfades berechen, wobei Du den gesammten Baum bereits kennst?
Da musst Du doch einfach nur alle Wahrscheinlichkeiten des Pfades multiplizieren.
Grüße
Daniel