语境
我正在为 python 中的确定性两人游戏编写 AI。我希望编写一个函数,它将超时值作为其参数之一,并在超时后不久返回一个动作。该函数搜索(negamax 或类似的)直到超时,然后返回它可以找到的最佳移动。
规格
- 无论以何种方式或何时导致该函数返回,该函数都应返回一个有效的移动。
- 该函数可能会在超时后返回一点,只要这对用户来说是不明显的(约 100 毫秒)。
- 如果自定义 AI_INTERRUPT 事件被放置在 pygame 事件队列中,该函数应该返回。(这样不耐烦的用户就可以强制电脑玩了)。
建议实施
我想我知道如何实现这一点,但我在网上发现了很多相互矛盾的建议(主要是针对与这个不太一样的问题)。我也担心我过度设计了一些东西。因此,我在问这个实施建议是否明智,或者您是否推荐其他东西。
我正在考虑将我的 AI 算法编写为一个生成器,以不断产生更好的动作。收益率之间的时间延迟可能很长,但第一次收益率几乎是立竿见影的。
然后我会在一个子进程中调用这个生成器,并让它将产量值输入管道。
然后主进程将在以下循环中运行:
- 轮询管道。如果产生了新值,则将其存储。
- 检查时间。如果已超过超时,则返回最新值。
- 检查 AI_INTERRUPT 事件,如果找到则返回最新值。
- 根据需要处理其他 pygame 事件
我正在使用 Python 3 和 pygame。