【发布时间】:2021-05-24 14:45:51
【问题描述】:
快速免责声明这是针对家庭作业的,因此我不想放置任何代码,我想从你们那里获得概念性帮助,也许是帮助我理解的示例。本质上,我们必须为黑白棋/黑白棋实现一个人工智能,虽然 minmax 是最终目标,但我想从一个贪心算法开始。
好的,相关的定义/功能:
GameState - 这个变量保存了棋盘的边界,轮到谁了,还有棋盘(有一个 Maybe Player 列表,其中 Nothing 表示棋子是空的,Maybe Player1 或 Player2 表示一件作品呈现给玩家。
legalMoves - 在给定 GameState 时返回所有可能合法移动的列表。这里一个移动被定义为一个位置 (x,y)
applyMove - 最后我们有了 applyMove,它接受一个 GameState 和一个移动,并在移动完成后根据新棋盘返回一个新的 Maybe GameState。
这里的最终目标是创建一个函数,当给定 GameState 时,它会返回最佳移动
我做了什么: 首先,我创建了一个评估函数,它返回任何 GameState 的 eval (eval :: GameState -> Int)。所以是启发式的。
从这里我遇到了麻烦。我试图做的是将 applyMove 函数映射到 legalMoves 以返回给定 GameState 的所有可能的未来 GameStates 的列表。然后我将我的 eval 函数映射到 GameStates 列表以获得 Int 列表,然后我最终取了这个列表的最大值以获得最佳评估。 问题是我不知道如何从给我评估的 legalMoves 回到实际的移动。
【问题讨论】:
-
存储每个合法移动的实际移动。
-
其实你应该已经有了。如果 legalMoves 正在存储引用(我怀疑是这样),那么您已经拥有对原始移动的引用。
标签: haskell