我正在教孩子编程,并且正在介绍一些基本的人工智能概念。首先,我们将实施一个搜索整个游戏树的井字游戏,因此可以完美地播放。一旦我们完成了,我想将相同的概念应用于具有太多位置的游戏来评估每一个,所以我们需要实现一个启发式来评估中间位置。
我能想到的最好的事情是Dots and Boxes。它的优点是我可以设置任意大的棋盘大小以阻止他搜索整个树,我可以制作一个非常基本的评分函数,即我的盒子数量减去对手盒子的数量。不幸的是,这意味着在游戏开始的大部分时间里,每个位置的评分等级为0,因为在玩家真正开始制作盒子之前需要花费很多时间。
有没有人对游戏有更好的想法? (或点和框的更好的评分功能)?
答案 0 :(得分:7)
另一种游戏选择可能是Reversi又名奥赛罗。
天真的启发式方法是简单地计算每次有效移动所获得的瓦片数量并选择最大值。从那里你可以考虑到董事会的位置,并最大限度地减少对手的脆弱性。
答案 1 :(得分:7)
您可以考虑的一个游戏是Connect Four。简单的游戏,简单的规则,但更复杂的Tic-Tac-Toe。
答案 2 :(得分:3)
Checkers会让你教几种方法。简单的前瞻,深度搜索最佳案例 - 最坏情况决策,短期和长期收益之间的差异,以及他们在学习了您想要教授他们的内容后可以继续努力的事情。
就我个人而言,我认为最后一点是最关键的 - 人工智能开发中有一些自然要点可以很好地停下来,看看你是否可以击败它,然后深入研究更深层的AI机制。它让你的学生感兴趣而不会感到非常沮丧,如果他们想继续这个项目,就可以让他们自己做更多的事情。
答案 3 :(得分:2)
Reversi怎么样?根据件数,边缘件数和角件数量,它具有非常好的启发式空间。
答案 4 :(得分:2)
Mancala怎么样?每回合只有6次可能的动作,并且很容易计算每个动作的得分,但重要的是要考虑对手的反应,并且游戏树变得非常快。
答案 5 :(得分:2)
Gomoku是一个很好的,简单的游戏,有趣的是为AI编写。
答案 6 :(得分:2)
Rubik's Infinity非常有趣,它有点像Connect Four,但略有不同。获得一个位置非常容易。
我把一个Perl脚本拼凑起来玩了一会儿,实际上不得不减少它前面的移动次数,或者每次都击败我,通常用相当惊人的策略。
答案 7 :(得分:1)
Four in a line足够辛苦,但很容易想出一个简单的工作评估功能,例如,距离我最长线的四个距离 - 距离对手最长线的四个距离
答案 8 :(得分:1)
我真的很喜欢Connect Four。使用Minimax算法很容易编程。一个好的评估功能可能是:
eval_score = 0
for all possible rows/lines/diagonals of length 4 on the board:
if (#player_pieces = 0) // possible to connect four here?
if (#computer_pieces = 4)
eval_score = 10000
break for loop
else
eval_score = eval_score + #computer_pieces
(less pieces to go -> higher score)
end if
else if (#player_pieces = 4)
eval_score = -10000
break for loop
end if
end for
要改进程序,您可以添加:
答案 9 :(得分:0)
如何使用已添加的随机线开始您的Dots and Boxes游戏。这可以让您快速进入操作。只需要确保你不用任何盒子开始游戏。
答案 10 :(得分:0)
看看Go。
更新:提到了reversi,这是Go的简化版本。可能是一个更好的选择。
答案 11 :(得分:0)
关于更好的点和盒子启发式,我建议查看游戏的在线策略指南。 Google上用于“点和盒策略”的first result非常有用。
知道如何使用链规则将OK玩家与好玩家区分开来。知道链条规则何时会对你起作用是最好的球员和好球员之间的区别。