Le minimax le plus élémentaire n'évalue que les nœuds feuille, en marquant les gains, les pertes et les tirages, et les sauvegarde dans l'arbre pour déterminer les valeurs de nœud intermédiaires. Dans le cas où l'arbre de jeu est intraitable, vous devez utiliser une profondeur de coupure comme un paramètre supplémentaire à vos fonctions minimax. Une fois la profondeur atteinte, vous devez exécuter une sorte de fonction d'évaluation pour les états incomplets.
La plupart des fonctions d'évaluation d'une recherche minimax sont spécifiques à un domaine, il peut donc être difficile de trouver de l'aide pour votre jeu en particulier. Rappelez-vous juste que l'évaluation doit renvoyer une certaine espérance de pourcentage de la position étant une victoire pour un joueur spécifique (typiquement max, mais pas en utilisant une implémentation de negamax). À peu près tout jeu moins recherché va ressembler à un autre jeu plus recherché. Celui-ci s'attache de très près au jeu [sticks] [1]. En utilisant le minimax et l'alpha beta seulement, je suppose que le jeu est traitable.
Si vous devez créer une fonction d'évaluation pour des positions non terminales, voici un petit peu d'aide pour l'analyse du jeu de bâtons, que vous pouvez décider si c'est utile pour le jeu de date ou non. Commencez à chercher un moyen de forcer un résultat en regardant une position terminale et tous les mouvements qui peuvent mener à cette position. Dans le jeu de bâtons, une position terminale est avec 3 bâtons ou moins restant sur le dernier coup. La position qui continue immédiatement cette position terminale laisse donc 4 bâtons à votre adversaire. Le but est maintenant de laisser votre adversaire avec 4 bâtons quoi qu'il arrive, et cela peut être fait à partir de 5, 6 ou 7 bâtons qui vous sont laissés, et vous voudriez forcer votre adversaire à vous quitter dans l'une de ces positions. L'endroit où votre adversaire doit être dans l'ordre pour que vous soyez dans 5, 6 ou 7 est 8. Continuez cette logique encore et encore et un modèle devient disponible très rapidement. Toujours laisser votre adversaire avec un nombre divisible par 4 et vous gagnez, toute autre chose, vous perdez.
Ceci est un jeu plutôt trivial, mais la méthode pour déterminer l'heuristique est ce qui est important car elle peut être directement appliquée à votre mission. Puisque le dernier à se déplacer va en premier, et que vous ne pouvez changer qu'un seul attribut de date à la fois, vous savez que pour gagner il doit y avoir exactement 2 coups restants ...etc.
Bonne chance, faites-nous savoir ce que vous finissez par faire.
[1]: http://emkay.unpointless.com/Blog/?p=42
Vous décrivez un algorithme Negamax. Ma seule critique de ceci est que sans définir 'increase_month' et' increase_day' votre algorithme n'a pas beaucoup de sens. Vous pouvez augmenter le jour à n'importe quel jour entre la date actuelle et 31 (selon le mois en cours) et vous pouvez augmenter le mois au mois que vous souhaitez (en fonction du jour). Il y a beaucoup plus de 2 états possibles pour chaque coup. –
@NickLarsen: Il est vrai que je ne savais pas exactement comment nous pouvions augmenter les dates de l'énoncé du problème. Je suis en train de mettre à jour ma réponse. Merci. – MAK