首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在游戏中使用转位表来提高性能?

如何在游戏中使用转位表来提高性能?
EN

Stack Overflow用户
提问于 2019-10-12 20:03:24
回答 1查看 552关注 0票数 5

我已经实现了迭代深化与α-β剪枝在我的游戏中,我还增加了一个转位表,以存储已经评估的板。

现在,我正在做以下工作:

  1. 在运行迭代深化时,在深度=0时评估和存储所有位置,并在TT中存储它们的分数。现在,当它以depth = 1重新运行时,我只返回板的值(如果它存在于TT中)。这会使算法在深度=0处停止,因为所有的值都在TT中,表示depth =0板。

如果在达到深度极限时从TT返回值。深度= MAX_DEPTH那么大的子树永远不会被砍掉。

因此,我不明白我应该如何重复使用TT中存储的值来使我的游戏更快?

EN

回答 1

Stack Overflow用户

发布于 2019-10-17 19:48:26

我将在这个答案中用国际象棋作解释,当然,这一推理只要稍加修改,也可以应用于其他棋类游戏。

棋盘游戏程序中的换位表是缓存,它在缓存中存储已经评估过的板卡。拥有一个易于处理的缓存值是很好的,它将唯一地标识一个位置,例如:

代码语言:javascript
运行
复制
WKe5Qd6Pg2h3h4 BKa8Qa7

因此,如果到达某个位置,则检查缓存密钥是否存在,如果存在,则重用其评估。每当您访问depth=0的某个职位时,在对其进行适当评估之后,就可以缓存它。所以,如果做了一些动作,在子变体中,你可以或多或少地跳过评估。例如,让我们考虑一个示例,在起始位置白色移动1。Nf3和黑色回复1.Nf6。在两个复制的结果位置被缓存,白色的2。Ng1需要评估,因为这还没有评估或缓存,但布莱克的可能的2.不需要对Ng8进行评估,因为它会导致开始位置。

当然,您可以进行更积极的缓存,并将位置存储到深度=1甚至更多。

你需要确保你不会错过游戏的一些战略细节。在国际象棋的情况下,你需要记住:

  • the 50移动规则的效果
  • 3次重复绘制
  • ,他正在移动
  • 是/在过去/现在可能是一些特殊的动作,而不是在其他情况下

f 210

因此,您可能需要在算法中添加一些进一步的细微差别,但要回答原来的问题:在游戏中已经发生的位置或在变化表中非常高的位置可以被缓存,或者或多或少地被忽略(在大多数情况下,越多的方法,就越少意味着上面概述的细微差别)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58358016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档