/// <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(); } } }
public override void SendOutputData() //Systole { //var lowerLimit = IN - RegionsManager.r; //var upperLimit = IN + RegionsManager.r; //if (RegionsManager.TryToAddANewRegion(lowerLimit, upperLimit))//RegionsManager.CheckIfRegionIsAvailable(lowerLimit, upperLimit)) //{ // var xCellFuzzyNew = new XCellFuzzy($"{lowerLimit}<{Id}<{upperLimit}", Layer, RegionsManager.R); // xCellFuzzyNew.ListOfInputChannels.Add(ListOfInputChannels[0]); // //RegionsManager.TryToAddANewRegion(lowerLimit, upperLimit); // ListOfXCellFuzzy.Add(xCellFuzzyNew); // //xCellFuzzyNew.GetInputData(); // //Recalculate_r(); //} //foreach (var xCellFuzzy in ListOfXCellFuzzy) //{ // xCellFuzzy.GetInputData(); // xCellFuzzy.SendOutputData(); //} XCellFuzzy xCellFuzzyWithGreaterOutput = null; double greaterOutput = 0; foreach (var xCellFuzzy in ListOfXCellFuzzy.Where(xCellFuzz => xCellFuzz.ListOfOutputChannels[0].IsActive && xCellFuzz.ListOfOutputChannels[0].Aij > 0)) { if (!ORExplodeLayer.ListOfXCellsOrExplode.Any(xCellORExplode => xCellORExplode.Id == xCellFuzzy.Id)) { var xCellOrExplode = new XCellORExplode(xCellFuzzy.Id, this.Layer); ORExplodeLayer.ListOfXCellsOrExplode.Add(xCellOrExplode); ORExplodeLayer.ListOfInputChannels.Add(xCellFuzzy.ListOfOutputChannels[0]); } if (xCellFuzzy.ListOfOutputChannels[0].Aij > greaterOutput) { greaterOutput = xCellFuzzy.ListOfOutputChannels[0].Aij; xCellFuzzyWithGreaterOutput = xCellFuzzy; } } if (xCellFuzzyWithGreaterOutput != null) { var outputChannelFound = ListOfOutputChannels.FirstOrDefault(outputChannel => outputChannel.XCellOrigin.Id == xCellFuzzyWithGreaterOutput.Id); if (outputChannelFound == null) { ListOfOutputChannels.Add(xCellFuzzyWithGreaterOutput.ListOfOutputChannels[0]); } } }