Neuroph发布了NEAT实施预览(https://sourceforge.net/projects/neuroph/files/NEAT-preview/)。我想尝试用它来创建一个XOR门(一个常见的尝试)。但由于某种原因,它不起作用。这是我使用的代码:
首先我创建了属性:
SimpleNeatParameters params = new SimpleNeatParameters();
params.setFitnessFunction(new Fitness());
params.setPopulationSize(150);
params.setMaximumFitness(16);
params.setMaximumGenerations(100);
健身给出了这样得分的双重值:
net.setInput(0, 0);
net.calculate();
fitness += (1 - net.getOutput().get(0)) * 4;
net.setInput(1, 0);
net.calculate();
fitness += net.getOutput().get(0) * 4;
等等。这个想法是,如果你做对了,你会获得更多,最多四个。
然后输入基因:
NeuronGene inputOne = new NeuronGene(NeuronType.INPUT, params);
NeuronGene inputTwo = new NeuronGene(NeuronType.INPUT, params);
NeuronGene output = new NeuronGene(NeuronType.OUTPUT, params);
然后告诉它进化:
Evolver e = Evolver.createNew(params, Arrays.asList(inputOne, inputTwo), Arrays.asList(output));
Organism best = e.evolve();
NeuralNetwork nn = params.getNeuralNetworkBuilder().createNeuralNetwork(best);
然后尝试了,我得到了这些结果:
0, 0: 0.6129870845620041
1, 0: 0.6492975506882983
0, 1: 0.6527754436728792
1, 1: 0.6530807065677073
那发生了什么事?我尝试增加人口,终端一代,但没有任何作用。我做错了吗?
答案 0 :(得分:0)
我不是Neuroph的专家,但也许是其中之一:
您是否设置了选择器?
NaturalSelectionOrganismSelector selector = new NaturalSelectionOrganismSelector();
selector.setKillUnproductiveSpecies(true);
params.setOrganismSelector(selector);
在示例xor测试中,它们对错误进行了平方。我不明白为什么会导致问题,但谁知道呢?
他们还会在每次调用健身功能时重置神经网络。