如何减少 NEAT 中的物种数量?

人工智能 进化算法 整洁的
2021-11-11 12:17:50

我正在使用以下库: https ://github.com/vishnugh/evo-NEAT

这似乎是一个非常简单的 NEAT 实现。因此我使用以下配置:

package com.evo.NEAT.com.evo.NEAT.config;

/**
 * Created by vishnughosh on 01/03/17.
 */
public class NEAT_Config {

    public static final int INPUTS = 11;
    public static final int OUTPUTS = 2;
    public static final int HIDDEN_NODES = 100;
    public static final int POPULATION =300;

    public static final float COMPATIBILITY_THRESHOLD = Float.MAX_VALUE;
    public static final float EXCESS_COEFFICENT = 1;
    public static final float DISJOINT_COEFFICENT = 1;
    public static final float WEIGHT_COEFFICENT = 5;

    public static final float STALE_SPECIES = 2;


    public static final float STEPS = 0.1f;
    public static final float PERTURB_CHANCE = 0.9f;
    public static final float WEIGHT_CHANCE = 0.5f;
    public static final float WEIGHT_MUTATION_CHANCE = 0.5f;
    public static final float NODE_MUTATION_CHANCE = 0.1f;
    public static final float CONNECTION_MUTATION_CHANCE = 0.1f;
    public static final float BIAS_CONNECTION_MUTATION_CHANCE = 0.1f;
    public static final float DISABLE_MUTATION_CHANCE = 0.1f;
    public static final float ENABLE_MUTATION_CHANCE = 0.2f ;
    public static final float CROSSOVER_CHANCE = 0.1f;

    public static final int STALE_POOL = 10;
}

但是,种类太多了(大约 60 种)。我不知道如何减少这个数字,因为 COMPATIBILITY_THRESHOLD 已经最大化。

那我的错是什么?

注意:我没有使用:http ://nn.cs.utexas.edu/keyword?stanley:ec02 ,因为这个算法似乎在不断变化的环境中不起作用(健身几乎没有变化)

2个回答

随着突变机会的增加,您的物种数量将增加。这是因为在每一代中,都会发生如此多的基因突变,以至于它们彼此几乎没有相似之处,并且距离函数不考虑历史标记/创新数字。

尝试降低突变率。

下面是从这里开始的距离函数第 110 页

δ=c1EN+c2DN+c3W¯.

如果您的适应度变化很大,请尝试对每个物种的适应度进行排名,并根据其排名设置生存机会。

如果您的意思是通过改变环境来获得较大的动作空间,您可以将输出节点的数量设置为动作的总数,并对每个动作进行排序,从最佳到最差,然后为该状态选择最佳可用动作。

如果兼容性距离结果是 > float.max,这告诉我该计算可能有问题,我建议设置断点并调试该代码,我通常将阈值设置为 5-10,并且可以明显判断何时当我将阈值移动到 10 时物种大小的变化