Sve*_*sli 7 algorithm artificial-intelligence genetic-algorithm
首先:这不是关于如何让节目连续播放的问题.去过也做过.
我做了一个五行的游戏作为一个框架,试验基因改进AI(哎呀,这听起来非常自命不凡).与大多数回合制游戏一样,最佳动作是通过为每个可能的动作分配分数,然后以最高分数进行动作来决定.将分数分配给移动(正方形)的功能如下:
如果正方形已有令牌,则得分为0,因为在正方形中放置新令牌是非法的.
每个方格可以是多达20个不同获胜行的一部分(5个水平,5个垂直,10个对角线).平方的得分是这些行中每一行的得分之和.
连续得分取决于行中已有的友方和敌方令牌的数量.例子:
鉴于此算法,我已经声明了一个名为TBrain的类型:
type
TBrain = array[cFriendly..cEnemy , 0..4] of integer;
Run Code Online (Sandbox Code Playgroud)
数组中的值表示具有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.
Run Code Online (Sandbox Code Playgroud)
玩家2应该将他的令牌放入(9,4),赢得游戏,而不是(4,4),即使他会阻止玩家1的8个潜在获胜行.Ergo,vBrain [1,4]应该是(vBrain) [0,4]/8)-1.像这样工作,我们可以找到"大脑"的最佳值,但同样,这不是我感兴趣的.我想要一个算法来找到最佳值.
我已经实现了这个框架,因此它完全是确定性的.分数中没有添加随机值,如果几个方格具有相同的分数,则会选择左上角.
这是介绍,现在到有趣的部分(对我来说,至少)
我有两个"大脑",vBrain1和vBrain2.我应该如何迭代地使这些变得更好?我想象这样的事情:
这似乎不起作用.大脑并没有变得更聪明.为什么?
分数方法是否应该为结果添加一些小的随机值,以便同一个两个大脑之间的两场比赛会有所不同?每次迭代的值应该改变多少?应该如何初始化"大脑"?有恒定的价值?随机值?
此外,这与AI或遗传算法有什么关系吗?
PS:这个问题与五连胜无关.这只是我选择的东西,因为我可以宣布一个非常简单的"大脑"进行实验.
小智 7
如果你想像遗传算法那样处理这个问题,你将需要一整群"大脑".然后相互评估,每种组合或使用锦标赛风格.然后选择人口的前X%并将其用作下一代的父母,其中后代通过突变(您有)或遗传交叉(例如,在两个"大脑"之间交换行或列)来创建.
此外,如果你没有看到任何进化的进展,你可能需要的不仅仅是赢/输,而是想出一些点系统,这样你就可以更有效地对整个人群进行排名,这使选择变得更容易.