首先:这是不关于如何让节目连续播放的问题。去过那里,做到了。
我已经制作了一个五行的游戏作为试验基因改进AI的框架(哎呀,听起来非常自命不凡)。与大多数回合制游戏一样,最佳动作是通过为每个可能的动作分配分数,然后以最高分数进行动作来决定。将分数分配给移动(正方形)的功能如下:
如果广场已有令牌,则得分为0,因为在广场上放置新令牌是违法的。
每个方格可以是最多20个不同获胜行的一部分(5个水平,5个垂直,10个对角线)。广场的得分是每一行得分的总和。
行的分数取决于行中已有的友方和敌方令牌的数量。例子:
鉴于此算法,我已声明一种名为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。我应该如何迭代地使这些变得更好?我想象这样的事情:
这似乎不起作用。大脑并没有变得更聪明。为什么呢?
分数方法是否应该为结果添加一些小的随机值,以便同一个两个大脑之间的两场比赛会有所不同?每次迭代的值应该改变多少?应该如何初始化“大脑”?有恒定的价值?随机值?
此外,这是否任何与AI或遗传算法有关?
PS:这个问题与五连胜无关。这只是我选择的东西,因为我可以宣布一个非常简单的“大脑”进行实验。
答案 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实验。