1

嗯,正如标题所暗示的,我正在编写一个名为 Morabaraba 的游戏。这将是一场计算机与人类的游戏。我将使用游戏树和 alpha-beta 截止值来生成计算机游戏,并且每个计算机游戏都应该在特定的时间量内进行(比如说 15 秒)。

什么是计算自轮到开始以来经过的秒数并验证它仍然没有超过时间限制而不会使系统过载的最佳方法是什么?众所周知,在生成游戏树时,时间非常宝贵。超过时限将被没收。

我想知道如何使用轻量级算法来做到这一点。我如何验证没有达到每 x 秒的时间限制?这个验证的时间可以忽略不计吗?

提前致谢。

4

2 回答 2

1

是的,此验证的时间几乎可以忽略不计,因为您将以离散的时间间隔轮询经过的时间量并将其与开始时间进行比较以了解到目前为止已经过去了多少时间。

我在这里看到两个解决方案:

  • 将时间检查嵌入计算 alpha-beta 修剪的同一线程中,并相应地停止它,返回迄今为止找到的最佳解决方案
  • 将 AI 代码放在一个单独的线程上,并在时间超过阈值时中断它,方法是确保迄今为止最好的解决方案已经存储在某个地方,以便您可以获取它

第二种方法可能听起来很吓人,但在某些情况下,检查算法本身的经过时间是不切实际的,因为代码不能轻易地从被调用者调整和中断(例如,如果你有一个由许多不同步骤组成的非模块化算法,即不是你的情况)

于 2012-05-14T01:03:53.430 回答
0

首先检查每个“步骤”或每 N 个步骤之后的时间,以某种方式,您认为您至少每秒检查一次。如果您的计算性质使这不切实际,您可以使用诸如 POSIX 计时器之类的东西在给定时间过去后向您的进程发出信号。

于 2012-05-14T00:56:29.977 回答