【问题标题】:How to synchronize AI MinMax algorithm for checkers? Pseudocode如何为跳棋同步 AI MinMax 算法?伪代码
【发布时间】:2020-07-20 12:17:35
【问题描述】:

我需要使用线程来协调 MinMax 方法。为了更清楚起见,我不会粘贴我的 MinMax。
我使用此算法为跳棋游戏中的计算机选择最佳可能动作


这是来自维基百科的伪代码:

1 function minimax(node, depth, maximizingPlayer) is
2     if depth = 0 or node is a terminal node then
3         return the heuristic value of node
4     if maximizingPlayer then
5         value := −∞
6         for each child of node do
7             value := max(value, minimax(child, depth − 1, FALSE))
8         return value
9     else (* minimizing player *)
10         value := +∞
11         for each child of node do
12             value := min(value, minimax(child, depth − 1, TRUE))
13         return value

var value = minimax(origin, depth, TRUE) // call

我需要以某种方式在该方法中实现线程以使其更快。

我对线程的了解真的很有限……而且我必须在明天之前完成。最终,我用 c# 编写了函数,但我也很乐意接受 java 的建议,因为我比 c# 更了解它。

谁能告诉我应该从哪里开始?
我认为我应该通过一定数量的线程调用该方法,这将基于可能的移动次数。 7号线可能是个好地方?递归使事情复杂化了很多,我迷路了。
我应该以某种方式加入这些线程,否则递归本身将迫使整个方法像这样而不是另一个那样工作。


任何人都可以编辑这个伪代码并向我展示一些我应该如何启动这个特定数量的线程的例子。它可以在 c# 或 java 中。每条建议都值金。我知道这个话题很广泛,但我尽量让它具体,所以请管理员不要对我关闭这个话题:(

【问题讨论】:

    标签: java c# multithreading artificial-intelligence minmax


    【解决方案1】:

    您可能想看看Parallel.Foreach。请记住,在线程上调度工作有一些开销,因此仅用并行等效项替换循环可能会慢得多。一种相当简单的方法是添加一个深度检查,并在第一级并行运行,在更深的级别同步运行。

    【讨论】:

    • check for the depth and run it in parallel for the first level(s) and synchronous for the deeper levels 是什么意思?
    • @brarord 添加支票,if (depth > SomeValue) {use parallel foreach} else {regular for each}
    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    相关资源
    最近更新 更多