我正在创建一个C程序来播放Gomoku。它使用Minimax搜索来决定最佳移动。但是,它只能搜索最佳移动10秒。如何确定我的搜索功能何时花了10秒钟搜索。如果您能为我提供一个示例或文档的链接,我将非常感激。
答案 0 :(得分:5)
#include <time.h>
time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < 10) {
//search
}
那就是我想到的。它没有经过测试。
答案 1 :(得分:3)
我认为你的问题不是时间函数本身。你提到了Minmax算法,它是递归的。 Minmax算法的停止标准是给定的搜索深度。如果你想要一个基于时间的停止标准,你应该使用Iterative Deepening框架扩展你的算法,如果时间结束,让递归Minmax函数返回Sentinel Value。
答案 2 :(得分:3)
唯一的时间检查不能完成这项工作! minimax是一种递归的深度优先搜索算法,可以花费在30秒检查非常错误的动作,当有一些明显更好的动作,并在最后1秒内找到一些好的动作!
你必须使用一些算法,在短时间内找到相当不错的动作然后,随着越来越多的时间可用,它改进了解决方案!您必须将您的minimax(或alpha-beta)算法修改为广度优先搜索策略。然后你可以在任何时候进行相当好的动作。
答案 3 :(得分:1)
您可以使用alarm
信号。只需让信号处理程序设置一个名为okWereDoneNow
的全局标志,然后让您的搜索开始,检查并重置它。
这比定时器功能的优势在于每次迭代搜索只需要一次比较。信号工作很昂贵,但只运行一次。在一个密集的,可能是CPU限制的重复操作中,这可能是一个重要的优势。但是不要相信我的话 - 测试!
答案 4 :(得分:0)
您可以在time.h中使用time()函数。通常,返回值以秒为单位。即使不是,您也可以简单地使用同一标头中的difftime()。
This是必要功能的良好资源。
以上链接来自C ++参考站点,但该标题和示例都是C代码。