begin process at 2012 05 27 20:18:18
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > FONCTION ALÉATOIRE QUI PREND EN COMPTE LES PROBABILITÉS ...

FONCTION ALÉATOIRE QUI PREND EN COMPTE LES PROBABILITÉS ...


 Information sur la source

Note :
6,5 / 10 - par 4 personnes
6,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Débutant Date de création :07/07/2004 Date de mise à jour :08/07/2004 12:32:21 Vu :5 357

Auteur : LocalStone

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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));
  • ?>
<?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.


 Sources du même auteur

Source avec Zip Source avec une capture MOTEUR D'ASPECT POUR PHP
Source avec Zip [PHPHOOK] UN PETIT SYSTÈME DE GESTION DES HOOKS DE SUBVERSIO...
Source avec Zip [PHP5] TASKSCHEDULER, UN PETIT PLANIFICATEUR DE TÂCHE EN PHP...
Source avec Zip [PHP5] NAVIGUER DANS UNE COLLECTION À L'AIDE D'UNE PSEUDO SY...
Source avec Zip Source avec une capture CLASSE D'ÉDITION DES FICHIERS DE CONFIGURATION D'APACHE

 Sources de la même categorie

EXEMPLE D'APPLICATION DE L'ALGORITHME DE DIJKSTRA EN PHP par philtr8
CLEF POUR EAN 13 ET 14 par RaftY
FONCTION DE CALCUL DU NOMBRE DE DUEL UNIQUE POUR UN NOMBRE N... par mtrix000
Source avec Zip Source avec une capture TRIANGLE DE PASCAL ET SON ÉQUATION par vendeeHdLR89
Source avec Zip CONVERTISSEUR LAMBERT2 ÉTENDU EN COORDONNÉE GÉOGRAPHIQUE (LO... par varfendell

Commentaires et avis

Commentaire de LocalStone le 07/07/2004 17:46:15

Vite, vite, des commentaires !

Commentaire de GRenard le 08/07/2004 09:57:45

C'est très bien :)
et bien codé !
9/10

Commentaire de koko le 08/07/2004 10:03:06

utilise mt_rand qui est mieux que rand ;)
sinon beau travail

Commentaire de LocalStone le 08/07/2004 12:30:49

Bah c'est sympa, merci à tous les deux. Je vais changer pour mt_rand(), parce que tu as raison, ils disent que c'est mieux et plus rapide ...
++
LocalStone.

Commentaire de LocalStone le 10/07/2004 18:10:37

Vite fait, c'est juste pour faire un exemple concret ... On peut faire un jeu du style pile ou face :
&lt;?php
if(isset($_GET['user']))
{
$user = $_GET['user'];
$result = ProbaRand(array('PILE', 0.5), array('FACE', 0.5));
if($user == $result){echo 'gagné !';}
else {echo 'perdu ...';}
}
else
{
?&gt;
&lt;form&gt;
PILE ou FACE ? &lt;br /&gt;
&lt;input type="text" name="user" /&gt;
&lt;input type="submit" /&gt;
&lt;/form&gt;
&lt;?php
}
?&gt;

Commentaire de mouahaha le 09/11/2004 13:50:53

pas mal du tout, ca peut être (c'est) un début d'IA...
bravo bravo

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales