首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >博弈AI遗传算法中的适应度函数估计

博弈AI遗传算法中的适应度函数估计
EN

Stack Overflow用户
提问于 2017-11-28 15:20:44
回答 1查看 395关注 0票数 1

我已经创建了一个Gomoku(连续5) AI使用阿尔法-贝塔剪枝。它在一个不那么愚蠢的层面上做出了一些举动。首先,让我模糊地描述α-Beta算法的分级函数.

当它收到一个板作为输入,它首先发现所有重复的石头,并给它一个分数的4个可能的值取决于它的有用性作为一个威胁,这是由长度决定的。它将返回所有重复分数的总和。

但是,问题是我明确地决定了分数(总共4分),而且他们似乎不是最好的选择。所以我决定用遗传算法来生成这些分数。每一个基因都将是4个分数中的一个。例如,硬编码分数的染色体是: 5,400,10,000,50000。

然而,由于我使用遗传算法来创建评分函数的分数,我不知道该如何实现遗传适应度函数。因此,我想到了以下几点:

而不是使用适应度函数,我只是将选择过程合并在一起,如果我有2条染色体,A和B,并且需要选择一条,我将模拟一个游戏,在每个AI中同时使用A和B染色体,然后选择获胜的染色体。

1.这是否是替代健身功能的可行办法?

2.由于Alpha-Beta算法的特点,我需要给出获胜条件的最大得分,在大多数情况下,该条件被设置为无穷大。然而,由于我不能使用无限,我只是使用了一个荒谬的大数字。我还需要把这个分数加到染色体上吗?或者因为它是微不足道的,不改变评分函数的值,把它作为一个常量?

3.在最初创建染色体时,随机产生、遵循标准分布被认为是最优的。然而,在我的例子中,基因有很大的偏差。随机产生染色体还可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-30 09:47:46

这是一个可行的替代健身功能吗?

是的,是这样的。这是一个相当常见的方式来定义一个健身功能的棋盘游戏。也许一轮是不够的(但你必须做实验)。

一个微小的变体类似于:

代码语言:javascript
复制
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.在最初创建染色体时,随机产生、遵循标准分布被认为是最优的。然而,在我的例子中,基因有很大的偏差。随机产生染色体还可以吗?

这在某种程度上与您将要使用的特定遗传算法“味道”有关。

一个标准的遗传算法可以更好地工作在不完全随机初始值的情况下。

其他变体(如差异进化)对这方面可能不那么敏感。

还请看一下这个问题/答案:Getting started with machine learning a zero sum game?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47535008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档