2016-03-25 8 views
2

NeurophはNEATの実装(https://sourceforge.net/projects/neuroph/files/NEAT-preview/)のプレビューをリリースしました。私はそれを使ってXORゲート(一般的な試み)を作成しようとしました。しかし何らかの理由で、動作しません。これは私が使用するコードです:Neuroph NEATプレビューXORトレーニングなし

まず、私はプロパティを作成:上

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; 

ので:

SimpleNeatParameters params = new SimpleNeatParameters(); 
params.setFitnessFunction(new Fitness()); 
params.setPopulationSize(150); 
params.setMaximumFitness(16); 
params.setMaximumGenerations(100); 

フィットネスは、このように獲得してどれだけのために二重の値を与えます。アイデアは、それが正しいとすれば、あなたは最大で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

私はNeurophには専門家でないが、多分それはこれらの一つだ:

  1. あなたはセレクタを設定することがありますか?

  2. この例では、xorテストでは誤差が2乗されます。私はなぜそれが問題を引き起こすべきか分からないが、誰が知っているのだろうか?

  3. また、フィットネス機能の各呼び出しでニューラルネットワークをリセットします。

+0

悲しいことに、いずれも機能しませんでした。私はセレクターを試しました(人口の大きさはログに変化しませんでした)、私は結果を二乗して何も起こりませんでした。私もそれをリセットしようとしたが、それはどちらもうまくいかなかった。 .reset()がjavaドキュメントで行ったことを調べて、それが必要だったように見えました。 –

+0

あなたは 'Fitness extends AbstractFitnessFunction'を持っていて、フィットネスを計算する関数は' evaluate(Organism o、NeuralNetwork nn) 'ですか? @ NathanWood – JeD

+0

はい。確かに、私はいくつかのJava文書を掘り下げて、XorFitnessFunction、彼らが作ったテストを見つけました。私も同じ問題がありました。今度は、エラーがフィットネス機能からのものではないことがわかります。 –

関連する問題