Language agnostic 有哪些游戏使用相当简单的试探法来评估位置?

Language agnostic 有哪些游戏使用相当简单的试探法来评估位置?,language-agnostic,artificial-intelligence,heuristics,Language Agnostic,Artificial Intelligence,Heuristics,我正在教一个孩子编程,现在我正在介绍一些基本的人工智能概念。首先,我们将实现一个tic-tac-toe游戏,它搜索整个游戏树,因此玩得非常完美。一旦我们完成了,我想把同样的概念应用到一个有太多位置的游戏中去评估每一个位置,所以我们需要实现一个启发式来评估中间位置 我能想到的最好的事情就是。它的优点是,我可以设置任意大的棋盘大小,以阻止他搜索整个树,并且我可以制作一个非常基本的得分函数,即我的方块数减去对手方块数。不幸的是,这意味着在游戏开始的大部分时间里,每个位置的得分都是0,因为在玩家真正开始

我正在教一个孩子编程,现在我正在介绍一些基本的人工智能概念。首先,我们将实现一个tic-tac-toe游戏,它搜索整个游戏树,因此玩得非常完美。一旦我们完成了,我想把同样的概念应用到一个有太多位置的游戏中去评估每一个位置,所以我们需要实现一个启发式来评估中间位置

我能想到的最好的事情就是。它的优点是,我可以设置任意大的棋盘大小,以阻止他搜索整个树,并且我可以制作一个非常基本的得分函数,即我的方块数减去对手方块数。不幸的是,这意味着在游戏开始的大部分时间里,每个位置的得分都是0,因为在玩家真正开始制作盒子之前,需要相当多的动作


有人对游戏有更好的想法吗?(或更好的点和框评分功能)?

如何?它有一个非常好的启发式空间,基于片段数、边片段数和角片段数

用已经添加的随机线开始游戏怎么样。这可以让你迅速采取行动。只需确保游戏开始时没有任何盒子。

另一个游戏选择可能是aka Otherlo

一个简单的启发式方法是简单地计算每个有效移动获得的瓷砖数量,然后选择最大的。从那里你可以考虑到棋盘的位置,并尽量减少对手的弱点。

看看围棋

  • 在非常小的电路板上对孩子来说足够简单
  • 复杂性无限扩展
  • 拥有大量可用的论文、算法和程序,可作为量表或基础

更新:提到reversi,它是Go的简化变体。也许是一个更好的选择。

你可以考虑的一个游戏是。简单的游戏,规则简单,但比井字游戏更复杂。

足够难,但很容易得到一个简单的评估函数,例如,(距离我的最长线到四米-距离我对手的最长线到四米)

怎么样?每个回合只有6个可能的动作,很容易计算出每个人的得分,但是考虑对手的反应是很重要的,游戏树变的相当快。

是一个很好的简单游戏,有趣的是写AI。

< P>检查者会教你几种方法。简单的前瞻,深入搜索最佳情况和最坏情况下的决策,短期收益和长期收益之间的差异,以及他们在学习了你想教给他们的东西后可以继续努力的东西

就我个人而言,我认为最后一点是最关键的——人工智能开发中有一些自然点可以停下来,看看你是否能战胜它,然后深入研究更深层的人工智能机制。它可以让你的学生保持兴趣,而不会感到极度沮丧,如果他们想继续这个项目,还可以让他们自己做更多的事情。

很有趣,它有点像“连接四个”,但有细微的不同。评估一个职位很容易


不久前,我拼凑了一个Perl脚本来玩它,事实上,我不得不减少它要看的动作数,或者每次它都打败我,通常是用非常令人惊讶的策略。

关于点和框的更好启发,我建议看一下游戏的在线策略指南。谷歌的“点和框战略”非常有用


知道如何使用链式规则可以区分好玩家和好玩家。知道什么时候链式规则会对你不利是区分优秀球员和优秀球员的关键。

我真的很喜欢Connect Four。非常容易编程使用极小极大算法。良好的评价功能可以是:

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
要改进程序,您可以添加:

  • 如果计算机先移动,在中间列中播放(这已被证明是最佳的)
  • α-β修剪
  • 移动顺序
  • 佐布里斯特散列

  • 嗯,曼卡拉看起来很简单。。。我不知道为什么我没有想到那个。谢谢。我也喜欢这一个,它看起来几乎一样,但比建议的连接四个要有趣一点。这个问题似乎离题了,因为它不在帮助中心描述的讨论范围内。