【问题标题】:Gomoku: limited time to search五子棋:搜索时间有限
【发布时间】:2011-04-26 10:23:26
【问题描述】:

我正在创建一个 C 程序来播放 Gomoku。它使用Minimax 搜索来决定最佳移动。但是,它只能搜索 10 秒的最佳着法。如何确定我的搜索功能何时搜索了 10 秒。如果您能给我提供一个示例或文档链接,将不胜感激。

【问题讨论】:

    标签: c algorithm time minimax gomoku


    【解决方案1】:

    唯一的时间检查是行不通的! 极小值是一种递归深度优先搜索算法,它可以花费例如当有一些明显好得多的动作时,30 秒检查非常错误的动作,并且在最后 1 秒内找到一些好的动作!

    你必须使用一些算法,它可以在短时间内找到相当好的棋步,然后随着时间的增加,它会改进解法!您必须将您的极小极大(或 alpha-beta)算法修改为 广度优先搜索 策略。然后你可以在任何时候通过相当好的动作来削减它。

    【讨论】:

    • @Christian 谢谢,这是对其他回答者的报复,因为我对他们的错误答案投了反对票……目前我有 +2/-2 => 0
    【解决方案2】:

    我认为您的问题不在于时间函数本身。您提到了递归的 Minmax 算法。最小最大算法的停止标准是给定的搜索深度。如果您喜欢基于时间的停止标准,您应该使用 Iterative Deepening 框架扩展您的算法,并让递归 Minmax 函数在时间结束时返回 Sentinel Value

    【讨论】:

      【解决方案3】:

      您可以使用alarm 信号。只需让信号处理程序设置一个名为 okWereDoneNow 的全局标志,然后开始搜索、检查并重置它。

      与计时器函数相比,它的优点是每次搜索迭代只需要一次比较。信号工作很昂贵,但只运行一次。在密集的、可能受 CPU 限制的重复操作中,这可能是一个显着优势。但不要相信我的话 - 测试!

      【讨论】:

      • 在递归深度优先搜索极小极大算法中,唯一的时间检查将无法完成工作!
      • 问题是关于超时的。答案是关于超时。如果您想发布与超时无关的答案,请继续,但是您到底为什么要对回答给出的问题的人投反对票?
      • Thom Smith,问题不是关于一般的超时,而是关于 minimax 算法的超时。问题是这样提出的。您的答案是错误的,因为如果不更改算法,它不会产生预期的结果......这就是我对您的答案投反对票的原因。为什么你对我的投了反对票?纯粹的报复?
      【解决方案4】:

      您可以在 time.h 中使用 time() 函数。通常,返回值以秒为单位。即使不是,您也可以简单地使用同一个标头中的 difftime() 。

      This 是有关必要功能的好资源。

      以上链接来自一个 C++ 参考站点,但该标题和示例都是 C 代码。

      【讨论】:

      • 在递归深度优先搜索极小极大算法中,唯一的时间检查将无法完成工作!
      • 当然,BFS 会比 DFS 更好,但问题在于时间而不是算法本身。用户只是询问如何检查时间,而不是算法是否可靠。
      • 问题是关于极小极大算法的时间限制。使用你的答案,提问者不会得到预期的结果。
      • "如果您能提供一个示例或文档链接,将不胜感激。"我的回答没有回答问题吗?
      【解决方案5】:
      #include <time.h>
      time_t start_time = time(NULL);
      while (((int)(time(NULL) - start_time)) < 10) {
        //search
      }
      

      也就是说,我想到了什么。但它没有经过测试。

      【讨论】:

      • 虽然没有记下我会做什么,但这是我将采取的基本方法。显然,您需要在 while 循环中放置更多约束,例如 while(!foundOptimalMove &amp;&amp; ... time stuff ...)
      • 这不好!问题在于深度搜索,而不是时间检查!
      • 这个问题还有答案吗?
      猜你喜欢
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多