2017-02-21 4 views
0

J'ai implémenté avec succès un moteur de jeu négascout, qui fonctionne bien, mais de manière déterministe. Cela signifie que je peux rejouer le même jeu encore et encore, car pour une position donnée, le moteur du jeu donne le même meilleur coup à chaque fois. Ceci est indésirable dans mon cas, parce que je veux rivaliser avec mon algorithme dans les tournois de codage et avec le comportement déterministe, un adversaire peut facilement écrire un programme qui gagne en rejouant juste une séquence de coups gagnants contre mon programme. Ma question est la suivante: quelle est la façon la plus efficace et la plus élégante de la rendre moins déterministe? Je pourrais ajouter un décalage aléatoire à mon évaluation de position, mais je crains que cela puisse aggraver la qualité de l'évaluation. Existe-t-il un moyen standard de le faire? Commencez juste à partir d'une autre position ouverte aléatoire.Comment rendre un moteur de jeu basé sur une recherche alpha-beta non-déterministe?

Répondre

1

Ne pas ajouter aléatoire à votre moteur jusqu'à ce que vous avez travaillé sur les bugs. Si deux ou plusieurs coups sont égaux, vous pouvez les aléatoirement dans l'ordre de déplacement.

+0

Merci pour la suggestion, mais dans la plupart des jeux, je ne peux pas changer la position d'ouverture. Mon problème est que dans certaines compétitions, vous soumettez votre code compilé. J'ai moins peur que quelqu'un désassemble mon code, mais ils peuvent régler leur moteur pour jouer une séquence de mouvements où mon algorithme échoue. Jusqu'à présent, je n'ai pas trouvé de meilleur moyen que de randomiser pour éviter cela. J'ai également essayé de choisir au hasard des mouvements aussi bons, mais cela compliquait le moteur et dans la plupart des cas n'avait pas beaucoup d'effet, parce que dans beaucoup de branches tu as de toute façon un alpha-beta-cutoff basé sur le score de mouvement. –