/// <summary> /// ID=a<x<w~a<x<b,c<x<d,...,z<x<w /// </summary> /// <param name="ID">The identifier.</param> private void Explode(string ID) { var IDoldIDnew = ID.Split('~'); if (IDoldIDnew.Count() == 2) { var inputChannelOfTheOriginalXCellOrToExplodeToReconnect = ListOfInputChannels.FirstOrDefault(channel => channel.XCellOrigin.Id == IDoldIDnew[0]); if (inputChannelOfTheOriginalXCellOrToExplodeToReconnect != null) { var newXCellOrExplode = new XCellORExplode(IDoldIDnew[1], Layer); inputChannelOfTheOriginalXCellOrToExplodeToReconnect.XCellOrigin = newXCellOrExplode; newXCellOrExplode.ListOfOutputChannels.Add(inputChannelOfTheOriginalXCellOrToExplodeToReconnect); var newRegions = IDoldIDnew[1].Split(','); foreach (var region in newRegions) { var channelConnectedToAnXceldaFuzzy = Layer.ListOfInputChannels.FirstOrDefault(channel => channel.XCellOrigin.Id == region); if (channelConnectedToAnXceldaFuzzy != null) { var newInputChannelForNewXCellOrExplode = new Channel(); newInputChannelForNewXCellOrExplode.XCellDestiny = newXCellOrExplode; newInputChannelForNewXCellOrExplode.XCellOrigin = channelConnectedToAnXceldaFuzzy.XCellOrigin; newXCellOrExplode.ListOfInputChannels.Add(newInputChannelForNewXCellOrExplode); } } newXCellOrExplode.AssignLevel(); } } }
/// <summary> /// Atomización /// </summary> /// <param name="idSequence">id=id1&id2&...&idn</param> public void Atomice(string idSequence) { var ids = idSequence.Split('&'); if (ids.Count() >= HyperParameters.W) { var newXCellAND = ((ANDLayer)Layer).CreateAnXCellANDGivenItsIDInTemporalList(idSequence); var outputChannelFornewXCeldaANDConnectedToInputOfOldXCellAND = new Channel(); outputChannelFornewXCeldaANDConnectedToInputOfOldXCellAND.XCellDestiny = this; outputChannelFornewXCeldaANDConnectedToInputOfOldXCellAND.XCellOrigin = newXCellAND; newXCellAND.ListOfOutputChannels.Add(outputChannelFornewXCeldaANDConnectedToInputOfOldXCellAND); foreach (var id in ids) { var inputChannel = ListOfInputChannels.FirstOrDefault(channel => channel.XCellOrigin.Id == id); if (inputChannel != null) { inputChannel.XCellDestiny = newXCellAND; newXCellAND.ListOfInputChannels.Add(inputChannel); ListOfInputChannels.Remove(inputChannel); //Al eliminar este inputChannel de la lista, se elimina tb el inputChannel??? } } newXCellAND.AssignLevel(); ListOfInputChannels.Add(newXCellAND.ListOfOutputChannels[0]); } }