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 }