Fonction aléatoire qui prend en compte les probabilités ...

Contenu du snippet

Salut à tous ...
Cette petite fonction est néé hier, pendant le repas du soir avec ma chere mère ... En fait, je me demendais comment on peut coder quelque chose qui permet de choisir aléatoirement entre, par exemple, 4 propositions que nous appellerons A B C et D, sachant que ces propositions ont des probabilités de tomber différentes, respectivement 0.1 0.2 0.3 et 0.4.
J'ai pas mal cherché ... Et en fait, c'est carrément tout con. Donc voilà ce que j'ai codé : la fonction ProbaRand();

Source / Exemple :


<?php
   //ProbaRand();
   function ProbaRand()
   {
      $arg_list = func_get_args();
      $tablo = array();
      $start = 0;
      foreach($arg_list as $arg_curr)
      {
         if(!is_array($arg_curr)){return (false);}
         $tempo = array();
         list($tempo['name'], $tempo['probability']) = $arg_curr;
         $tempo['start'] = $start;
         $tempo['end'] = $start + $tempo['probability'];
         $start += $tempo['probability'];
         array_push($tablo, $tempo);
      }
      $result = mt_rand(0, 1000)/1000;
      foreach($tablo as $once)
      {
         if($result >= $once['start'] AND $result <= $once['end'])
         {
            return($once['name']);
         }
      }
   }
  //Par exemple : ProbaRand(array('A', 0.1), array('B', 0.2), array('C', 0.3), array('D', 0.4));
?>

Conclusion :


Voilà voilà ... Bon, je le reconnais, y a moyen de faire plus cours et plus beau (parce que c'est quand même très moche), mais j'ai pas trop eu le temps. Pour info, j'ai testé avec les probas et les propositions citées ci-dessus, et pour 50 000 ... Disons, lancés on obtient :
A : 0.10138
B : 0.20062
C : 0.29818
D : 0.39982
Ce qui correspond bien aux probas énoncées.
Ce code peut par exemple servir dans certains jeux, ou l'ordinateur doit choisir entre une action et une autre, sachant que quelque chose le pousserait à en choisir une plus que l'autre ... C'est pas très clair, mais c'est pour ça que je vais l'utiliser.
Voilà, ++ !
LocalStone.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.