/// <summary> /// Assumption: networks has the same predefined structure /// </summary> public static NetGroup CrossOver(NetGroup a, NetGroup b) { NetGroup output = new NetGroup(a.inputLenght); bool connectionsParent = Convert.ToBoolean(Math.Round(new Random(DateTime.Now.Millisecond).NextDouble())); for (int networkIndex = 0; networkIndex < a.networks.Count; networkIndex++) { List <ConnectedNet.Connection> connections = connectionsParent? b.networks[networkIndex].Connections : a.networks[networkIndex].Connections; output.networks.Add(new ConnectedNet(TemporalNetwork.CrossOver(a.networks[networkIndex].Network, b.networks[networkIndex].Network, -1, true, connectionsParent) , connections, a.networks[networkIndex].OutputToGatherBounds)); } return(output); }
public static NetGroup FromString(string str) { string[] parameters = str.Replace("={", "").Split(new string[] { "}" }, StringSplitOptions.RemoveEmptyEntries); int inCount = Convert.ToInt32(parameters[0].Replace("inCount", "")); List <int> exeOrder = StringParser.StringToIntList(parameters[1].Replace(" exeOrder", "")); List <int> outputIndex = StringParser.StringToIntList(parameters[2].Replace(" outputIndexes", "")); List <ConnectedNet> nets = new List <ConnectedNet>(); string[] connectedNets = parameters[3].Split(new string[] { "\n\nconNet:\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var connectedNet in connectedNets) { nets.Add(ConnectedNet.FromString(connectedNet)); } NetGroup net = new NetGroup(inCount); net.executionIndexOrder = exeOrder; net.outputConnectedNetworks = outputIndex; net.networks = nets; return(net); }