在游戏编程中,如何测试使用的启发式是不是一致?

Posted

技术标签:

【中文标题】在游戏编程中,如何测试使用的启发式是不是一致?【英文标题】:In game programming, how can I test whether a heuristic used is consistent or not?在游戏编程中,如何测试使用的启发式是否一致? 【发布时间】:2010-12-05 03:06:17 【问题描述】:

我已经为大型(更高维度)井字游戏考虑了一些启发式。如何检查其中哪些实际上是一致

一致性到底是什么意思?

【问题讨论】:

这是一个真正的问题。 有两个人将此标记为“不是一个真正的问题”而关闭。我也不同意他们的观点。 【参考方案1】:

启发式算法会为给定状态生成某种成本值。在这种情况下,一致性意味着对一个状态的估计加上移动到下一个状态的成本小于或等于对那个新状态的估计。如果这不是真的,那么这意味着——如果启发式是准确的——从一种状态转换到下一种状态可能会产生负成本,这通常是不可能或不正确的。

当涉及到寻路时,这很容易证明,因为您预计沿路径的每一步都需要一些时间,因此第 1 步的估计值必须低于任何第 2 步的估计值。这可能有点复杂对于井字游戏,因为您可能必须任意决定什么构成系统中的“成本”。如果您的启发式可以由于下棋而上升或下降 - 例如。因为你用正数编码好的动作,用负数编码坏的动作——那么你的启发式就不能一致了。

但是,缺乏一致的启发式方法并不总是一个问题。如果没有它,您可能无法保证达到最佳解决方案,但与蛮力状态搜索相比,它仍然可以加快搜索速度。

【讨论】:

【参考方案2】:

已编辑:这个答案混淆了可接受性和一致性。我已将其更正以提及可受理性,但最初的问题是关于一致性的,这个答案并没有完全回答这个问题。

您可以分析地做到这一点,通过区分所有不同的情况,从而证明您的启发式确实是可以接受的。

对于有根据的搜索,当且仅当启发式低估到合适状态的“距离”时,启发式搜索问题(例如,搜索游戏中的最佳移动)是可接受的。

示例:通过城市之间的高速公路网络搜索到目标城市的最短路线。在这里,可以使用欧几里德距离作为一种启发式方法:到目标的直线长度总是比最好的方法短或等长。

像 A* 这样的算法需要可接纳性,然后保证您处于最佳状态(即,如果存在,他们会找到到达目标状态的最佳“路线”)。

我建议在AI textbook 中查找该主题。

【讨论】:

在可接受的启发式和一致的启发式之间也有区别,尽管所有一致的启发式都是可接受的。可接受意味着启发式低估了总路径成本,如果启发式在遍历一个步骤后减少不超过步骤成本,则它是一致的。

以上是关于在游戏编程中,如何测试使用的启发式是不是一致?的主要内容,如果未能解决你的问题,请参考以下文章

微信小游戏爆发式增长,如何保证小游戏的版本迭代又快又稳

Rx 中的游戏更新渲染循环:如何确保一致的状态?

基于图像识别的启发式UI自动化测试介绍

2048视频游戏的EV功能[关闭]

游戏编程 - 如何避免重新发明***

使用立方体测试的场景套件性能