上下文
我正在为python中的确定性双人游戏编写AI。我希望编写一个函数,它将超时值作为其参数之一,并在超时后不久返回一个移动。该函数搜索(negamax或类似)直到超时结束,然后返回它可以找到的最佳移动。
规范
建议实施
我想我已经知道如何实现这一点,但我在网上发现了许多相互矛盾的建议(主要是针对与此问题不完全相同的问题)。我也担心我过度工程。因此,我问这个实施建议是否合理,或者你是否推荐其他建议。
我正在考虑将我的AI算法编写为能够连续产生更好动作的生成器。收益率之间的时间延迟可能很长,但第一次收益几乎是即时的。
然后我会在子流程中调用这个生成器,并将它的yield yield值输入管道。
然后主进程将在以下循环中运行:
我正在使用Python 3和pygame。
答案 0 :(得分:1)
您可以使用覆盖您的negamax方法的timed-out thread。
到目前为止,该方法将使用最佳解决方案更新共享数据结构。共享数据结构可以简单地是您传递给negamax方法的列表。超时发生时,调用者将从列表中读取解决方案。
答案 1 :(得分:0)
如果您正在使用UNIX,则可以使用信号lib来实现超时功能:Timeout function if it takes too long to finish
答案 2 :(得分:0)
由于您已经在使用pygame,请使用:
def foo(duration):
# time as MS
start = pygame.time.get_ticks()
while True:
now = pygame.time.get_ticks()
if now - start >= duration:
return
# do stuff
或者这两个功能中的一个:
pygame.time.wait或pygame.time.delay
你可以制作一个稍微复杂一点的版本,它仍然可以让你的主循环继续。但如果您的显示器在短时间内没有更新,则可能会有些过度。