需要启发式函数的黑白棋(翻转棋)思路

9
我刚刚学习了启发式函数,但是我找不到一个适用于黑白棋(翻转棋)的启发式函数的想法,我只需要一个评估棋盘状态的好想法。
我想到了:
  1. 计算可行的移动次数
  2. 计算棋子数量
  3. 计算在角落里的棋子数量,并给予更好的分数。
我不知道这是否好。
3个回答

11
不,这还不够好。磁盘数量特别无用 - 虽然收集尽可能多的磁盘是游戏的目标,但除了最后一步之外的任何移动都是相当毫无意义的。以下是您应该考虑的几件事情:
- 计算移动次数可以衡量即时机动性;其他条件相同的情况下,应优先考虑能够开启更多其他移动的情况。您还需要衡量潜在机动性 - 开放空间旁边对手磁盘的数量。 - X方格 - B2、B7、G2和G7。早期在那里放置您的磁盘几乎肯定会让相邻的角落暴露出来,因此您的启发式应该给予它们高负权重,至少在前40个移动中。 - C方格 - A2、A7、B1、G1、H2、H7、B8和G8。它们为对手提供了接近角落的途径,因此它们的价值应该与其他方格不同,至少在边缘拥有少于五个磁盘时。

您可以在此处阅读有关构建相对强大(就其击败人类初学者的能力而言)的翻转棋小应用程序所使用策略的相对简短的描述。


7
一个好的黑白棋启发式函数需要捕捉更多方面的位置信息,包括:
  • 硬币平衡
  • 移动性(可行动的步骤数)
  • 角落的囚禁(角落是稳定/不可翻转的,且具有特殊重要性)
  • 稳定性(衡量棋子免于被翻转的程度)
我已经讨论了这些方面,并提供了一个好的启发式函数的实现方法: http://kartikkukreja.wordpress.com/2013/03/30/heuristic-function-for-reversiothello/

-7

你可以试试看。没有什么比数据更能得到答案了。

假设你使用合理的软件工程实践并抽象出启发式,你可以很快检查它。


1
仅翻译文本内容:不提供任何与回答问题相关的见解。 - Ishan Srivastava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接