JeuWeb - Crée ton jeu par navigateur
L'aléatoire - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Gameplay, gamedesign (https://jeuweb.org/forumdisplay.php?fid=48)
+--- Sujet : L'aléatoire (/showthread.php?tid=6968)

Pages : 1 2 3


L'aléatoire - Xenos - 28-08-2013

Bonsoir à tous,

j'aimerai avoir quelques opinions sur l'utilisation de l'aléatoire (random, aka fonctions pseudo-aléatoire) dans un jeu, au niveau de la conception:
  • Dans quels cas l'utiliseriez-vous?
  • Dans quels cas l'interdiriez-vous?
  • Quel effet a l'aléatoire sur votre jeu (en gros, puis-je perdre ou être en grande difficulté juste si je n'ai pas de chance)?

Car dans ECLERD, v0, je l'ai utilisé de ci de là (par exemple, pour le taux de natalité), mais il apparait qu'un faible changement sur certaines valeurs peut faire exploser le résultat après plusieurs mois in-game (ou tours de simulation).
Du coup, je me suis posé la question: pourquoi ma simulation déraille totalement (après quelques tous) même avec juste 1% d'aléatoire? Alors, en bon matheux bien pesant, j'ai étudié le problème... A chaque simulation, j'ai un résultat (par exemple, le nombre d'habitant) sur lequel je fais porter un peu d'aléatoire (par exemple, +-1%). Puis je regarde: que se passe-t-il après N simulation? Est-ce que ce 3% (ou 1%) a une influence ou non?...
Si je fais 100 simulations (100 tous de jeu) avec +-3% d'aléatoire à chaque simulation, alors je devrais avoir en moyenne le bon résultat (car le +- est équilibré)... en pratique, c'est dégénératif:

Courbe de dégénérescence (image trop large)

Après 100 tours de simulation, la courbe violette est largement au dessus du trait rouge (valeur nominale sans aléatoire), et on voit bien que cela dégénère très vite: après 1000 tours, on n'a quasiment plus de lien avec la valeur nominale (et on arrive à une population mondiale de 100M d'habitants par exemple >->).

Alors, je serai tenté de l'interdire totalement... Mais vous, l'utilisez-vous? Et dans quelles conditions? Quel impact cela a-t-il sur le jeu (je ne compte pas le cas d'un jeu purement aléatoire genre Loto)?


RE: L'aléatoire - Racktor - 28-08-2013

je comprends un peu ta situation et en voyant la profondeur de ton jeu j'ai immédiatement su que tu serais confronté a ce genre de problème.

Venant d'un filière économique (pas vraiment informatique, bhon tout le monde l'aura compris pour le coup ^^) on touche a des questions de modélisations statistiques, ce que l'on fait un peu dans le cas de l'économétrie avec des modèle non linaires, avec plusieurs variables.

Le problème de l'aléatoire c'est qu'il n'a pas vraiment de fondement dans ce genre de cas ou en réalité il est mis sous contrainte (Sur que si je devais calculer un R2 avec les données que tu donnes j'aurais la preuve que les variables n'ont plus vraiment quelque chose a voir entre-elles).

Dans ce cas il faut utiliser des modèles de dynamiques démographiques dans un premier temps et laisser de moins en moins place à l’aléatoire. Il y a des variables plus concrètes que l'aléatoire qui peuvent influencer un taux de natalité par exemple, comme pour le taux de mortalité même si dans ce cas l'utilisation de proba est plus logique (sur ce que je peux comprendre).

Dans le cas ou je comprends ou tu veux en venir, lancer X fois comme tu le fais (par esprit de simplification je veux très bien comprendre parce-que bon on ne peut pas tout faire) présuppose aussi que la population n'a aucune capacité a s'adapter aux conditions du système comme elle pourrait le faire dans la réalité.

Je crois en fait que ton jeu est suffisamment profond pour ne pas transformer la taux de natalité en variable purement aléatoire.


RE: L'aléatoire - Thêta Tau Tau - 28-08-2013

Si tu additionne un grand nombre de valeurs aléatoire qui font en moyenne 0, alors tu divergera très lentement.
Par contre si tu multiplie par un grand nombre de valeurs aléatoire qui font en moyenne 1, ce qui semble le cas ici, oui ça diverge vite.

EDIT : non en fait, j'ai dit de la merde. (c'est pas totalement faux mais ça dépends du nombre d'itérations et de ce qu'on appelle "diverger beaucoup").

Mais après dans un jeu ça semble bizarre que l'évolution d'une population soit purement aléatoire. Je pense que tu devrais faire en sorte qu'une population trop élevée diminue et qu'une population trop basse augmente. Du coup même en conservant une part d'aléatoire tu ne t'éloignerait jamais trop d'une valeur moyenne. Il y a pas mal de façon logiques de justifier ça (par exemple la satisfaction baisse quand le pays est surpeuplé et augmente lorsqu'il est sous peuplé).


RE: L'aléatoire - Ter Rowan - 28-08-2013

ça ne me gène pas qu'il y ait de l'aléatoire sur les taux de natalité, maladie, vieillesse par contre mettre de l'aléatoire directement sur la croissance de la population ne me semble pas pertinent : si y a rien à bouffer / boire, les gens meurent, y a aucun aléatoire la dedans

c'est donc pour moi plus un sujet de modélisation :

population N+1= min (
population N + natalité aléatoire - mortalité aléatoire (maladie / vieillesse) - guerre et autres événements,

capacité maximale de population repue
)


RE: L'aléatoire - Xenos - 28-08-2013

@Ter Rowan
Code :
population N+1= min (
population N + natalité aléatoire - mortalité aléatoire (maladie / vieillesse) - guerre et autres événements,
capacité maximale de population repue
)

C'est justement le genre de modèle utilisé, et là, il n'y a qu'un plafonnement par le haut Wink Regarde la courbe donnée avant: la bleue-sombre et la bleue-vert tombent toutes les deux (et c'est certainement la raison pour laquelle il n'y a plus que quelques millions de personne sur toute la Terre...)

@Theta*tau²
Je vais aller faire le test pour le +random() au lieu du *(1+random()%).
Ce qui m'embête dans la valeur "moyenne", c'est que je la dicte pour tout le serveur: impossible d'avoir des comportements de jeu un peu émergeant si j'oblige la densité de population à avoisiner les 10hab/km². D'autant que cela gomme les écarts planétaires: au Japon, ou à Pékin, la densité de population est monstrueuse alors qu'en pleine Sibérie, elle n'est pas très élevée. "Forcer" la convergence vers un optimum arbitraire me semble être un mauvais moyen, mais peut-être en auriez vous d'autres en tête?

@Racktor
T'as pas idée du nombre de variables que chaque fonction possède dans ma simulation >-> C'est même indécent XD
"moins de place à l'aléatoire": j'ai peur que cela ne fasse que reporter le problème. Si en place de 3% d'écart, je met 0.3%, ça dégénèrera après un nombre de tour juste plus grand.

J'ai pris l'exemple de la natalité, mais il y en a surement d'autres (les points de dégats dans un jeu de combat, la vitesse de déplacement d'une unité, la satisfaction de la population,...)

Vous l'utilisez où, vous, l'aléatoire (si vous l'utilisez)?


RE: L'aléatoire - Etienne - 28-08-2013

Je ne penses pas que l'aléatoire soit à proscrire dans la modélisation d'un jeu. C'est le facteur chance, ça laisse une dose d'incertitude et de surprise. Après l'autre penchant étant comme tu l'a bien démontré, une perte de maîtrise sur son univers et dans le cas d'une simulation ça ne pardonne pas... On peut vite arriver à des valeurs improbables.

Mais malgré tout cette notion d'aléatoire me parait importante, ne serait-ce que pour départager des cas particuliers par exemple. Et même pour des jeux de stratégie ou d'expérience, j'ai souvent entendu des joueurs déclaré qu'ils avaient l'impression de se faire "voler" leurs victoire dans le cas d'une issue aléatoire. Mais comme souvent je penses que les joueurs ne sont pas forcément ceux qui ont le meilleure retour sur leur expérience... On visualise d'avantage le côté négatif...
Pour moi une issue aléatoire (même un aléatoire contrôler) permet aussi de garder ses joueurs en haleine y compris pour les plus aguerris.
Dwarf Fortress illustre bien cette idée, on peut arrivé à un perso très puissant avec une superbe armure et tomber sur un petit malin même peu expérimenté, qui aura la chance de tirer une flèche dans une interstice et mener le beau héro à sa perte. Alors même si dans 95% des cas le héro stuffé aurait gagner sans problème cette-fois ci n'était pas la bonne. C'est un exemple un peu extrême mais je penses que ça montre bien l'idée.

Après je ne sais pas précisément comment tu calcule l'évolution de ta population dans Eclerd. Je dirais que j'aurais, personnellement, tendance à intégrer la probabilité de manière plus relative. Par exemple la mise en place d'infrastructure médicale aura pour effet de réduire la mortalité de 1% à 5%.
Pour les variations à chaque tour, si tu veux garder des valeurs aléatoires, tu peux peut-être envisager de maîtriser d'avantage son champ d'action. En intégrant des limites par exemple. Après je penses que ton niveau en math te permettra sans aucun doute de trouver une solution plus satisfaisante que la mienne à ce sujet ^^ !


RE: L'aléatoire - Xenos - 28-08-2013

Citation : la mise en place d'infrastructure médicale aura pour effet de réduire la mortalité de 1% à 5%.
C'est le style que j'utilise !
Un héro qui joue depuis 5 ans accepterai de se faire battre sur un coup de dé pur par un nouveau à peine inscrit? O.o
Si le joueur visualise le coté négatif seulement, y'a pas un risque qu'une fois dégoûté, il se tire?

Zut, je n'ai pas accès au FTP ECLERD d'ici... Confused dès que je le récupère, je retrouve la formule pour la population Wink


RE: L'aléatoire - niahoo - 28-08-2013

attends ... ton code n'existe que sur ton FTP ?


RE: L'aléatoire - Xenos - 28-08-2013

Il n'est pas sur mon PC de l'université (il n'aurait rien à y faire), il n'est pas sur mon PC portable, il est sur mon PC fixe (chez moi), sur une clef USB (chez moi), et sur l'ordinateur familial, en backup, dans le Jura (soit assez loin de Liège) Wink
Après étude, faire un
Code :
population[n+1] = population[n]+-X
débouche aussi à des "crachs", des "trous" dans la courbe démographique. Or, ces chutes entrainent souvent un écroulement de la production qui a d'autres conséquences (vive les effets collatéraux, ou les effets de bords mais je n'aime pas du tout cette traduction).
Ah, et aussi, cela oblige à gérer le cas d'une population négative :p

L'une des composantes aussi que j'ai, c'est un écart de temps entre natalité et mortalité: les vieux meurs, mais ce sont les jeunes qui font des enfants, et cet écart a de sacrées conséquences O.o


RE: L'aléatoire - Ter Rowan - 28-08-2013

(28-08-2013, 10:33 AM)Xenos a écrit : @Ter Rowan
Code :
population N+1= min (
population N + natalité aléatoire - mortalité aléatoire (maladie / vieillesse) - guerre et autres événements,
capacité maximale de population repue
)

C'est justement le genre de modèle utilisé, et là, il n'y a qu'un plafonnement par le haut Wink Regarde la courbe donnée avant: la bleue-sombre et la bleue-vert tombent toutes les deux (et c'est certainement la raison pour laquelle il n'y a plus que quelques millions de personne sur toute la Terre...)

non je n'utilise pas le même paramètre que toi :

natalité est fonction de l'hygiène, du progrès médical, du moral, etc.. (qui ne sont pas aléatoire, lié aux décisions du joueur mais qui définissent une fonction de distribution)

mortalité est fonction de l'espérance de vie donc du progrès médical, du taux de travail, ... ,

normalement tu as trois stades en fonction des progrès technologiques / moraux / etc d'une société :

phase 1 : aléatoire dur : bcp de naissances, bcp de morts potentiellement naissances >> morts, mais aussi naissances << morts (on va dire jusqu'au 18eme en europe de l'ouest, à valider mes notions d'histoire me jouent parfois des tours)

phase 2 : très faible aléatoire : naissances moyennes (mais diminution de la mortalité infantile) morts de plus en plus faibles (espérance de vie ++) ==> naissances >> morts systématiquement (itou hormis guerres mondiales qui font le double effet kiss cool : d'abord plein de morts, puis plein d'enfants)

phase 3 : très faible aléatoire : naissance très faibles, morts très faibles stabilisation puis baisse légère de la population (ex Allemagne) ou croissance très légère (ex France)

seule la première phase permet d'avoir des croissances fortement négatives au final donc plus ton joueur est "vieux" dans le jeu plus ton aléatoire aura un faible impact


maintenant si j'avais à modéliser la croissance d'une population de manière "sérieuse" je le ferai d'un point de vue matriciel par type d'age : <6ans, 6 -11 ans, 12 - 15, 15 - 20, 20 - 30, 30 - 40, 40 -50, etc...

un aléatoire +-20% d'un coeff sur la mort (coeff calculé à partir des décisions du joueur / événements)

et un stockage des données par age (1 an, 2 an, ...)et on applique les calculs

j'ai pas pris au hasard les tranches d'age enfant car fonction des décisions du joueur (travail autorisé pour les 6-11 ans ? équipement de kalash pour les 12 - 15 ? ... on influe drastiquement les taux de mortalité mais aussi alphabétisation, ...

évidement après on peut approximer : on est en tranche d'age pour les populations et pas par année et dans ce cas y a passage à la tranche supérieure comme aléatoire possible exemple : entre 22% et 28% des 12-15 ans passent en 15 - 20

mais bon je n'ai jamais fait une étude statistique sur ce modèle pour savoir si l'aléatoire aurait les mêmes conséquences que pour ton modèle. Pour moi le problème n'est pas l'introduction de l'aléatoire, il est lié au modèle et à la place du modèle dans l'aléatoire.


maintenant pour d'autres sujets, dans la vraie vie des soldats occidentaux avec tout leur équipement meurent malgré tout face à des types super mal équipés (suffit de voir le Mali et l'armée française) ça fait moins de perte que si les deux adversaires étaient équilibrés mais ça en fait, donc ca ne me choque pas qu'un joueur ancien puisse parfois (rarement) se faire écrabouiller par un joueur nouveau