首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中编写带有超时的AI函数

如何在python中编写带有超时的AI函数
EN

Stack Overflow用户
提问于 2013-03-10 15:19:13
回答 3查看 308关注 0票数 0

上下文

我正在为python中的确定性两人游戏编写一个AI。我希望编写一个函数,它将一个超时值作为其参数之一,并在超时后不久返回一个移动。该函数在超时结束之前搜索(否定或类似的),然后返回它所能找到的最佳移动。

规范

  • 函数应该返回一个有效的移动,不管它是如何或何时返回的。
  • 该函数在超时后可能会返回一点,只要用户没有注意到这一点(~100 as )。
  • 如果将自定义的AI_INTERRUPT事件放置在pygame队列中,则该函数应该返回。(这是为了让不耐烦的用户可以强迫电脑播放)。

提出的实现

我想我对如何实现这一点有一个想法,但我在网上发现了很多相互矛盾的建议(主要是针对与这个不太一样的问题)。我也担心,我是过度工程的东西。因此,我要问的是,这一实施建议是否明智,或者你是否提出了其他建议。

我正在考虑将我的AI算法写成一个生成器,从而产生更好的动作。收益率之间的时间延迟可能很长,但第一次收益率几乎是即时的。

然后,我将在子进程中调用这个生成器,并让它将产量值输入管道。

然后,主进程将在以下循环中运行:

  • 检查一下管子。如果产生了一个新值,则存储它。
  • 检查一下时间。如果已超出超时,则返回最新值。
  • 检查AI_INTERRUPT事件,如果找到最新值,则返回最新值。
  • 根据需要处理其他游戏事件

我在用Python3做游戏。

EN

回答 3

Stack Overflow用户

发布于 2013-03-10 15:24:16

您可以使用一个超时线程来包装您的否定方法。

该方法将使用到目前为止的最优解更新共享数据结构。共享数据结构可以简单地成为传递给消极方法的列表。当超时发生时,调用方将从列表中读取解决方案。

票数 1
EN

Stack Overflow用户

发布于 2013-03-10 15:25:19

如果您正在使用UNIX,则可以使用信号库来实现超时函数:如果要花太长时间才能完成超时功能

票数 0
EN

Stack Overflow用户

发布于 2013-03-10 16:41:49

既然您已经在使用玩偶游戏,请使用以下任何一种:

代码语言:javascript
复制
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.waitpygame.time.delay

您可以制作一个稍微复杂一些的版本,它仍然允许您的主循环继续。但是如果你的显示器不能在短时间内更新,那可能是太过分了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15323805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档