trall3
Chez ludoviskm
Belcher - Data Analysis
le 03/01/2014 19:42
Mais qu'est ce que c'est que ce titre anglophone ?!

Très simple... Il y a quelque temps je me suis décidé à faire un simulateur qui "joue" tout seul un deck de type Belcher (avec et sans Burning Wish) afin de voir comment le deck se comporte en faisait évoluer tel ou tel slot.

Suite à cela, j'ai fais un "petit" rapport pour synthétiser tous les acquis sur le deck.

En deux mots comment ça marche :

#1 : On fixe une liste de Belcher (format cockatrice)
#2 : Mon programme (Java) l'importe et le joue suivant un algo que j'ai développé (et qui est un poil sous optimal, mais très proche de ce qu'un humain ferait, au moins tour 1) généralement 1 000 000 de fois
#3 : Mon programme me sort une liste de données en .csv
#4 : Je fais de l'analyse de données sur le fichier précédemment généré avec R puis j'en tire les conclusions qui sont dans le rapport :)

Malgrès mes connaissances en IT / Maths, je sais très bien que les résultats que j'ai eu ne prennent pas en compte tous les cas possible (mettre une Manamorphose sous mox / jouer une carte à la con style Diminishing Returns) mais bon, j'ai un taff à temps plein et ce rapport m'a pris pas loin de 40h de taff...

Voici le lien pour le télécharger : Click me

Désolé par avance pour les non anglophiles, mais vu qu'à la base je le destinais à des forums internationaux je me suis dit que l'anglais eût été plus approprié :D

Merci d'avance à vous pour vos retours / remarques / tout ça

Merci également à ceux qui m'ont filé des coups de main : mes anciens collèges / amis / joueurs pro

Bonne lecture !
haut de page - Les forums de MV >> Legacy >> Discussion : page 1
molodiets
Kneel before Zod!
le 03/01/2014 19:53
remarquable travail. Felicitation. Un programe de simulation de partie pour magic. On doit pouvoir en faire une publication en theorie des jeux

Y a plus qu'a l'envoyer aux tournois
Neokeld
le 04/01/2014 0:10
@Molodiets : Pour le défendre, il ne parle que de générer un nombre de mains important automatiquement et de déterminer si on peut partir en combo au tour 1 ou quand on doit mulliganer selon des heuristiques ce qui revient à faire du goldfish du tour 1.
Il appelle ça jouer le deck. J'appelle ça goldfish le tour 1 (ce qui est pas si mal).
A partir de ça il sort des stats avec R qui ont pas l'air trop degueu d'après ce que j'ai cru lire à première vue.
Par ailleurs, il a l'air de ne s'intéresser qu'à Belcher qui se joue presque en autopilot et qui est du coup sans doute le meilleur candidat pour ça.

Par contre,
@trall3 : Je suis pas sûr que ta démarche soit vraiment la meilleure. Si tu as des notions de recherche opérationnelle et/ou de flots et combinatoire et que tu as du temps à perdre, tu peux tenter de voir ce qu'il se passe au tour 2. Pour pouvoir traiter plus de possibilités, j'irais chercher du côté des algos gen.
Et n'utilise pas le mot jouer pour ton hack, tu vas te faire troller par tous ceux qui savent un minimum coder. Tu le vois dans le post précédent ^^ Tu peux pas parler de jouer ou de simuler. Tu fais des stats sur le tour 1.
Ah et aussi tes stats sont entièrement conditionnées par tes heuristiques. Comme tu ne les donnes pas tes stats n'ont aucune valeur et on ne peut pas en tirer de conclusions.
trall3
Chez ludoviskm
le 04/01/2014 11:39
Alors ouaip effectivement c'est bien du goldfish tour 1 plutôt que du 'jeu'. Enfin c'est écrit dans le rapport pour plus de détails.

J'ai bien des 'connaissance en RO'. Maintenant faut avouer que rajouter des tours (2 et 3) ca complexifie un max le deck alors que dans la réalité le tour 1 est le plus crucial. Ou alors on peut modéliser un tour 2 dans la plupart des cas par un tour 1 avec 8 cartes (sauf dans le cas ou on a mis belcher t1 et qu'on a pas gagne... Ie dans ~10% des cas)

Pour ce qui est de mes 'heuristiques'... Bah c'est mon implémentation de belcher basé sur mon expérience et celles des autres joueurs. Le but c'est de jouer ta main de manière optimale puis de voir ce que tu fais de ton mana en fonction des kills dispos. Crois moi vu le temps que ça m'a pris j'espère bien avoir un résultat presque optimal. Les seuls cas border line non traités sont : quand est ce qu'on met une manamorphose sous un mox et que passa quand on joue un diminishing return... Les 2 cas sont quand mêmes loin d'être la majorité, qui elle, est traitée par mon algo =]

Et oui... Belcher c'est un deck presque auto pilot en goldfish a la 1. J'ai pas non plus la prétention de prendre en compte les match up (daze fow saisie...) c'est pas une thèse en IA hein mais je pense sincèrement que les résultats sont plus qu'exploitable et que s'ils reste des étudiants en maths / info cela peut donner de bons sujets pour leurs études :)

Ps : a ma connaissance c'est bien la première fois que quelque chose d'aussi 'poussé' a été développé non ?!
Neokeld
le 04/01/2014 12:00
Oé c'est sûr que c'est sympa ^^

Pour répondre à ta question :
http://www.mtgthesource.com/forums/showthread.php?25698-Primer-Deck-Be...

Un mec l'a fait en c# et fourni le code source (que j'ai pas lu).
trall3
Chez ludoviskm
le 04/01/2014 12:45
Je suis sur thesource (depuis peu d'ailleurs je l'ai poste la bas).

J'ai lu son code. C'est plus propre, moins complet et il n'y a pas la partie analyse :)

Je veux dire c'est la première fois qu'un truc de ce genre est fait de bout en bout (j'ai déjà lu des articles qui sont listes a la fin de mon rapport dans les 'cool links' mais pareil... C'est pas forcément 'abouti' même si les conclusions sont rarement mauvaises ^^)
ZeSword
Bruxelles, Belgique

AVATAR
le 06/01/2014 21:38
C'est un boulot de ouf, vraiment un grand bravo. Après évidemment je suis déçu de ne pas avoir ne serait-ce qu'un bout d'explication de ton algo, mais je comprends que tu n'aies pas que ça à faire.

Je ne pense pas qu'il se fasse troller par des gens qui savent coder, parce qu'effectivement s'il a implanté sa manière de jouer le deck en java, alors oui c'est "jouer le deck". Dire qu'on ne peut rien dire des stats parce qu'on n'a pas l'algo, par contre c'est très exagéré. C'est comme si tu disais à un bon joueur de magic "bon ok, tu crois que t'as un matchup 60/40 contre Doran, mais en fait, t'en sais rien, ça se trouve tu joues pas comme il faut !".

D'ailleurs justement, en n'utilisant aucun mot compliqué de code, on voit que trall3 a vraiment voulu rendre son travail compréhensible par tout le monde (enfin tout le monde jouant à magic un minimum et ayant une demi notion d'anglais). Il a donc sûrement du simuler des parties, à moins qu'il ne bluffe sur toute la ligne et qu'il n'ait rien codé, juste fourni des stats bidon :p

Juste dans le tableau récapitulatif en pourcentages sur les différentes mains, je trouve ça un peu succinct et difficile à comprendre les intitulés, si tu pouvais les expliquer :

% of hand we have to mulligan (ok, obvious)
% of hand doing nothing (càd, les mains qui paraissaient jouables mais qui fizzle ? tu parle de fizzle plus bas, c'est quoi la différence entre fizzle et do nothing ?)
% of winning T1 w/ Belcher (c'est peut être clair pour bcp de gens que w/ = with mais je n'aurais pas mis d'abréviation dans des intitulés déjà pas forcément clairs)
% of fizzle T1 w/ Belcher (pourquoi avoir séparé les fizzle avec belcher en main ? ce sont donc des pourcentages qui sont inclus dans les mains ne faisant rien ?)
% of landing Belcher with a “win” next turn (càd avec possibilité de faire 3 mana tour prochain, obvious mais ça ne fait pas de mal de le rappeler ?)
% of landing belcher because… (alors là, je ne comprends pas)
% of recruiting pairs of gob's (et donc gagnant la partie j'imagine ? parce qu'on peut aussi recruter 6 gobelins et avoir l'air bien con)
Mean of gob's
Std of gob's (si je comprends ces deux là, c'est parce que j'ai fait un peu de maths, je pense que mettre "average" au lieu de "mean" serait plus clair pour les gens normaux, et idem pour "std", je pense que "average variation" même si c'est moins précis, serait plus clair)
Mean of mana produced without LED (par produced, ça veut dire par ex. que sur manamorphose c'est 0, sur seething song c'est 2 etc ?)
Mean of mana produced with LED (j'imagine là que ce n'est pas seulement le mana produit par les LED, mais par les parties jouées qui contenaient des LED ?)
Mean of LED played (assez obvious, même remarque pour le "mean" bien sûr)

Regarder ce qu'il se passe au tour 2 n'a pas tellement de différence, car bien souvent effectivement comme dit plus haut, une main tour 2 c'est une main à 8 (allez, si l'autre a commencé c'est une main à 9 avec discard de la moins bonne). Pas besoin donc de partir sur les grands mots d'informatique. Par contre, je suis sérieusement intéressé (j'avais ce projet depuis un bout de temps, je n'avais jamais commencé parce que je pense que c'est un chantier titanesque que je ne puis mener à bien seul) si quelqu'un a la possibilité de m'aider à écrire des algos génériques d'intelligence artificielle (qui incluraient forcément des bouts d'algos spécifiques à tel ou tel paquet parce que telle ou telle situation de jeu n'est pas forcément équivalent selon le paquet que tu joues : tu t'en fous d'avoir un board adverse rempli de créatures si tu joues masse wrath, mais c'est un gros problème si tu joues aggro). Pour note, le simulateur est déjà codé (càd il connait les règles de mtg et a déjà environ 1 200 cartes codées) et il reste donc simplement à former les bases de l'IA : mettre des "notes" à telle ou telle situation de jeu pour savoir quel choix il faut faire. J'avais pour idée de simplifier en faisant comme si on avait l'information totale (main de l'adversaire, première carte de la bibliothèque) car très souvent, quand je joue une partie de magic, je sais ce que mon adversaire a en main quand je connais son paquet et que je le vois partir sur tel plan de jeu : ça me parait très difficile de coder ça, mais par contre c'est très facile de donner l'information totale à l'IA :p
trall3
Chez ludoviskm
le 06/01/2014 23:51
Pour expliquer un peu avant d'aller me pieuter :

Citation :
% of hand we have to mulligan (ok, obvious)

Ce sont les mains sans business spell comme écrit dans l'article

Citation :
% of hand doing nothing (càd, les mains qui paraissaient jouables mais qui fizzle ? tu parle de fizzle plus bas, c'est quoi la différence entre fizzle et do nothing ?)

Ce sont des mains qui contiennent des BP, mais qui n'aboutissent à rien (hormis du mana)... Pas de gob ni de Belcher

Citation :
% of winning T1 w/ Belcher (c'est peut être clair pour bcp de gens que w/ = with mais je n'aurais pas mis d'abréviation dans des intitulés déjà pas forcément clairs)

Mains qui gagnent sur Belcher T1 (20+ dégats)
C'est vrai pour le w/ j'ai pas vraiment fait gaf... L'habitude d'écrire comme ça mais c'est pertinent :)

Citation :
% of fizzle T1 w/ Belcher (pourquoi avoir séparé les fizzle avec belcher en main ? ce sont donc des pourcentages qui sont inclus dans les mains ne faisant rien ?)

Ce sont les mains qui mettent Belcher en jeu et qui l'activent MAIS qui collent <20dmg ! On a dont fizzle avec Belcher (mais je distingue du reste car on a quand même accompli qqch de pas trop mal :) )

Citation :
% of landing Belcher with a “win” next turn (càd avec possibilité de faire 3 mana tour prochain, obvious mais ça ne fait pas de mal de le rappeler ?)

Exact, pas super auccurate comme statistique, d'ailleurs, mais ça donne une indication

Citation :
% of landing belcher because… (alors là, je ne comprends pas)

Clairement pas clair !!! C'est le % de mains où l'on pose Belcher et qu'on passe le tour. Sans l'avoir activé. On n'a pas fizzle mais on a "juste" résolu Belcher, avec une proba faible (sauf draw LED) de l'activer immédiatement le tour d'après...

Citation :
% of recruiting pairs of gob's (et donc gagnant la partie j'imagine ? parce qu'on peut aussi recruter 6 gobelins et avoir l'air bien con)

Non ici ce sont toutes les mains qui lâchent des gob's. Il y en a qui en mettent 2 mais extrêmement rare. On pourrait fixer un seuil > 8 gob's, mais la statistique suivante précise quand même plutôt bien la répartition (gaussienne mais excentrée [skewness positif pour les matheux si je ne m'abuse])

Citation :
Mean of gob's
Std of gob's (si je comprends ces deux là, c'est parce que j'ai fait un peu de maths, je pense que mettre "average" au lieu de "mean" serait plus clair pour les gens normaux, et idem pour "std", je pense que "average variation" même si c'est moins précis, serait plus clair)

Je conçois ta remarque, mais ça s'appelle comme ça :{

Citation :
Mean of mana produced without LED (par produced, ça veut dire par ex. que sur manamorphose c'est 0, sur seething song c'est 2 etc ?)

C'est le nombre de mana que tu as produits SANS LED quand tu as fini de jouer ta main. C'est exactement l'exemple que tu décris ;)

Citation :
Mean of mana produced with LED (j'imagine là que ce n'est pas seulement le mana produit par les LED, mais par les parties jouées qui contenaient des LED ?)

On y inclut tout le mana produit. Celui des sources précédentes + des LED

Citation :
Mean of LED played (assez obvious, même remarque pour le "mean" bien sûr)

Exacto

=]

Bon plus en détail sur l'algo (pas parfait, mais pas ridicule je pense) :

On draw X cartes (généralement X=7)

1°) Si > 4 BP ou 0 alors on MULL direct
2°) On boucle sur la main
3°) Si on a TAIGA on la joue de suite
4°) Si on l'a pas joué on LG
5°) On joue les probe
6°) On joue les SW (wishless only)
7°) On lâche les pétales
8°) On lâche les LED
9°) On joue TW si on a le mana G
10°) On joue les ROF (en prenant compte de notre cimetière :) )
11°) On joue les RIT @ 2CCM
12°) On joue les RIT @ 3CCM
13°) On joue les Manamorphoses
14°) On joue les guides
15°) Une petite règle : si on a peu de cartes en main (<3) on joue les LG dans le vent pour le storm
16°) On gère les MOX (si on a 2 ETW on en met un dessous...) Je passe la dessus c'est assez compliqué. Par contre une remarque : dans notre cas, mettre un ESG sous un mox ou dans l'exil direct, ça ne change pas grand chose (même mana même storm car on joue le mox même si on met rien dessous). Donc c'est normal qu'ils soient jouées avant. Mais c'est un axe d'amélioration
17°) Go to 2°) jusqu'à que l'on ai plus de cartes à jouer hormis les kills (car oui par exemple si on a pioché une Taiga sur probe notre algo ne l'a pas mis en jeu. Alors on boucle)
18°) J'call une méthode qui me retourne un résultat (belcher, nb de gob...) en fonction de mes kills dispos et du mana qui trainent (et du storm count évidemment)
Dis comme ça c'est "facile", dans la réalité prendre en compte les mains avec 4 mana & ETW, 2 et 2 LED & BW, 3 dont un noir & LED & BW... Enfin il y a BEAUCOUP d'états possibles et j'espère bien ne pas en avoir oublié :D (ou alors peut être BW + 2 mana + 4 LED mais qui revient au même qu'avec 3 : IT Belcher WIN)

Bref...

A noter qu'à chaque étape, notre "automate" est dans un état défini (X mana RED, X green, X generic, X LED played, Taiga played ?!, storm count, cartes en main, cartes exilées,...) Ce qui a aussi pu me permettre de vérifier sur quelques échantillons que mon algo jouait "comme moi" le jeu :)

J'espère mon cher ZSword que tu vas pouvoir faire un gros dodo ce soir :D

Ps : pour l'IA je veux bien donner un coup de main mais moi mon dada c'était plus les maths / stats (et BI mais ça on s'en tappe ici) que l'info "pure & dure" :{
ZeSword
Bruxelles, Belgique

AVATAR
le 10/01/2014 11:46
Ok c'est plus clair. Pour les fizzle Belcher, ce sont donc les mains qui mettent Belcher, qui ont le mana pour l'activer, qui ne collent pas 20 dms, et qui n'ont pas non plus 3 manas le tour d'après ?

Pour être sûr de comprendre qu'il n'y a pas certains cas qui sont traités dans 2 lignes différentes :)

Enfin au vu de ce que tu dis à la fin, ça parait en fait, même si très long, peut être à peine plus long de décrire pour de vrai le graphe des actions possibles (graphe probabiliste puisqu'on ne peut pas deviner ce qu'on va piocher quand un sort nous fait piocher) ; et là c'est sûr qu'il suffit de regarder en partant de la main qu'on a au départ, si on arrive dans un état gagnant et avec quelle probabilité :o)

Ca permet de ne pas "hardcoder" de méthode de jeu, et même éventuellement d'apprendre des plays intéressants auxquels on n'aurait pas pensé en notant à chaque fois l'enchainement des plays qui mènent à la victoire.
trall3
Chez ludoviskm
le 10/01/2014 13:30
Citation :
Ok c'est plus clair. Pour les fizzle Belcher, ce sont donc les mains qui mettent Belcher, qui ont le mana pour l'activer, qui ne collent pas 20 dms, et qui n'ont pas non plus 3 manas le tour d'après ?


Je m'arrête juste à l'étape d'activation. Dans la vrai vie, c'est quand même SACREMENT RARE (mais j'avoue ne pas la prendre en compte), le fait d'activer belcher T1 ET T2 :P (faut piocher LED dans 99% des cas)

Mais tous les cas traités sont bien disjoints !

Effectivement le cas probabiliste est possible, mais encore une fois, le fait de jouer la main que l'on as (après avoir pioché) donne bien des probas. Mais il ne faut pas oublier que lorsque l'on prend la décision de keep, on la fait sans savoir ce que l'on va piocher (et la on peu calcule de tête la proba de draw un RIT @ 2CCM par exemple si on connait bien sa liste ;) )
haut de page - Les forums de MV >> Legacy >> Discussion : page 1
Vous devez être identifié pour pouvoir poster sur les forums.