Utilisateur
Nombre de message : 58
Créé :
Dernière visite :
Posté
pikiou a écrit : Ce quelqu'un c'est moi, voici le script : https://codepen.io/pikiou/pen/VMrYxY?editors=0010 Je n'ai pas bien compris comment tu génères les tirages de manière à ce qu'ils soient représentatifs. (ce que fait la fonction cardPickSimulation) Car si j'ai bien compris tu fais un grand nombre de tirage de longueur n auquel tu donnes un poids proportionnel à leur probabilité ? (dans cette partie là où au début tu fais le tirage et après tu calcules le poids associé) const results: string[][] = _.map(Array(maxSuccess), () => _.map(Array(maxCardPicks), ""));
_.range(1, maxCardPicks + 1).forEach(drawnCardsCount => {
 const successGoals = cardPickSimulation(allCards, drawnCardsCount);
 successGoals.forEach((g, pos) => results[pos][drawnCardsCount - 1] = g + '%');
}); Posté - Edité
En force brute c'est vite la misère déjà, tu peux gagner en regardant les combinaisons au lieu des arrangement, ça permet de gagner un facteur n! lié au nombre de permutations.
Je suis passé à une exploration systématique mais en utilisant la distribution des cartes et donc les résultats possibles plutôt que les tirages de carte. Je pondère le tout par la probabilité de tirer les cartes. Ainsi, pour le premier tirage, au lieu de faire 45 possibilités, je n'en regarde que 9 avec chacune un poids donné. Pour 6 cartes,
Entre l'option 1 et 4, il y a un facteur 15 000 sur le nombre de possibilités à tester ! Entre l'option 2 et 4, il y a un facteur 21 sur le nombre de possibilités à tester Entre l'option 3 et 4, il y a un facteur 1,4 sur le nombre de possibilités à tester Après, même si mon algorithme n'est pas ultra optimisé pour minimiser le stockage de donné, le gain en temps reste très important (je suis passé de 4 minutes pour uniquement le tirage à 6 cartes à 4 secondes pour les tirages de 1 à 6 cartes. EDIT : sur BGG quelqu'un a mis un script alternatif pour le calcul: https://boardgamegeek.com/article/reply/27080723 Posté - Edité
C'est cette partie là qui se retrouve là alors que ce n'est clairement pas du HTML5 valide:
" cla<="" div=""> <img src="/images/emoticons/t7c/icon_success-left.png" alt=":icon_success-left:" cla<="" div=""> Posté - Edité
Du coup, pour corriger, j'ai dû pas mal complexifier l'algorithme :
- Je prend mon tableau qui contient les cartes piochées, - puis, je prend carte par carte que je décompose en éléments simples (étoiles complètes, demi-étoile ou ) - Ensuite je compte pour le nombre de demi-étoiles sur la carte et je retranche 1 succès s'il y a deux demi-étoiles simultanément - j'ajoute mes décompte en comptant les demi-étoiles séparément - j'ajoute autant de succès que de paires de demi-étoiles - ensuite si j'ai une carte avec deux demi-étoiles et encore une demi-étoile qui reste à la fin, alors j'ajoute un succès - si j'ai plus d'une carte avec deux demi-étoiles, j'ajoute le nombre de carte bi-étoile -1. Mais le nombre de combinaisons possibles est en 9^n moins quelques pouillèmes au mieux (je crois) donc c'est rapidement super chaud de tout lister. Pour le nombre de combinaisons possibles en fonction du nombre de cartes (en retranchant ceux impossibles) ke pire cas théorique étant 9^n on gagne rapidement (seulement 381 023 combinaisons possibles au lieu du maximum théorique de 9^6=531 441) 1 9
2 79 
3 678
4 5700 
5 47016 
6 381023 Posté - Edité
J'ai corrigé mon algorithme et je retombe sur tes chiffres, foutues doubles demi-étoiles...
J'ai regardé ton algorithme, tu fais la même chose que mon second algorithme mais à la main, ce qui du coup est franchement chaud à partir de 3 cartes. Normalement, c'est bon même pour plus de deux cartes demi étoile de mon côté. Je vais juste voir si sur 3 cartes c'est bon aussi. EDIT : Ça a l'air d'être le cas. Pour toutes les combinaisons à trois cartes avec des cartes à double demi-étoiles : Le premier "array" est le tirage de trois carte. Ce qui compte est le premier chiffre après le deuxième "Array" qui correspond au nombre de succès, le quatrième chiffre est le nombre de .
Posté - Edité
Je ne vois pas comment savoir qui a raison ou non (je ne dis pas que j'ai plus raison que vous) Mais il faudrait que vous partagiez votre formule. Je suis en train de refaire un fichier pour mettre à disposition mon script afin de pouvoir regarder qui a raison ou non.
Apparemment, j'ai effectivement mal corrigé le coup des demi-étoiles. Je revérifie mon script. Posté
J'ai reprogrammé mon algorithme pour ne plus passer par le stockage des combinaisons : j'explore maintenant l'arbre de probabilité et je retrouve exactement les mêmes chiffres qu'auparavant... sauf que maintenant ça met beaucoup moins de temps et ça demande normalement beaucoup moins de mémoire.
Posté - Edité
C'est le coup des deux demi-étoiles qui ne font pas un succès peut-être ?
EDIT : Mon algorithme est un algorithme de "force brute" : je génère toutes les combinaisons possibles de cartes (tirages non ordonnés d'un n-uplet) et ensuite j'analyse le tirage eb traitant spécialement le cas particulier de deux demi étoiles sur la même carte. Il y a effectivement une possible petite erreure pour un deck avec plus de deux cartes ayant deux demi étoiles dans le deck vu que par exemple pour ces deux cartes seules, elles ne font qu'un succès et pas deux. EDIT 2 : je pense qu'il est possible de faire un algorithme plus performant en générant les combinaisons sur un sous ensemble de cartes (toutes celles avec une étoile, toutes celles avec une demi étoile, etc ) puis en pondérant par les probabilités d'avoir chacune des cartes. Ça doit réduire considérablement le temps de calcul (vu que ça fait beaucoup moins de possibilités de combinaison). Je verrais si j'ai le temps de programmer ça. Posté
Tu fais comment tes calculs ? Car sans le script ou les formules, difficile de voir d'où viennent les écarts.
Car justement, ce serait cool de voir comment ça se passe. Posté - Edité
Pour les / c'est au programme de ce soir pour voir les chances d'en avoir. Et là pour le coup, les cartes compétences avancées sont super importantes car elles on quasiment toutes un alors qu'il y en a assez peu dans le deck de base.
Posté
Kornetmuse a écrit : C'est évidemment la même chose. Ça permet de voir juste quelques comportements et .. de faire des trucs rigolos en programmation.EN ce qui me concerne il est clair qu'une fois en jeu j'oublie totalement ça. Mais en dehors ça m'amuse :) (et puis c'est une façon de jouer au jeu quand on peut pas ). Posté
Désolé, je ne créé pas de jeu. Mais oui, je cherche juste à "m'amuser" (chacun a ses petits plaisirs..) pour voir deux trois trucs.
Et donc entre ajouter une carte et une carte il y a moins de 0,2 % d'écart à priori. Ça permet de voir que ce n'est pas si critique que ça ! Posté
En fait c'est plus subtile pour la carte 1, on augmente la proba des petits résultats et on diminue celle des haut résultats.
Posté - Edité
J'hésite à leur demander leur mode de calcul, mais bon, ils ont d'autres chats à fouetter en ce moment.
Je suis en train de regarder le plus avantageux entre ajouter une carte compétence avancée avec deux demi étoiles (gauche et droite) et une étoile pleine, à priori, c'est l'étoile pleine qui gagne (entre 0 et 3,5 % de gain selon le résultat et le nombre de cartes). Par contre, dans les deux cas, on a des stats moins bonnes que le deck de base vu qu'on diminue la moyenne. Posté - Edité
Kornetmuse a écrit : Il y a un problème c'est impossible d'avoir 100% avec 6 cartes pour un seul succès. Les chiffres "actualisés" avec plus de décimales (pour 1 joueur): il y a 2639 combinaisons qui ne donnent aucun succès, mais sur plus de 8 millions, c'est peanuts. Posté
Il y a des arrondis sur vraiment beaucoup de combinaisons, d'où les 100%. Je relance avec plus de chiffres pour voir la différence.
Posté - Edité
Et voilà le tableau en fonction du nombre de joueurs :
Pour 4 joueurs et 6 cartes, j'arrive à saturation de la mémoire (mon algorithme m'oblige à stocker les combinaisons dans un tableau ce qui est bien gourmand en mémoire) Les blocs en bas montrent l'écart par rapport aux résultats à 1 joueur. et tout à gauche la valeur moyenne des résultats. Posté
Je vais corriger et voir ce que ça donne. Mais c'est bien pour ça que je partage le script et les idées car on a vite fait de faire des grosses bêtises sans s'en rendre compte (ie la lecture du tableau et le coup des deux demi étoiles).
Je reprend ça dans la soirée. Posté
J'ai pas encore corrigé le coup des demi-étoiles, mais les écarts s'aggravent fortement pour les grands nombres de carte.
Au-delà de 6 cartes, le temps de calcul avec mon script devient vraiment très long. Je vais voir si leur tableau correspond à un tirage avec remise ou non. |