Programme de poker PYTHON
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 49

Programme de poker PYTHON



  1. #1
    invite549dca25

    Programme de poker PYTHON


    ------

    Bonjour,
    étant en prépa maths, j'ai un projet à mener liant deux matières différentes. J'ai choisi de coder un programme conseillant un joueur amateur qui joue au Poker. Cependant, je rencontre un problème pour coder une main : la quinte ( suite de 5 chiffres consécutifs)
    En effet, la ligne de code que j'envisageait serait monstrueusement longue, rien que pour une suite "2-3-4-5-6" il faudrait que je rentre 2-3-4-5-6 mais aussi toutes les combinaisons dans le désordre, par exemple 2-5-4-3-6; 3-2-6-5-4 etc. Imaginez la longueur du programme si je dois le faire pour toutes les suites possibles...
    A savoir que le valet serait codé 11, la reine 12 et le roi 13. Ainsi, auriez-vous des conseils ou des astuces pour programmer de manière plus courte et efficace s'il vous plait?
    Merci d'avance !

    -----

  2. #2
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Salut,

    Un point crucial pour la résolution de ce genre de problèmes tiend dans la façon de stocker le jeu. Comment le stockes-tu ?

  3. #3
    invite549dca25

    Re : Programme de poker PYTHON

    Je ne suis pas sur de comprendre votre question mais je vais essayer de vous répondre. Il ne s'agit pas d'une liste mais une série de "if" pour chacune des mains.Exemple : if a==b
    rep"vous avez une paire"
    sachant que l'on étend cela à toutes les piossibiltés. En effet, il y a 5 cartes (2 en main et 3 sur le tapis ) donc 5 variables : a;b;c;d;e

  4. #4
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Ma question est la suivante: comment codes-tu le jeu ?

    Est-ce que tu définies une variable pour chaque carte ? Par exemple, j'ai le 4 de treffle et le 8 de pique en main, sur la table il y a le roi de coeur, le valet de carreau et l'as de treffle, comment représentes-tu ce jeu ?

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Programme de poker PYTHON

    En plus des remarques d'Evil.Saien, tu as pensé à ce qui se passe si tu détectes une quinte dans une main triée ?
    C'est la même logique que celle qui fait que tu ne vas coder non plus à la main toutes les paires, les carrés, les couleurs...

  7. #6
    invite549dca25

    Re : Programme de poker PYTHON

    Pour le moment nous ne prenons en compte que les numéros de cartes.
    Ainsi , a ==4
    b== 8
    c==13
    d==11
    e==1

  8. #7
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Ok ! Avant de passer à la suite du problème (reconnaître une quinte), je te suggère de mettre au point une méthode de stockage du jeu qui te permette également de connaître la couleur des cartes... Sinon ça deviendra un vrai casse-tête par la suite, il vaut mieux anticiper.

  9. #8
    pm42

    Re : Programme de poker PYTHON

    Citation Envoyé par Antoinepoker Voir le message
    Pour le moment nous ne prenons en compte que les numéros de cartes.
    Ainsi , a ==4
    b== 8
    c==13
    d==11
    e==1
    Elles ne sont pas dans un tableau ?

  10. #9
    invite6486d7bd

    Re : Programme de poker PYTHON

    La solution la plus évidente consiste par commencer à trier les cartes pour les mettre dans l'ordre (ça simplifiera l'algorithme pour tous les traitements ultérieurs).

  11. #10
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Citation Envoyé par LeMulet Voir le message
    ça simplifiera l'algorithme pour tous les traitements ultérieurs
    Sûr ? Comment tu trierais une main composée d'un roi, valet, 8, as, 4 ?

    A mon avis, il ne faut surtout pas se contenter d'un tri mais de réfléchir un cran plus loin.

  12. #11
    pm42

    Re : Programme de poker PYTHON

    Citation Envoyé par Evil.Saien Voir le message
    Sûr ? Comment tu trierais une main composée d'un roi, valet, 8, as, 4 ?
    A mon avis, il ne faut surtout pas se contenter d'un tri mais de réfléchir un cran plus loin.
    Je n'ai pas plus réfléchi que ça au sujet mais il faut modéliser les cartes (couleur + groupe de couleur + valeur) et ensuite faire soit plusieurs tris soit utiliser intelligemment une fonction comme groupby (ce qui revient un peu au même).
    Mais effectivement, il n'existe pas 1 seul ordre efficace pour détecter toutes les combinaisons intéressantes.

  13. #12
    invite0bbe92c0

    Re : Programme de poker PYTHON

    Citation Envoyé par LeMulet Voir le message
    La solution la plus évidente consiste par commencer à trier les cartes pour les mettre dans l'ordre (ça simplifiera l'algorithme pour tous les traitements ultérieurs).
    je ne vois pas trop le bénéfice du tri ici, mais peut être est ce parce que je connais mal les règles du poker.

  14. #13
    invite0bbe92c0

    Re : Programme de poker PYTHON

    Citation Envoyé par pm42 Voir le message
    J mais il faut modéliser les cartes (couleur + groupe de couleur + valeur) .
    C'est quoi le "groupe de couleur" ?

  15. #14
    pm42

    Re : Programme de poker PYTHON

    Citation Envoyé par Bluedeep Voir le message
    C'est quoi le "groupe de couleur" ?
    My bad, ça ne sert à rien au poker en effet.

  16. #15
    invite6486d7bd

    Re : Programme de poker PYTHON

    Citation Envoyé par pm42 Voir le message
    My bad, ça ne sert à rien au poker en effet.
    Le groupe non effectivement, mais la couleur oui, bref...
    Citation Envoyé par ClubPoker
    Quinte flush royale

    Quinte flush à l'as.

    Combinaison formée de cinq cartes consécutives de la même couleur, dont la plus haute est un as.
    http://www.clubpoker.net/quinte-flus...definition-335

  17. #16
    invite549dca25

    Re : Programme de poker PYTHON

    Après de longues heures de réflexion je ne sais pas comment commencer mon programme, je veux dire par la comment coder la couleur par exemple utiliser une liste ou un tableau ?
    que feriez-vous à ma place ?
    En tout cas merci beaucoup pour votre aide, je la partage avec mon groupe de travail !

  18. #17
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Citation Envoyé par Antoinepoker Voir le message
    que feriez-vous à ma place ?
    Je sais exactement ce que je ferais à ta place mais le plus intéressant c'est pas la solution, c'est le chemin qui y mène. D'ailleurs, il y a sans aucun doute plusieurs solutions possibles et peut-être en présenteras-tu une à laquelle je n'avais pas pensé et j'aurais aussi appris quelque chose.

    Donc question habituelle: où bloques-tu exactement ? Qu'as-tu essayé ?

  19. #18
    azad

    Re : Programme de poker PYTHON

    Salut
    J’avais réalisé un poker vidéo jadis. Et pour corser la difficulté, j’avais introduit une 53 ème carte : le Joker (celui qui peut prendre une valeur quelconque)
    A chaque tirage de carte, ( une parmi 53) on vérifiait que la carte tirée n’était pas déjà en jeu .. et en finale, on avait 5 cartes affichées différentes. De même les cartes tirées en première donne ne devaient pas être distribuées en seconde donne. Ce que tu as déjà fais sans doute.
    Les images des cartes étaient codées 2T,3T,…,13T, 2C,3C,4C, … 13C, … ensuite venaient les coeurs 2K, 3K….. et les piques, 12P,13P.
    Le Joker était codé FF. (Mes valeurs étaient codées en hexadécimal)
    Comme il n’est pas vraisemblable de voir les cartes affichées par ordre de grandeur croissantes, je les affichaient dans l’ordre de leur tirage, mais la donne complète était triée en mémoire.
    Et c’est sur ce tableau de cartes triées que je déduisais les combinaisons gagnantes.
    Pour une quinte, les cartes étant triées, je me contentais d’ajouter 1 à la valeur de la première carte du tableau trié, si cela donnait la valeur de la deuxième carte, j’ajoutais 1 à cette valeur et vérifiais que c’était la valeur de la troisième… et ainsi jusqu’à la cinquième carte dont la valeur était bien sûr celle de la quatrième augmentée de une unité.
    Si en outre les 5 cartes avaient la même couleur (T,C,K ou P) alors c’était une Quinte Flush.
    On commençait par vérifier la présence d'un jeu gagnant en commençant par sa plus grande valeur possible.
    L'ordre était : les 5 cartes sont-elles de la même couleur ? Si oui, on a "une couleur" sont elles en ordre croissant avec une différence de 1 entre la Nième et la nième +1 ? Si oui, "quinte flush" (majeure si la première est un 10)
    L’avantage du tri était que par exemple deux paires AA et BB ne pouvaient s’afficher que de trois façons : AABBx, AAxBB ou xAABB
    De même un brelan AAAxy, xAAAy ou xyAAA
    Un Full était obligatoirement sous la forme XXXYY ou YYYXX
    Le reste à l’avenant.
    Pour gérer le Joker trouble fête c’était à peine plus compliqué puisque dans le tri je le faisais toujours apparaître en dernier. Il suffisait d’ajouter une condition vérifiant sa présence.
    Et enfin j’avais même ajouté l’option «*aide au joueur*» qui indiquait les cartes à conserver pour obtenir une chance d’amélioration du jeu de la première donne.
    Je te conseille donc de créer un nouvel objet «*carte*» doté des propriétés «*valeur*» et «*couleur*»
    Je peux si tu le souhaite d’envoyer en MP (sur le forum ce serait inintéressant pour beaucoup) les listing de recherche pour chaque combinaison de jeu.
    Quand ton programme sera opérationnel, tu t’apercevras alors qu’il est inexploitable en l’état : en effet soit tu te réfères à un programme déjà existant c’est à dire que tu affecte un gain déterminé à priori (et très prometteur pour le joueur) à chaque combinaison gagnante et alors ton programme sera déficitaire. En effet dans les programmes de Casino, les tirages sont tout, sauf aléatoires et les gains annoncés pour une combinaison gagnante sont exagérés. (il faut tricher) Soit tu fixes ce gain en fonction des probabilités de sorties, et alors aucun joueur intelligent ne deviendra accro à ton jeu.
    Bien entendu, les algo de triche sont très confidentiels.

  20. #19
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Ca revient plus ou moins à ce que l'auteur du post voulait faire initialement, et à mon avis c'est pas le plus efficace.
    Bon ok, ça peut finir par marcher mais ça ne marchera que pour une seule variante de poker. C'est super dommage puisque finalement quelque soit la variante de poker c'est toujours la même chose: des cartes en main, des cartes sur la table, N cartes au total, déterminer la meilleure combinaison de 5 cartes. Et là, vu la manière dont est codé le jeu, difficile de varier le N.

  21. #20
    azad

    Re : Programme de poker PYTHON

    C’est pourtant assez efficace : Je viens de ressortir mon listing.
    Sans tenir compte de la présence d’un Joker, on a :
    Une seule ligne de code pour trouver une quinte quelconque et deux si l’on pense à la quinte As,2,3,4,5
    Trois lignes pour les brelans.
    Deux pour les Full.
    Deux pour les carrés.
    Quatre (le plus long) pour les paires.
    Et en outre, cherchant les meilleures donnes, si on trouve une couleur par exemple et qu’elle n’est pas associée à une quinte, alors inutile de chercher d’autres combinaisons : c’est le meilleur jeu, en effet si couleur il y a alors inutile de chercher un très hypothétique Carré, et des non moins probable Full, Paires ou autre.
    Si on trouve trois cartes identiques et deux autres de valeur identique aussi, on a un Full et pas la peine de continuer l’analyse pour des jeux inférieurs.
    Mais ta remarque concernant les différentes variantes du jeu n’ est que partiellement vraie.
    Au Holdhem, on a 7 cartes visibles, au Ohama : 9
    Il s’ensuit que les systèmes de recherche ne peuvent pas être identiques.
    Il faut d'abord chercher, et ne garder, que les 5 cartes les plus prometteuses.
    Ce n’est qu'ensuite que la recherche d’une séquence reconnue peut commencer.
    Et, pour la petite histoire, quand j’ai voulu donner un coup de pouce au hasard en influençant les distributions, j’arrivais, pour connaître les statistiques de sorties, à obtenir plus de 5 000 donnes complètes par heure. En éliminant les effets graphiques les manifestations sonores et les différentes temporisations, nombreux dans mon modèle. Soit en 24 heures, l’équivalent de plus d’un mois d’exploitation réelle.

  22. #21
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Citation Envoyé par azad Voir le message
    Mais ta remarque concernant les différentes variantes du jeu n’ est que partiellement vraie.
    Au Holdhem, on a 7 cartes visibles, au Ohama : 9
    Il s’ensuit que les systèmes de recherche ne peuvent pas être identiques.
    Pas du tout... On peut imaginer un système de recherche indépendant du nombre de cartes sur table, en main et même dans le jeu (au cas où certains voudraient jouer au poker avec un jeu de 32...). D'ailleurs je pense que ça peut être beaucoup plus rapide que 5000 donnes à l'heure ne serait-ce qu'en évitant d'utiliser sort par exemple...

  23. #22
    invite6c250b59

    Re : Programme de poker PYTHON

    Citation Envoyé par Antoinepoker Voir le message
    que feriez-vous à ma place ?
    Il y a un aphorisme qui dit qu'on ne comprend rien à un programme si on examine le code sans comprendre la structure des données, alors que si on comprend la structure des données examiner le code n'est pas nécessaire. C'est un peu ce qu'Evil a tenté de vous dire, je crois.

    Pour rendre ça concret: si vous codez un paquet de cartes comme une suite de lettre, trouver une suite consécutive peut être très difficile comme vous l'avez remarqué. Maintenant supposez que vous codiez un paquet de carte contenant 5 cartes possibles comme une suite de 5 cases mémoires avec un entier indiquant le nombre de carte pour chaque type. Il s'en suit que:
    00010 pourrait être un paquet contenant 1 carte (disons le 5)
    05010 pourrait être un paquet contenant 6 cartes (disons cinq 2 et un 5)

    ...il devient immédiat que, pour connaitre le nombre de carte d'un paquet, il suffit d'additionner tous les chiffres, et que pour savoir s'il y a une suite de n cartes consécutives, il suffit de trouver les cases ne contenant pas 0. Ainsi vous voyez que le choix de la structure des données vous permet, s'il est bien fait, de faire certaines opérations beaucoup plus rapidement qu'avec un codage naïf. Je vous laisse le brain storming pour coder les couleurs, dans le fond c'est ce brain storming qui est la partie la plus intéressante.

  24. #23
    azad

    Re : Programme de poker PYTHON

    Whouai…
    Reste que AntoinePoker souhaite réaliser une simulation du jeu sous sa forme la plus classique : celle dite du vidéo-poker.
    Et qu’il demande comment reconnaître les séquences sorties. Rien de plus.
    Jiav : bonjour,
    Je n’ai pas compris la forme de votre structure.
    00010 pourrait être un paquet contenant 1 carte (disons le 5)
    05010 pourrait être un paquet contenant 6 cartes (disons cinq 2 et un 5)
    Pourriez-vous préciser avec un exemple réel comment à partir d’un jeu de 52 cartes et d’une donnes de 5 cartes vous pouvez représenter cette donne ?
    Ma question est juste académique puisque je sais déjà utiliser une méthode plus naïve qui en 7 lignes de code me tire 5 cartes à partir d’un jeu de 53 et dont pour chaque Cn tirée je peux connaître Cn.Color et Cn.Value.
    Et Evil.Saien…. hello !
    Ca c’est bien vrai ! On peut imaginer un système. Et même une infinité en fait. Il est donc permis de croire que vous aussi, vous pourriez au moins nous en schématiser un.
    Et comme je l'écrivais plus haut, ma méthode trouve la quinte toute bête en une seule ligne de code (si l'on admet que la suite est triée et croissante de raison 1), je serais curieux d'apprendre comment faire mieux que cela. (Je reconnais que la condition suite croissante de raison arithmétique de raison 1 implique 4 comparaisons dans mon cas)
    Quand au tri, une vulgaire instruction du genre Sort(C(x).Value) suffit.
    Merci.
    Dernière modification par azad ; 16/03/2017 à 06h58.

  25. #24
    invite6c250b59

    Re : Programme de poker PYTHON

    Citation Envoyé par azad Voir le message
    Je n’ai pas compris la forme de votre structure.
    C'est parce que vous croyez que j'ai donné une solution toute faite et complète. Non, mon codage était un exemple-jouet qui vise simplement à expliquer l'impact que peut avoir la structure des données sur la simplicité/efficacité du programme.

    Citation Envoyé par azad Voir le message
    vous pourriez au moins nous en schématiser un
    Non, pas si le but est d'aider les étudiants à apprendre comment faire plutôt qu'à leur fournir une solution toute faite.

    Je suis également d'accord que le temps que vous indiquez suggère une efficacité assez basse, mais c'est peut-être juste un problème de logiciel. Vous aviez utilisé quoi?

  26. #25
    pm42

    Re : Programme de poker PYTHON

    Citation Envoyé par azad Voir le message
    Et comme je l'écrivais plus haut, ma méthode trouve la quinte toute bête en une seule ligne de code (si l'on admet que la suite est triée et croissante de raison 1), je serais curieux d'apprendre comment faire mieux que cela. (Je reconnais que la condition suite croissante de raison arithmétique de raison 1 implique 4 comparaisons dans mon cas)
    Le nombre de lignes de code n'est pas forcément la bonne métrique surtout quand vous parlez vous même de vitesse d'exécutions et de nombre de tirages par heure.

    Citation Envoyé par azad Voir le message
    Quand au tri, une vulgaire instruction du genre Sort(C(x).Value) suffit.
    Ce qui introduit une complexité en n log(n). En faisant 2 parcours linéaires du tirage et d'un regroupement, il doit être possible de rester en complexité n et sans doute d'aller plus vite.
    Je manque un peu de temps pour le coder ceci dit.

  27. #26
    azad

    Re : Programme de poker PYTHON

    Bonjour,
    je me suis mal exprimé, mes 5000 donnes à l’heure sont une limite que je me suis imposée moi-même. D’une part en affichant les deux donnes consécutives (il s’agit d’afficher 5 cartes au format png) suffisamment de temps pour que l’on puisse ne serait-ce que les voir et voir quelles cartes le programme conserve en vue d’amélioration possible à la deuxième donne. Et d’autre part, et pour mes statistiques, j’ouvre pendant l’exécution sur un second écran, une fenêtre (graphique elle aussi, sur laquelle je fais apparaître en temps réel les variables utiles au suivi de mon algorithme et voir toutes ces variables fluctuer implique de ralentir sérieusement la cadence.
    Pour ce qui est du langage utilisé, je l’avais évoqué il y a quelque temps sur ce Forum en proposition de solution pour quelqu’un qui souhaitait réaliser une application. Certaines personnes m’ont reproché de vanter les mérites d’un compilateur qu’ils qualifient d’ésotérique ou de marginal, quelque chose de ce genre en tout cas. J’ai pour principe de ne pas être plus royaliste que le roi, et si quelqu’un refuse d’examiner ce que je lui propose, alors je n’insiste pas. Toutefois par MP si vous le souhaitez, je vous communiquerais le nom de cet IDE et des liens permettant d’en télécharger une version gratuite (et légale sur le site de l'éditeur) et entièrement fonctionnelle (Mac, Linux, ou PC) avec comme seule restriction, l’impossibilité de pouvoir compiler une application autonome. Donc qui tourne (très vite) uniquement dans l’IDE. La version complète nous libérant de cette restriction, est payante, et même très chère. (plus de 900 €). A plus.

  28. #27
    inviteeecca5b6

    Re : Programme de poker PYTHON

    J'avoue que plus j'y pense, et plus j'ai envie de coder un soft d'aide au jeu. Ca pourrait être non seulement intéressant à coder, mais en plus potentiellement enrichissant En plus il se trouve que j'ai quelque expérience en deep learning et qu'on peut trouver des tas de listes de mains jouées en ligne avec les mises associées. Vous avez vu cette news :
    https://arxiv.org/abs/1701.01724

    Bref.

    Perso donc, mon idée serait d'être suffisamment souple non seulement pour déterminer la meilleure main mais pour aller plus loin: estimer les chances d'améliorer le jeu, optimiser les mises, connaître la probabilité d'avoir la meilleure main en temps réel, etc etc etc... Et ce, quelque soit la version du poker (d'ailleurs, je pourrais envisager d'entrainer le deep learner sur des parties de bridge). L'encodage du jeu serait finalement très simple : chaque main (et je considère les cartes sur table comme une main) serait un tableau nombre de couleurs x nombre de cartes (donc 4 x 13 ici). Que des zéros au début, et quand une carte est tirée on place un 1 dans la case correspondante. Et voilà, pour moi c'est un encodage optimal pour des tas de raisons: flexible aux différents jeux, super facile à manipuler (d'autant plus avec python et ses librairies vectorielles), très simple de calculer les possibilités d'amélioration d'un jeu, etc etc... Il faut aller beaucoup plus loin que simplement donner la main gagnante: il faut attribuer un score à chaque main, parce que les probabilités d'amélioration du score impactent directement la mise optimale.

    On se rend compte facilement que la méthode par tableau simplifie un grand nombre de tests (paires, brelan, full, carré ? Somme sur les colonnes. Couleur ? Somme sur les lignes. Suite ? Somme sur les colonnes, puis simple application d'un filtre courant (attention aux conditions aux bords)).

  29. #28
    invite2800a7c8

    Re : Programme de poker PYTHON

    Salut,

    Perso, si je devais m'attaquer à l'affaire, j'opterai plutôt pour solution qui me laisse la possibilité de créer des instructions spécifiques orientées application.
    Je ne connais pas Suffisamment PYTHON pour juger si j'ai cette possibilité avec ce langage. Mais tout de même
    j'ai quelques doutes.

    Cordialement

    Ludwig

  30. #29
    inviteeecca5b6

    Re : Programme de poker PYTHON

    Citation Envoyé par Ludwig1 Voir le message
    Perso, si je devais m'attaquer à l'affaire, j'opterai plutôt pour solution qui me laisse la possibilité de créer des instructions spécifiques orientées application.
    Chaque chose en son temps...

    On parle de concevoir un appareil photo et tu parles de l'écran pour les afficher...

  31. #30
    invite2800a7c8

    Re : Programme de poker PYTHON

    Re,
    Comme je n'ai pas suivi cette discussion je ne peut pas trop m'avancer, mais par expérience on sait qu'il faut toujours se ménager une issue de secours. Le fait de pouvoir créer des instructions orientées application en est une.

    Par ailleurs l'aspect IA m'intéresse, surtout la génération dynamique de code à partir d'une analyse
    de situation à un instant ( t ). C'est un peu ce que tu veux faire ou bien ?

    Cordialement
    Ludwig

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Programme Python
    Par invite03a2d249 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 29/01/2017, 08h50
  2. [Python] subprocess, lancer un autre programme avec python
    Par Loupsio dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 30/11/2016, 19h56
  3. Programmation du jeu Poker en python (2.7.5)
    Par inviteafd1c9ef dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 30/10/2013, 21h03
  4. Programme python
    Par invite70312004 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 20/09/2013, 22h52
  5. Programme en Python
    Par invitec13ffb79 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 19/09/2011, 20h14