webForumDet fria alternativet

Sannolikhet och slump

9 svar · 578 visningar · startad av wmaster

wmasterMedlem sedan dec. 2001349 inlägg
#1

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
#2

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
#3

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
#4

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
#5

Ä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
#6

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
#7

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

wmasterMedlem sedan dec. 2001349 inlägg
#8

okej hehe

The_HulkMedlem sedan juni 20031 837 inlägg
#9

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.

Dies_IraeMedlem sedan aug. 2001145 inlägg
#10

Bör sortera oddsen i den lösningen annars blir de inte alltid rätt.

267 ms totalt · 3 externa anrop · v20260731065814-full.30151723
132 ms — hämta forumlista (db)
128 ms — hämta statistik (db)
133 ms — hämta tråd, inlägg och bilagor (db)