GA 可以通过相互“战斗”来确定适合度吗?

人工智能 神经网络 机器学习 遗传算法
2021-10-24 05:14:05

我正在以 NEAT 的形式开发 AI,它已经通过了某些任务,例如NEAT 研究论文中概述的 XOR 问题。在 XOR 问题中,网络的适应度由现有函数(在本例中为 XOR)确定。它还通过了另一项测试。我开发的一种方法是以弧度为单位确定某个点 X 的正弦值。它也有效,但同样,它的适应度是由现有函数(sin (x))决定的。

我最近一直在训练它玩井字游戏。我决定要确定它的适应度,它将与一个“愚蠢”的 AI 对抗,将 O 放置在网格上的随机位置,并根据它是否将 X 放置在有效位置来获得适应度(如果放置 X 则失去适应度在另一个 X 或 O 之上),如果它战胜了“愚蠢”的 AI,它会获得很多的适应度。这会起作用,但是当一个网络真的很幸运并且“愚蠢的”人工智能将 O 放置在不切实际的位置时,该网络将获胜并获得大量适应度,使得另一个网络很难击败该适应度。因此,学习过程不起作用,我无法生成实际上运行良好的井字游戏网络。

我不希望 GA 基于“智能”井字游戏 AI 进行学习,因为我训练这个 GA 的全部目的是让我不必首先制造 AI。我希望它能够自行学习规则,而无需我对 AI 进行硬编码以使其非常擅长。

所以,我开始思考,我认为如果一个网络的适应性可以根据它与其他网络在其一代中的表现来确定,那将会很有趣。这看起来确实类似于人类学习下棋的方式,因为我通过与其他人下数百次下棋,从错误中吸取教训,我的朋友也提高了下棋的能力。如果 GA 这样做,那意味着我不必编写 AI 来玩游戏(事实上,我也不必编写“愚蠢”的 AI,我只需对规则进行硬编码游戏,显然)。

我的问题是:

  1. GA 是否有任何研究或结果是基于相互竞争来确定他们的健康状况?我做了一些搜索,但我不知道首先要寻找什么(搜索“NEAT争斗”效果不佳:-()

  2. 这种训练 GA 的方法看起来实用吗?这对我来说似乎很实用,但这有什么潜在的缺点吗?GA 的意思是只计算存在的预定函数,还是它们有学习和做一些决策的潜力?

  3. 如果我要这样做,如何确定健康状况?比如说,对于井字游戏的例子,是否应该根据网络是否将其 X 或 O 放置在可行的位置来确定适应度,如果它获胜则增加适应度,如果失败则减去适应度?把比赛绑起来怎么办?

  4. 同一物种的网络是否应该相互竞争?如果他们这样做了,那么从一开始就拥有物种似乎是不切实际的,因为同一物种中的网络相互竞争不会让一个成功的物种上升到顶端,因为它会相互竞争。

  5. 有点跑题了,但是根据我对井字游戏 GA 的最初想法,是否有更好的方法来确定适合度?创建智能 AI 是训练 GA 的最佳方式吗?

感谢您抽出宝贵时间,因为这有点冗长,并感谢您的反馈!

3个回答

我是一个 Javascript 神经进化库Neataptic的主要开发者。

  1. 非常有效的!意识到现实生活中的进化也是这样发生的:我们不断改进以对抗其他物种,这也迫使它们也改进。

  2. 非常实用,特别是如果你不想像你说的那样设置任何“规则”,它会让基因组找出规则本身。

  3. 基本上,你让种群中的每个基因组与其他基因组进行 X 游戏,我建议你让每个基因组与种群中的每个其他基因组进行游戏。得分的一个例子是1为获胜0.250.5平局给出基因组分数。每场比赛都应该有一个结果!

  4. 我不确定这个,因为我还没有实施物种形成。

我想给你一些我做过的例子:

  • Agar.io AI(神经进化的神经代理)——基本上,我让神经网络进化,通过相互竞争,在 agar.io 中获得最高分!它比我预期的要好。

  • 目前我正在开发新项目,一种“警察和强盗”风格的游戏。

一般概念是“竞争性共同进化”,有许多(可能数百篇)描述各种替代方案的学术论文。

优秀的(并且免费提供的)元启发式基础有一个关于这个主题的完整章节。

查找锦标赛选择 锦标赛选择是一种在遗传算法中从个体群体中选择个体的方法。 [1] 比赛选择涉及在从人群中随机选择的几个个体(或“染色体”)中运行几个“比赛”。每场比赛的获胜者(体能最好的那个)被选为交叉赛。选择压力是一种基于参与者选择池大小的染色体参与锦标赛可能性的概率度量,可以通过更改锦标赛规模轻松调整[为什么?]。如果锦标赛规模较大,则较弱的个人被选中的机会较小,因为如果选择较弱的个人参加锦标赛,则较强的个人也很有可能参加该锦标赛。