17-09-2008, 07:20 PM
Bonjour à tous,
Je suis en train de réfléchir au moyen de créer une IA correcte pour mon jeu, Aluren. Les règles sont assez simples, vous pourrez au besoin les trouver ici en détails.
Je les rappelle tout de même rapidement : vous commencez avec une case sur le plateau. Votre adversaire aussi. Chaque tour, vous pouvez prendre n'importe quelle case qui touche une case que vous possédez déjà, sauf si elle est déjà prise par votre adversaire. Chaque case rapporte un point, le joueur qui ne commence pas a cinq points d'avance, celui qui joue le dernier coup perds 10 points d'un coup. Celui qui a le plus de points gagne. La partie se termine quand il n'y a plus de cases qui soient prenables par les deux adversaires.
Donc, le problème que j'ai est que j'aimerais trouver une IA pour le jeu, capable de faire des parties un minimum intéressantes. J'avais pensé à plusieurs systèmes :
- Une IA qui joue totalement au hasard : chaque tour, elle choisi au hasard ce qu'elle va faire.
Avantage : C'est simple à faire.
Inconvénient : C'est pas top, au niveau de l'interet de la partie.
- Une IA qui joue en essayant de calculer le nombre de territoires (cases) restantes et à lui : En gros, l'idée serait : analyser le résultat de tous les coups jouables. Pour chaque coup possible, compter le nombre de cases qu'il aurait à lui et le nombre de cases restantes prenables par les deux adversaires. Si le nombre en question est 0, ne pas jouer le coup sauf si il y en a pas d'autres. Sinon, jouer le coup qui rapporte le plus de territoires juste à lui (c'est à dire que l'autre ne peut pas prendre).
Avantage : L'IA serait probablement la meilleure sur la fin de la partie.
Inconvénients : au début de la partie, tous les coups se valent en "nombre" pur vu qu'il faut plusieurs coups pour entourer completement des cases et donc être le seul à pouvoir les prendre. Qui plus est, l'algo serait très lourd pour le serveur vu que le calcul des territoires est récursif et que c'est la partie la plus lourde de tout le jeu.
- Une IA qui "apprends" : A chaque coup joué par n'importe quel joueur, on enregistre dans une base de données l'état du plateau avant le coup, le numéro de la partie, le joueur qui a joué, et le résultat de la partie. Le but ? Que face à une configuration, le système cherche si quelqu'un a déjà joué d'une manière gagnante cette configuration. Si oui, il joue le coup gagnant la fois précédente, sinon il joue au hasard (je pense que ce sera le hasard, combiner cette méthode avec le calcul est vraiment trop lourd). (c'est plus ou moins le principe pour les IA des jeux d'echecs)
Avantage : L'IA s'améliorera au fil du jeu. Il est assez simple de régler la difficulté de l'IA en lui donnant une chance d'agir au hasard au lieu de reprendre la méthode gagnante. On peut obtenir une IA vraiment très douée.
Inconvénients : Le jeu contient des sorts qui ne peuvent pas être gérés de cette manière (mais peuvent être gérés au hasard). L'IA au début du jeu sera très faible, et c'est justement au début du jeu qu'elle est le plus importante (vu que quand le jeu sera plus connu, il y aura plus de monde et il sera donc possible de jouer contre un joueur humain).
Voila, j'envisage vraiment la troisième option parce qu'elle me semble la meilleure, mais j'aimerais avoir votre avis... Est-ce que vous en verriez d'autre ?
Je suis en train de réfléchir au moyen de créer une IA correcte pour mon jeu, Aluren. Les règles sont assez simples, vous pourrez au besoin les trouver ici en détails.
Je les rappelle tout de même rapidement : vous commencez avec une case sur le plateau. Votre adversaire aussi. Chaque tour, vous pouvez prendre n'importe quelle case qui touche une case que vous possédez déjà, sauf si elle est déjà prise par votre adversaire. Chaque case rapporte un point, le joueur qui ne commence pas a cinq points d'avance, celui qui joue le dernier coup perds 10 points d'un coup. Celui qui a le plus de points gagne. La partie se termine quand il n'y a plus de cases qui soient prenables par les deux adversaires.
Donc, le problème que j'ai est que j'aimerais trouver une IA pour le jeu, capable de faire des parties un minimum intéressantes. J'avais pensé à plusieurs systèmes :
- Une IA qui joue totalement au hasard : chaque tour, elle choisi au hasard ce qu'elle va faire.
Avantage : C'est simple à faire.
Inconvénient : C'est pas top, au niveau de l'interet de la partie.
- Une IA qui joue en essayant de calculer le nombre de territoires (cases) restantes et à lui : En gros, l'idée serait : analyser le résultat de tous les coups jouables. Pour chaque coup possible, compter le nombre de cases qu'il aurait à lui et le nombre de cases restantes prenables par les deux adversaires. Si le nombre en question est 0, ne pas jouer le coup sauf si il y en a pas d'autres. Sinon, jouer le coup qui rapporte le plus de territoires juste à lui (c'est à dire que l'autre ne peut pas prendre).
Avantage : L'IA serait probablement la meilleure sur la fin de la partie.
Inconvénients : au début de la partie, tous les coups se valent en "nombre" pur vu qu'il faut plusieurs coups pour entourer completement des cases et donc être le seul à pouvoir les prendre. Qui plus est, l'algo serait très lourd pour le serveur vu que le calcul des territoires est récursif et que c'est la partie la plus lourde de tout le jeu.
- Une IA qui "apprends" : A chaque coup joué par n'importe quel joueur, on enregistre dans une base de données l'état du plateau avant le coup, le numéro de la partie, le joueur qui a joué, et le résultat de la partie. Le but ? Que face à une configuration, le système cherche si quelqu'un a déjà joué d'une manière gagnante cette configuration. Si oui, il joue le coup gagnant la fois précédente, sinon il joue au hasard (je pense que ce sera le hasard, combiner cette méthode avec le calcul est vraiment trop lourd). (c'est plus ou moins le principe pour les IA des jeux d'echecs)
Avantage : L'IA s'améliorera au fil du jeu. Il est assez simple de régler la difficulté de l'IA en lui donnant une chance d'agir au hasard au lieu de reprendre la méthode gagnante. On peut obtenir une IA vraiment très douée.
Inconvénients : Le jeu contient des sorts qui ne peuvent pas être gérés de cette manière (mais peuvent être gérés au hasard). L'IA au début du jeu sera très faible, et c'est justement au début du jeu qu'elle est le plus importante (vu que quand le jeu sera plus connu, il y aura plus de monde et il sera donc possible de jouer contre un joueur humain).
Voila, j'envisage vraiment la troisième option parce qu'elle me semble la meilleure, mais j'aimerais avoir votre avis... Est-ce que vous en verriez d'autre ?