/// <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();
                }
            }
        }
Exemple #2
0
        /// <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]);
            }
        }