geneticDifference method

num geneticDifference(
  1. Genome g2
)

Implementation

num geneticDifference(Genome g2) {
  var g1 = this;
  int maxConnections = max(g1.connections.length, g2.connections.length);
  if (maxConnections == 0) {
    return 0;
  }
  int connectionDifference = 0;
  num weightDifference = 0;
  for(var conn1 in g1.connections) {
    if (g2.connections.any((c) => c.identifier == conn1.identifier)) {
      var conn2 = g2.connections.singleWhere((c) => c.identifier == conn1.identifier);
      if (conn1.enabled && conn2.enabled) {
        weightDifference += (conn1.weight - conn2.weight).abs();
      } else {
        connectionDifference++;
      }
    } else {
      connectionDifference++;
    }
  }
  for(var conn2 in g2.connections) {
    if (!g1.connections.any((c) => c.identifier == conn2.identifier)) {
      connectionDifference++;
    }
  }
  return connectionDifference / maxConnections + weightDifference;
}