2016-08-27 8 views
0

私はルアで神経進化系に取り組んでいます。ネットワークの世代を作るとき、私は様々な新しい子供のネットワークを作成するために親ネットワークを何度も変えます。コードは次のようになります:突然変異型ニューラルネットワークが期待通りに進まない

function MutateNetwork(net) 

     for i=2,#net.neurons do 
      for j=1,#net.neurons[i] do 
       --Mutate Bias 
       if (math.random()) > 0.30 then 
        mut = (math.random() - 0.5) * 2 
        net.neurons[i][j].bias = net.neurons[i][j].bias + mut 
       end 

       --Mutate Weight 
       for o=1,#net.neurons[i][j].connections do 
        if (math.random()) > 0.30 then 
         mut = (math.random() - 0.5) * 2 
         net.neurons[i][j].connections[o].weight = net.neurons[i][j].connections[o].weight + mut 
        end 
       end 
      end 
     end 

     return net 

    end 

    function CreateGeneration(parent) 
     local gen = {} 

     for i=1,childCount do 
      gen[i] = MutateNetwork(parent) 
     end 

     return gen 
    end 

CreateGeneration()関数を実行した後、私は予想通り、新たなネットワークの配列を得るが、変異の全てが完全に同一です。私は間違って何をしていますか?

答えて

2

あなたはすべての子供に同じネットワークを使用しています。実際、それは親と同じネットワークです。おそらくあなたは、新しい機能DuplicateNetworkは、ネットワークの深いコピーを作成

gen[i] = MutateNetwork(DuplicateNetwork(parent)) 

ような何かを行う必要があります。

関連する問題