【发布时间】:2012-05-12 11:03:24
【问题描述】:
这是我在这里的第一个问题,如果我做错了什么,请告诉我...
我目前正在用 Java 制作草稿游戏。事实上,除了人工智能之外,一切都正常。 AI 目前是单线程的,使用 minimax 和 alpha-beta 修剪。这段代码有效,我认为,它只是很慢,我只能深入我的游戏树 5。
- 我有一个函数可以接收我的主板、一个深度(从 0 开始)和一个最大深度。在这个 maxdepth 处,它会停止,返回棋盘上棋子最多的玩家的值(-1,1 或 0)并结束递归调用。
- 如果尚未达到最大深度,我会计算所有可能的动作,并一一执行,以某种方式将我的更改存储到主板。
- 我还使用 alpha-beta 修剪,例如当我找到一个可以让玩家获胜的动作时,我不会在意接下来可能的动作。
- 我从该主板状态递归地计算下一组移动。退出递归调用时,我撤消了这些更改(从第 2 点开始)。我存储这些递归调用返回的值并在它们上使用极小值。
情况就是这样,现在我有一些问题。 我想更深入地研究我的游戏树,因此我必须减少计算移动所需的时间。
- AI 可能的动作(例如 AI 可以选择的动作)的值总是 0 是否正常?或者如果我可以更深入地研究递归,这种情况会改变吗?因为此时我只能进行 5 次深度 (maxdepth) 的递归,否则会花费太长时间。
- 我不知道它是否有用,但我可以如何将此递归转换为多线程递归。我认为这可以将工作时间除以某个值...
有人可以帮我解决这个问题吗?
【问题讨论】:
标签: java artificial-intelligence