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å.
9 svar · 578 visningar · startad av wmaster
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?
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å.
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...
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)?
Ä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)
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...
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
okej hehe
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.