我正在以 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,我只需对规则进行硬编码游戏,显然)。
我的问题是:
GA 是否有任何研究或结果是基于相互竞争来确定他们的健康状况?我做了一些搜索,但我不知道首先要寻找什么(搜索“NEAT争斗”效果不佳:-()
这种训练 GA 的方法看起来实用吗?这对我来说似乎很实用,但这有什么潜在的缺点吗?GA 的意思是只计算存在的预定函数,还是它们有学习和做一些决策的潜力?
如果我要这样做,如何确定健康状况?比如说,对于井字游戏的例子,是否应该根据网络是否将其 X 或 O 放置在可行的位置来确定适应度,如果它获胜则增加适应度,如果失败则减去适应度?把比赛绑起来怎么办?
同一物种的网络是否应该相互竞争?如果他们这样做了,那么从一开始就拥有物种似乎是不切实际的,因为同一物种中的网络相互竞争不会让一个成功的物种上升到顶端,因为它会相互竞争。
有点跑题了,但是根据我对井字游戏 GA 的最初想法,是否有更好的方法来确定适合度?创建智能 AI 是训练 GA 的最佳方式吗?
感谢您抽出宝贵时间,因为这有点冗长,并感谢您的反馈!