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
rerollindiquant le seuil de relance. Cet attribut est initialisé dans le constructeur - Méthode
simple_rollqui génère un nombre aléatoire entre 1 et 10 - Méthode
rollqui appellesimple_rollmais si la valeur générée est supérieure ou égale àreroll, alors on additionne un nouveau jet
Classe RollAndKeep.php
- Attribut
rerollindiquant le seuil de relance. Cet attribut est initialisé dans le constructeur - Attribut
nb_rollindiquant le nombre de dés lancés. Cet attribut est initialisé dans le constructeur - Attribut
nb_keepindiquant le nombre de dés gardés. Cet attribut est initialisé dans le constructeur - Attribut
rollspermettant 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
rollpournb_rollfois, en stockant le résultat dansrolls - Trie le tableau en ordre inverse avec
rsort - Renvoie la somme des
nb_keeppremiers é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
- Initialise une instance de
Classe Simulation.php
- Attribut
rerollindiquant le seuil de relance. Cet attribut est initialisé dans le constructeur - Attribut
nb_rollindiquant le nombre de dés lancés. Cet attribut est initialisé dans le constructeur - Attribut
nb_keepindiquant le nombre de dés gardés. Cet attribut est initialisé dans le constructeur - Attribut
nbindiquant le nombre de jets simulés. Cet attribut est initialisé dans le constructeur - Attribut
rollspermettant de stocker les résultats des jets (tableau associatif) - Méthode
run- Initialise une instance de
RollAndKeep - Effectue
nbjets deRollAndKeep - Stocke les résultats dans
rollssous 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
ksortpour trier le tableau
- Initialise une instance de
-
Méthode
print_resultsqui transforme le tableaurollspour 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]]