我正在研究Lua的神经进化系统。在创建一代网络时,我多次改变父网络以创建各种新的子网络。代码如下:
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()函数后,我按预期获得了一系列新网络,但所有突变完全相同。我做错了什么?
答案 0 :(得分:2)
您正在为所有孩子使用相同的网络。实际上,它与父母是同一个网络。也许你应该做点像
gen[i] = MutateNetwork(DuplicateNetwork(parent))
新功能DuplicateNetwork
制作网络的深层副本。