我应该使用什么算法进行“遗传AI改善”

时间:2009-09-24 11:46:50

标签: algorithm artificial-intelligence genetic-algorithm

首先:这是关于如何让节目连续播放的问题。去过那里,做到了。

介绍性解释

我已经制作了一个五行的游戏作为试验基因改进AI的框架(哎呀,听起来非常自命不凡)。与大多数回合制游戏一样,最佳动作是通过为每个可能的动作分配分数,然后以最高分数进行动作来决定。将分数分配给移动(正方形)的功能如下:

  1. 如果广场已有令牌,则得分为0,因为在广场上放置新令牌是违法​​的。

  2. 每个方格可以是最多20个不同获胜行的一部分(5个水平,5个垂直,10个对角线)。广场的得分是每一行得分的总和。

  3. 行的分数取决于行中已有的友方和敌方令牌的数量。例子:

    • 有四个友方令牌的行应该有无限分数,因为如果你在那里放置一个令牌,你就赢了游戏。
    • 具有四个敌人标记的行的分数应该非常高,因为如果你在那里放置一个标记,那么对手将在下一回合获胜
    • 包含友方和敌方令牌的行将得0,因为此行永远不会成为获胜行的一部分。
  4. 鉴于此算法,我已声明一种名为TBrain的类型:

    type
      TBrain = array[cFriendly..cEnemy , 0..4] of integer; 
    

    数组中的值表示具有N个友好令牌和0个敌人令牌的行的分数,或0个友好令牌和N个敌人令牌。如果连续有5个令牌,则因为该行已满,所以没有得分。

    实际上很容易确定数组中应该包含哪些值。 Brain [0,4](四个友方代币)应该是“无限”,让我们称之为1.000.000。 vBrain [1,4]应该非常高,但不要太高,以至于大脑更愿意阻止几个敌人胜利而不是自我胜利

    以下(不可能的)董事会:

      0123456789
     +----------
    0|1...1...12
    1|.1..1..1.2
    2|..1.1.1..2
    3|...111...2
    4|1111.1111.
    5|...111....
    6|..1.1.1...
    7|.1..1..1..
    8|1...1...1.
    

    玩家2应该将他的代币放入(9,4),赢得游戏,进入(4,4),即使他会阻止玩家1的8个潜在获胜行.Ergo, vBrain [1,4]应该是(vBrain [0,4] / 8)-1。像这样工作,我们可以找到“大脑”的最佳值,但同样,这是我感兴趣的东西。我希望算法找到最佳值

    我已经实现了这个框架,因此它完全是确定性的。分数中没有添加随机值,如果几个方格具有相同的分数,则会选择左上角。

    实际问题

    这就是引言,现在是有趣的部分(对我来说,至少)

    我有两个“大脑”,vBrain1和vBrain2。我应该如何迭代地使这些变得更好?我想象这样的事情:

    1. 使用随机值初始化vBrain1和vBrain2。
    2. 模拟他们之间的游戏。
    3. 将胜者的值分配给失败者,然后稍微随机更改其中一个。
    4. 这似乎不起作用。大脑并没有变得更聪明。为什么呢?

      分数方法是否应该为结果添加一些小的随机值,以便同一个两个大脑之间的两场比赛会有所不同?每次迭代的值应该改变多少?应该如何初始化“大脑”?有恒定的价值?随机值?

      此外,这是否任何与AI或遗传算法有关?

      PS:这个问题与五连胜无关。这只是我选择的东西,因为我可以宣布一个非常简单的“大脑”进行实验。

3 个答案:

答案 0 :(得分:7)

如果你想像遗传算法一样处理这个问题,你将需要一整群“大脑”。然后相互评估,每种组合或使用锦标赛风格。然后选择人口的前X%并将其用作下一代的父母,其中后代是通过突变(你有)或遗传交叉(例如,在两个“大脑之间交换行或列”)创建的。

此外,如果你没有看到任何进化进展,你可能需要的不仅仅是赢/输,而是想出一些点数系统,这样你就可以更有效地对整个人群进行排名,这使得选择变得更容易。 / p>

答案 1 :(得分:4)

一般来说,是的,你可以通过使用遗传算法技术使大脑更聪明。

随机性或突变在遗传编程中起着重要作用。

我喜欢这个教程,Genetic Algorithms: Cool Name & Damn Simple (它使用Python作为示例,但理解它们并不难)

答案 2 :(得分:3)

看看Neuro Evolution of Augmenting Tologies(NEAT)。一个花哨的首字母缩略词,它基本上意味着神经网络的发展 - 它们的结构(拓扑)和连接权重。我写了一个名为SharpNEAT的.Net实现,你可能希望看一下。 SharpNEAT V1也有Tic-Tac-Toe实验。

http://sharpneat.sourceforge.net/