小编Ben*_* Wo的帖子

遗传算法/ w神经网络玩蛇没有改进

我正在尝试创建一个遗传算法来训练神经网络,目标是玩游戏蛇.

我遇到的问题是世代的适应性没有提高,它要么仍然保持在不给游戏任何输入的健身,或者只是在第一代之后变得更糟.我怀疑它是神经网络的一个问题,但我不知道它是什么.

神经网络设置

24输入节点

2隐藏层

每层8个节点

4个输出节点(蛇可以采取的每个方向一个)

输入是蛇可以看到的每个方向的数组.对于每个方向,它检查距离与墙壁,水果或其自身的距离.最终结果是一个长度为的数组3*8 = 24.

权重和偏差是在创建网络时生成的-1到1之间的随机浮点数.

遗传算法设置

人口规模:50000

每代选择的父母:1000

每代保持最高:25000(新变量,看到更好的结果)

每个孩子的突变几率:5%

(我尝试了很多不同的尺寸比例,虽然我还不确定它的典型比例是多少.)

我正在使用单点交叉.每一组重量和偏差都在父母之间交叉,并传递给孩子(交叉的每个"版本"一个孩子).

我正在使用我认为轮盘选择来选择父母,我将在下面发布确切的方法.

蛇的适应性计算如下age * 2**score:(不再是更新中的更多信息),其中年龄是蛇存活了多少圈,而得分是它收集的果实数量.

细节

下面是一些伪代码,试图总结我的遗传算法(应该)如何工作:

pop = Population(size=1000)

while True:  # Have yet to implement a 'converged' check
    pop.calc_fitness()

    new_pop = []

    for i in range(n_parents):

        parent1 = pop.fitness_based_selection()
        parent2 = pop.fitness_based_selection()

        child_snake1, child_snake2 = parent1.crossover(parent2)

        if rand() <= mutate_chance:
            child_snake.mutate()

        new_pop.append(child_snake1, child_snake2)

    pop.population = new_pop

    print(generation_statistics)
    gen += 1
Run Code Online (Sandbox Code Playgroud)

这是我用来选择父级的方法:

def …
Run Code Online (Sandbox Code Playgroud)

python neural-network genetic-algorithm python-3.x unsupervised-learning

23
推荐指数
1
解决办法
1831
查看次数