我使用Alpha-Beta Pruning创建了一个Gomoku(连续5个)AI。它使得动作不是那么愚蠢。首先,让我模糊地描述Alpha-Beta算法的分级功能。
当它收到一块板作为输入时,它首先找到所有重复的石头并根据其作为威胁的有用性给出4个可能值的分数,这取决于长度。它将返回所有重复分数的总和。
但是,问题是我明确地决定了分数(总共4个),而且它们似乎不是最好的选择。所以我决定实施遗传算法来生成这些分数。每个基因将是4个分数之一。因此,例如,硬编码分数的染色体将为:[5,40000000000000,50000]
然而,因为我使用遗传算法来创建评分函数的分数,所以我不确定如何实现遗传适应度函数。所以相反,我想到了以下几点:
我没有使用适应度函数,而是将选择过程合并在一起:如果我有2条染色体,A和B,并且需要选择一条染色体,我将模拟每个使用A和B染色体的游戏AI,并选择获胜的染色体。
1.这是健身功能的可行替代品吗?
2.由于Alpha-Beta算法的特性,我需要给胜利条件赋予最大分数,在大多数情况下将其设置为无穷大。但是,因为我不能使用Infinity,所以我只使用了一个荒谬的大数字。我是否还需要将这个分数添加到染色体上?或者因为它无关紧要并且不会改变评分函数的值,所以将其保留为常数?
3.当最初创建染色体时,随机生成,遵循标准分布被认为是最优的。然而,在我的情况下,基因有很大的偏差。是否可以随机生成染色体?
答案 0 :(得分:1)
这是健身功能的可行替代品吗?
是的,确实如此。这是为棋盘游戏定义健身功能的一种相当常见的方式。可能只有一轮是不够的(但你必须进行实验)。
轻微的变体类似于:
double fitness(Agent_k)
fit = 0
repeat M times
randomly extract an individual Agent_i (i <> k)
switch (result of Agent_k vs Agent_i)
case Agent_k wins: fit = fit + 1
case Agent_i wins: fit = fit - 2
case draw: fit doesn't change
return fit
即。代理人与来自人口的M
随机选择的对手进行比赛(替换但避免自我匹配)。
增加M
噪音会减少但需要更长的模拟时间(M=5
是一些与国际象棋相关的实验中使用的值。)
2.由于Alpha-Beta算法的特点......
不确定问题。非常大的值是用于表示获胜条件的静态评估函数的标准方法。
确切的价值并不重要,不应该进行优化。
3.当最初创建染色体时,随机生成,遵循标准分布被认为是最优的。然而,在我的情况下,基因有很大的偏差。是否可以随机生成染色体?
这与特定的遗传算法有关[&34;味道&#34;你打算用。
标准遗传算法可以更好地工作,而不是完全随机的初始值。
其他变体(例如差异进化)可能对这方面不太敏感。
还要看一下这个问题/答案:Getting started with machine learning a zero sum game?