Exemplo n.º 1
0
func (d Classic) decode(g neat.Genome) (net neat.Network, err error) {

	// Identify the genes
	nodes, conns := g.GenesByPosition()

	// Create the neurons
	nmap := make(map[int]int)
	neurons := make([]network.Neuron, len(nodes))
	for i, ng := range nodes {
		nmap[ng.Innovation] = i
		neurons[i] = network.Neuron{NeuronType: ng.NeuronType, ActivationType: ng.ActivationType, X: ng.X, Y: ng.Y}
	}

	// Create the synapses
	//forward := true // Keep track of conenctions to determine if this is a feed-forward only network
	synapses := make([]network.Synapse, 0, len(conns))
	for _, cg := range conns {
		if cg.Enabled {
			//src, tgt := nodes[nmap[cg.Source]], nodes[nmap[cg.Target]]
			//forward = forward && src.Y < tgt.Y
			synapses = append(synapses, network.Synapse{
				Source: nmap[cg.Source],
				Target: nmap[cg.Target],
				Weight: cg.Weight,
			})
		}
	}

	net, err = network.New(neurons, synapses)
	return
}