Algorithm “我应该使用什么算法?”;遗传人工智能改进“;

Algorithm “我应该使用什么算法?”;遗传人工智能改进“;,algorithm,artificial-intelligence,genetic-algorithm,Algorithm,Artificial Intelligence,Genetic Algorithm,首先:这不是一个如何让一个程序连续播放五个节目的问题。我去过那里,做过那件事 介绍性解释 我已经做了一个五连胜的游戏作为一个框架来试验基因改良人工智能(哎哟,听起来太自命不凡了)。与大多数回合制游戏一样,最佳移动是通过为每一个可能的移动指定一个分数,然后以最高分数进行移动来决定的。将分数分配给移动(正方形)的函数如下所示: 如果正方形已经有一个标记,分数为0,因为在正方形中放置新标记是非法的 每个方块可以是多达20个不同中奖行(5个水平、5个垂直、10个对角线)的一部分。正方形的分数是每一行的分

首先:这不是一个如何让一个程序连续播放五个节目的问题。我去过那里,做过那件事

介绍性解释 我已经做了一个五连胜的游戏作为一个框架来试验基因改良人工智能(哎哟,听起来太自命不凡了)。与大多数回合制游戏一样,最佳移动是通过为每一个可能的移动指定一个分数,然后以最高分数进行移动来决定的。将分数分配给移动(正方形)的函数如下所示:

  • 如果正方形已经有一个标记,分数为0,因为在正方形中放置新标记是非法的

  • 每个方块可以是多达20个不同中奖行(5个水平、5个垂直、10个对角线)的一部分。正方形的分数是每一行的分数之和

  • 一行的分数取决于该行中已有的友方和敌方代币的数量。示例:

    • 一行有四个友方代币应该有无限的分数,因为如果你在那里放置一个代币,你就赢了游戏
    • 连续使用四个敌方代币的分数应该非常高,因为如果你不在那里放置代币,对手将在下一回合获胜
    • 同时拥有友军和敌军标识的一行将获得0分,因为这一行永远不能成为获胜行的一部分
  • 根据此算法,我声明了一个名为TBrain的类型:

    type
      TBrain = array[cFriendly..cEnemy , 0..4] of integer; 
    
    数组中的值表示一行的分数,该行有N个友方令牌和0个敌方令牌,或0个友方令牌和N个敌方令牌。如果一行中有5个代币,则由于该行已满,因此不得分

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

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

    玩家2应该将他的代币放在(9,4)中,以赢得比赛,而不是放在(4,4)中,即使他会阻止玩家1的8个潜在获胜行。因此,vBrain[1,4]应该是(vBrain[0,4]/8)-1。像这样工作,我们可以找到“大脑”的最佳值,但同样,这不是我感兴趣的。我想要一个算法来找到最好的值

    我已经实现了这个框架,所以它是完全确定的。分数中没有随机添加的值,如果几个正方形的分数相同,则将选择左上角

    实际问题 这就是导言,现在是有趣的部分(至少对我来说)

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

  • 使用随机值初始化vBrain1和vBrain2
  • 模拟他们之间的游戏
  • 将赢家的值分配给输家,然后随机稍微更改其中一个值
  • 这似乎不管用。大脑不会变得更聪明。为什么?

    计分法是否应该在结果中加入一些小的随机值,使同一两个大脑之间的两个游戏不同?每个迭代的值应该改变多少?“大脑”应该如何初始化?用常量值?随机值

    此外,这与人工智能或遗传算法有任何关系吗


    附言:这个问题与连续五次无关。这只是我选择的东西,因为我可以声明一个非常简单的“大脑”来进行实验。

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

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

    我喜欢这个教程。

    (它使用Python作为示例,但理解它们并不困难)

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

    此外,如果你看不到任何进化的进展,你可能需要的不仅仅是赢/输,而是想出某种积分系统,这样你就可以更有效地对整个群体进行排序,从而使选择更容易。

    看看(整洁)。这是一个奇特的首字母缩略词,基本上意味着神经网络的进化——它们的结构(拓扑)和连接权重。我编写了一个名为SharpNEAT的.Net实现,您可能希望了解它。SharpNEAT V1也有一个Tic-Tac-Toe实验


    我已经用神经网络连续写了一篇四篇文章。(这真的很糟糕!)你对代码和我为学校所做的关于它的工作感兴趣吗?视情况而定。是真的,真的很糟糕,还是仅仅是真的很糟糕?:-)说真的,我对神经网络一无所知,我觉得这对我来说太复杂了。无论如何,谢谢:-)我不相信你的“vBrain”是足够的:它不会将行“111222”等同于“121212”吗?两者在战略上截然不同。另外,在你的示例板中,在(4,4)中启用或阻止了8组以上的5场比赛。@Nick:你是正确的,(4,4)会阻止更多的8场胜利,但关键是大脑[1,4]必须足够低于[0,4],因此AI不应该宁愿阻止两场敌人的胜利而不是自己的胜利。111222不等于121212。首先,应该有一个空牢房。考虑水平行“1.11x1.2”。“X”位置可以是5个获胜行的一部分:1.11x、.11x1、11x1、1x1.2和x1.2,每个人都会在总数中增加一个分数。对,但是大脑[1,4]必须远远小于1/8,因为(4,4)的分数将远远大于8。不是cl
      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.