IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Développement d'un jeu de plateau en Delphi avec l'aide de Claude AI
Un billet blog de Gouyon

Le , par Gouyon

0PARTAGES

Introduction:

J'ai développé en delphi un jeu de plateau assimilable à un jeu de dame. Plus précisément il s'agit de GIPF premier jeu de la série du projet GIPF qui est une série de jeux de stratégie combinatoires abstraits créés par Kris Burm entre 1997 et 2017, qui opposent deux joueurs (Pour plus de détail suivre ce lien). Je souhaitais ajouter à ce jeu la capacité de jouer contre la machine et ce n'est pas évident du tout. Mes premières approches ont été d'utiliser des algorithmes du type min-max puis j'ai fait de l'apprentissage renforcé (Q-Learning). Mais compte tenu du nombre de combinaisons possibles, ces algorithmes ne pouvaient pas répondre au besoin. Du coup j'ai envisagé l'apprentissage profond renforcé (deep Q-Learning). Il s'agit d'une extension de l'apprentissage renforcé qui utilise un réseau neuronal pour estimer les valeurs de renforcement. Le problème est que je ne savais pas du tout comment m'y prendre. En effet, on trouve beaucoup d'articles sur ce sujet sur internet mais ils ont tendance à toujours reprendre les mêmes exemples et à être très généraux. De plus les codes sont en Python et je ne me voyais pas coder à nouveau mon jeu en Python. N'ayant pas réussi à trouver mon bonheur j'ai tenté l'IA.

Merci à l'IA:
J'ai testé plusieurs IA chatGPT ,Perpexity mais c'est Claude qui m'a donné le meilleur résultat. En effet une fois le problème exposé, il m'a proposé plusieurs solutions comme les autres mais en plus après quelques précisions de ma part, il m'a fourni les codes en python et en pascal pour faire fonctionner mon IA. N'ayant qu'une connaissance très approximative de Python il m'a indiqué comment faire les installations et il m'a aussi indiqué quelles corrections faire lorsque je lui remontais des erreurs. Afin d'éviter de coder à nouveau le jeu en Python, j'ai demandé à Claude de me fournir une solution basée sur le principe dans lequel j'allais fournir au modèle un ensemble d'expériences. Chaque expérience est composée d'une situation de mon plateau de jeu à laquelle j'associe un coup et une évaluation de la situation après que le coup a été joué.

Comment tout ça fonctionne
Même si Claude a généré pas mal de code, j'ai quand même du faire un certain nombre de choses. Tout d'abord j'ai développé un algorithme qui génère des expériences et qui les évalue (je détaillerai plus la fonction d'évaluation dans le chapitre suivant). Ensuite j'entraine le modèle à l'aide des codes Python et le résultat est exporté sous la forme d'un fichier JSON. Ensuite je lis ce fichier JSON ce qui me permet de créer un réseau de neurones sous delphi que j'utilise en l’alimentant avec une situation donnée et il me donne le meilleur coup possible qu'il a calculé.

La fonction d'évaluation
Par principe l'apprentissage par renforcement fonctionne sur un système de récompense. Très grossièrement si le système joue bien, il est récompensé et s'il joue mal il est puni. C'est pourquoi la fonction d'évaluation est fondamentale. Et c'est ce qui m'a posé les plus grandes difficultés. Comme indiqué précédemment, pour une situation et un coup donné, il faut attribuer un réel dont la valeur comprise entre -1 (j'ai perdu) et 1 (j'ai gagné) représente le degré de récompense de ce coup. Et c'est là que ça peut devenir extrêmement compliqué. En effet dans le cas ou le coup mène à une victoire ou à une défaite, l'estimation est simple à faire c'est respectivement 1 ou -1. Par contre dans tous les autres cas c'est beaucoup plus compliqué car il faut attribuer une valeur qui indique si pour cette situation donnée ce coup est bon ou mauvais. La fonction d'évaluation doit être capable d'estimer cela. Par exemple pour GIPF, le but du jeu est de prendre tous les pions adverses. Donc on peut imaginer une fonction d'évaluation qui récompense en fonction de la différence entre son nombre de pions et celui de l'adversaire. Mais comme à chaque coup on ne prend pas systématiquement un pion adverse, il y a un bon nombre de situation et de coup qui vont être de même valeur d'évaluation. Or parmi ces situations, il est possible que certaines aboutissent à un coup gagnant pour l'adversaire. Du coup une situation qui est à priori bonne peut finir en catastrophe.

Le suivi du projet par Claude
Après mes premiers tests, j'ai soumis à Claude les résultats et il m'a expliqué ce qui se passait de façon claire et il m'a conseillé un certain nombre d'améliorations. Alors soyons honnête Claude n'a pas toujours raison et certaines de ses suggestions ont donné de mauvais résultats. Mais dans l'ensemble cela m'a permis d'avancer dans le projet.

En conclusion
Je dirais que le point le plus positif a été de me mettre le pied à l'étrier. A partir du moment où Claude m'a fourni les premiers éléments de code, j'ai pu commencer à faire quelque chose. Le second point positif c'est que j'ai pu "dialoguer" avec Claude pour améliorer le projet. Par contre il ne faut pas rêver même si Claude aide beaucoup, il y a énormément de travail à faire par la suite et à moins d'avoir un jeu très simple, l'obtention d'un résultat satisfaisant peut être longue et difficile.
Vous avez lu gratuitement 286 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !