【问题标题】:How to write Analysis function for Min-Max Algorithm?如何为 Min-Max 算法编写分析函数?
【发布时间】:2016-11-28 11:18:46
【问题描述】:

我正在尝试为类似于井字游戏的游戏编写 AI 代码。你可以看到它的规则here

我正在使用的min-max算法和分析函数可以找到here

到目前为止我尝试过的方式:

  1. 我已经建立了一些适合当前玩家的模式。 (在 Python 中)

例如my_pattern = " ".join(str(x) for x in [piece, None, piece, piece, None])

  1. 我将此类图案与六角形游戏板上每块的所有 6 种可能方向进行匹配(不适用于空白区域)。准确地说,将my_pattern 与 6 个不同的阵列匹配(每个阵列代表 6 个不同方向之一)。

现在,这个分析函数实际上应该计算什么?

  1. 整个棋盘状态得分?
  2. 上一步棋的得分?

如果有人能准确描述分析功能的用途,那就太好了。

【问题讨论】:

    标签: algorithm game-theory minmax


    【解决方案1】:

    分析函数表示板子的当前状态。它可能/可能不包括最后一步、任何先前的移动或到达棋盘位置的移动顺序。它还应该考虑轮到谁玩。

    我的意思是,同一块棋盘对白/黑可能是好是坏,这取决于轮到谁。 (在象棋中称为zugzwang的情况)。

    此外,同一个棋盘可以通过多种移动顺序到达,因此,是否要将其包含在分析中取决于游戏的类型。 (高级国际象棋引擎肯定包括移动顺序,虽然不是用于计算当前棋盘,但用于进一步分析到达该位置的可能性)。然而,在这个游戏中,我认为您的分析功能不需要包含最后或任何先前的移动(顺序)。

    编辑:

    分析函数示例:

    value = 10000*W(4) - 10000*W(3) + 200*W(2.1) + 200*W(1.2) + 100*W(2) + 100*W(1.1) + 2*W(1e) + 10*W(1m) + 30*W(1c) - (10000*B(4) - 10000*B(3) + 200*B(2.1) + 200*B(1.2) + 100*B(2) + 100*B(1.1) + 2*B(1e) + 10*B(1m) + 30*B(1c))
    

    地点:

    W = white
    B = black pieces
    4 = made line of 4 pieces
    3 = made line of 3 pieces
    2 = made line of 2 pieces having possibility of getting extended to 4 from atleast one side
    . = blank (ie, 1.2 = W.WW on the board)
    1.1 = Piece|Blank|Piece and possibility of extending to 4 from atleast one side
    e|m|c = edge|middle|center of board, and possibility of extending to 4 from either sides
    

    这个分析函数的正值表示白方更好,0表示平衡板,负值表示黑方有优势。您可以根据将要执行的测试结果更改权重。然而,找到所有可能的组合是一项艰巨的任务,但游戏就是这样:)

    【讨论】:

    • 那么,分析函数应该返回什么Min-Max算法呢?我应该根据什么来计算分数?
    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2023-03-19
    • 2015-09-30
    • 2017-01-01
    • 2017-08-06
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    相关资源
    最近更新 更多