Présentation

On va chercher à déterminer les probabilités de jets de dés par force brute.

Jet de dé simple avec relance à 10

La fonction rand(int min, int max) permet de générer un nombre aléatoire compris entre min et max. Comme il s'agit de dés à 10 faces, on utilisera rand(1,10);.

Si le jet fait 10, le dé est relancé et le résultat est ajouté au 10 obtenu précedemment (et ainsi de suite en cas d'autre 10).

Jet de dés Roll & Keep

Il s'agit de jets de dés tels que décrits dans le système de jeu Légende des cinq anneaux. On lance aléatoirement n dé à 10 faces avec le système décrit précédemment. On garde les m meilleurs jets qu'on additionne.

Par exemple pour 3g2, on jette 3 dés et on garde les deux meilleurs :

  • 8
  • 3
  • 10+3 (on a fait 10, puis la relance a donné 3)

On va ici garder le 8 et le 13 ce qui nous fait un total de 21.

Seuil de relance

Dans les exemples précédents, le seuil de relance était fixé à 10. Hors ce seuil peut varier. Si on fixe le seuil à 8 pour un 3g2, on aura par exemple :

  • 9+8+2 (on a fait 9 puis 8 et enfin 2)
  • 3
  • 7

Ce qui nous fait un total de 26

Force brute

En lançant un nombre suffisament important (par exemple 100 000) de jets de dés, on obtient des résultats représentant la probabilité approximative des différents résultats

On utilisera Google Charts pour simplifier.

<div id="results"></div>
<script type="text/javascript"
        src="https://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['corechart']}]}"></script>
    <script type="text/javascript">
    google.load('visualization', '1', {
        packages: ['corechart']
    });
    google.setOnLoadCallback(drawChart);

    function drawChart() {

        var data = new google.visualization.DataTable();
        data.addColumn('number', 'Résultat du jet');
        data.addColumn('number', 'Occurences');

        data
            .addRows([
                // Insérer les données ici
                // Sous la forme
                 [18,1],
                [20,4],
                [21,1]
                // etc
            ]);

        var options = {
            width : 900,
            height : 563,
            hAxis : {
                title : 'Résultat du jet : ', // Vous personnalisez le titre ici
            },
            vAxis: {
                title: 'Occurences'
            }
        };

        var chart = new google.visualization.ColumnChart(document
            .getElementById('results'));

        chart.draw(data, options);
    }
</script>

Simulation




Indications

Il s'agit ici d'indications concernant la réalisation. Les étudiants peuvent déroger à ces lignes directrices.

Classe Dice.php

  • Attribut reroll indiquant le seuil de relance. Cet attribut est initialisé dans le constructeur
  • Méthode simple_roll qui génère un nombre aléatoire entre 1 et 10
  • Méthode roll qui appelle simple_roll mais si la valeur générée est supérieure ou égale à reroll, alors on additionne un nouveau jet

Classe RollAndKeep.php

  • Attribut reroll indiquant le seuil de relance. Cet attribut est initialisé dans le constructeur
  • Attribut nb_roll indiquant le nombre de dés lancés. Cet attribut est initialisé dans le constructeur
  • Attribut nb_keep indiquant le nombre de dés gardés. Cet attribut est initialisé dans le constructeur
  • Attribut rolls permettant de stocker les résultats des dés (tableau)
  • Une méthode run
    • Initialise une instance de Dice
    • Initialise le tableau rolls
    • Appelle la méthode rollpour nb_roll fois, en stockant le résultat dans rolls
    • Trie le tableau en ordre inverse avec rsort
    • Renvoie la somme des nb_keep premiers éléments du tableau trié
    • Exemple pour 6g3:
      • Jets : 6 13 5 9 11 4
      • Tableau trié : [13,11,9,6,5,4]
      • Résultat : 13+11+9=33

Classe Simulation.php

  • Attribut reroll indiquant le seuil de relance. Cet attribut est initialisé dans le constructeur
  • Attribut nb_roll indiquant le nombre de dés lancés. Cet attribut est initialisé dans le constructeur
  • Attribut nb_keep indiquant le nombre de dés gardés. Cet attribut est initialisé dans le constructeur
  • Attribut nb indiquant le nombre de jets simulés. Cet attribut est initialisé dans le constructeur
  • Attribut rolls permettant de stocker les résultats des jets (tableau associatif)
  • Méthode run
    • Initialise une instance de RollAndKeep
    • Effectue nb jets de RollAndKeep
    • Stocke les résultats dans rolls sous forme associative :
      • Si la clé correspondant au résultat n'existe pas, elle est créée avec une valeur 1
      • Si elle existe, la valeur correspondante est augmentée de 1
    • Exemple :
      • 11 : [11=>1]
      • 18 : [11=>1,18=>1]
      • 4 : [11=>1,18=>1,4=>1]
      • 18 : [11=>1,18=>2,4=>1]
    • On utilise la function ksort pour trier le tableau
  • Méthode print_results qui transforme le tableau rolls pour le rendre compatible avec l'afficheur. avec l'exemple précédent, [11=>1,18=>2,4=>1] doit devenit [[4,1][11,1][18,2]]