wmasterMedlem sedan dec. 2001349 inlägg Hm jag har ett litet problem...
Finns det något smidigt tillvägagångssätt för att slumpa fram ett tal med olika stora sannolikhet?
Ex. Häst A vinner 40% av gånger, häst B 25%, häst C 20%, häst D 15%
Dessa sannolikheter ska tas hänsyn till när sedan vinner "slumpas" fram.
Någon som sitter inne med en bra lösning?
PeeerMedlem sedan mars 20025 907 inlägg En fullösning som borde kunna fungera är att slumpa fram ett tal mellan 0 och 100. Är talet mellan 0 och 40 så vinner häst A, är talet mellan 40 och 65 så vinner häst B osv..
Finns säkert snyggare sätt, men det borde kunna fungera ändå.
Peter SMedlem sedan dec. 20025 483 inlägg Slumpa ett tal i intervallet [0-1) och avrunda det till två decimaler. Om resultatet r ligger mellan 0-0.39 vinner A; 0.4 <= r <= 0.64, då B; 0.65 <= r <= 0.84, då C; D annars.
Red./ 4 minuter sen...
wmasterMedlem sedan dec. 2001349 inlägg Mjo några sådana intervall har jag också funderat på...men jag ska basera vinstchansen på ett oddstal..tex häst A har odds: 1,25, häst B har 4...
Hur ska man då göra dessa intervall för att lägst odds har störst vinstchans (propotionellt mot odds)?
sl0kMedlem sedan maj 2005562 inlägg Är inte jättebra på oddsräkning men 1,25 i odds motsvarar väl ca 56% chans ?
4:1 odds 80%
dvs
odds/(odds + 1)
wmasterMedlem sedan dec. 2001349 inlägg Hm tror nog att det är 1/odds som ger chansen. Vidare om jag kör detta på alla hästars odds i loppet får jag 1 vilket bör stämma. Då får jag ett intervall från 0-1 som jag kan dela in...
sl0kMedlem sedan maj 2005562 inlägg
wmaster skrev:
Hm tror nog att det är 1/odds som ger chansen.
ok.. utgick från pokerodds beräkningar.. inser nu att det inte är samma
The_HulkMedlem sedan juni 20031 837 inlägg summera oddsen, använd sedan rand(min, max);
därefter får du köra någon liten loop som kontrollerar vilken som vann.
$odds = array(1.25, 1.12, 2.3);
$total = 0;
for($i=0; $i<sizeof($odds); ++$i)
{
$total += $odds[$i];
}
$rnd = rand(0, $total * 100); // multiplicera med 100 för att få bättre spridning. rand() returnerar ett heltal
$sum = 0;
$winner = -1;
for($i=0; $i<sizeof($odds); ++$i)
{
$sum += ($odds[$i] * 100);
if($rnd < $sum)
{
$winner = $i;
break;
}
}
echo "Vinnare är $winner";
skulle kunna vara en lösning.
möjligt den innehåller något glapp i gränserna mellan oddsen.
Bör sortera oddsen i den lösningen annars blir de inte alltid rätt.