public override void GetInputDataSync() //Diastole { PatternToSendInOutputChannels = string.Empty; var activeChannels = ListOfInputChannels.Where(inputChannel => inputChannel.IsActive).OrderBy(inputChannel => inputChannel.XCellOrigin.Id).ToList(); var activeChannelsWithoutXCellDestiny = activeChannels.Where(activeChannel => activeChannel.XCellDestiny == null).ToList(); foreach (var activeChannelWithoutXCellDestiny in activeChannelsWithoutXCellDestiny) { var xCellDP_I = new XCellDP_I(activeChannelWithoutXCellDestiny.XCellOrigin.Id, this); activeChannelWithoutXCellDestiny.XCellDestiny = xCellDP_I; xCellDP_I.ListOfInputChannels.Add(activeChannelWithoutXCellDestiny); ListOfXCellsDPI.Add(xCellDP_I); } foreach (var xCellDPI in ListOfXCellsDPI) { xCellDPI.GetInputData(); xCellDPI.SendOutputData(); } foreach (var xCellDPI in ListOfXCellsDPI.Where(xCelldpI => xCelldpI.ListOfOutputChannels[0].IsActive).OrderBy(xCelldpI => xCelldpI.ListOfOutputChannels[0].PatternToSendToAnXCell).ToList()) { PatternToSendInOutputChannels = $"{PatternToSendInOutputChannels}{xCellDPI.ListOfOutputChannels[0].PatternToSendToAnXCell}&"; } PatternToSendInOutputChannels = PatternToSendInOutputChannels.TrimEnd('&'); var c1 = activeChannels.Count(); var c2 = activeChannelsWithoutXCellDestiny.Count(); if (c1 == c2 && c1 > 0) { if (!string.IsNullOrEmpty(PatternToSendInOutputChannels)) { var xCellAND = ((ANDLayer)LayerUp).CreateAnXCellANDGivenItsID(PatternToSendInOutputChannels); //Crear una XCellAND con los canales de entrada igual a los canales de salida de las XCellDP_I creadas foreach (var activeChannelWithoutXCell in activeChannelsWithoutXCellDestiny) { xCellAND.ListOfInputChannels.Add(activeChannelWithoutXCell.XCellDestiny.ListOfOutputChannels[0]); } } } foreach (var xCellDPI in ListOfXCellsDPI) { xCellDPI.GetInputData(); } foreach (var xCellDPI in ListOfXCellsDPI) { xCellDPI.ListOfInputChannels[0].PatternToSendToAnXCell = null; xCellDPI.ListOfInputChannels[0].Aij = double.NaN; xCellDPI.ListOfInputChannels[0].IsActive = false; } }
public string CreateIdOfAllInactiveInputs() { var id = string.Empty; var listOfInActiveInputs = ListOfInputChannels.Where(inputChannel => inputChannel.Aij < Threshold); foreach (var activeChannelInput in listOfInActiveInputs) { id = $"{id}{activeChannelInput.XCellOrigin.Id}&"; } return(id.TrimEnd('&')); }
public string CreateIdOfAllInActiveInputs() { var id = string.Empty; var listOfInActiveInputs = ListOfInputChannels.Where(input => input.Pin.Value < Threshold); foreach (var activeInput in listOfInActiveInputs) { id = $"{id}{activeInput.Pin.Id}|"; } return(id.TrimEnd('|')); }
public virtual void ActivateOutputChannelsAndGenerateOutputValue() { var outputValue = 0.0; foreach (var inputChannelActive in ListOfInputChannels.Where(inputChannel => inputChannel.IsActive)) { outputValue += (inputChannelActive.Nijpos - inputChannelActive.Nijneg) * inputChannelActive.Pin.Value / Nii; } foreach (var outputChannel in ListOfOutputChannels) { outputChannel.Pin.Value = outputValue; outputChannel.IsActive = outputChannel.Pin.Value >= 0; //el caso =0 es para asegurar la difusión (maximiza la entropía en caso de duda) } }
public override void ActivateOutputChannelsAndGenerateOutputValue() { var outputValue = double.MaxValue; foreach (var inputChannelActive in ListOfInputChannels.Where(inputChannel => inputChannel.IsActive)) { var value = (inputChannelActive.Nijpos - inputChannelActive.Nijneg) * inputChannelActive.Aij / Nii; if (value < outputValue) { outputValue = value; } } foreach (var outputChannel in ListOfOutputChannels) { outputChannel.Aij = outputValue; outputChannel.IsActive = outputChannel.Aij >= 0; //el caso =0 es para asegurar la difusión (maximiza la entropía en caso de duda) } }
public override void GetInputDataSync() //Diastole { var listOfInputChannelsActive = ListOfInputChannels.Where(inputChannel => inputChannel.IsActive == true).ToList(); if (listOfInputChannelsActive != null) { foreach (var inputChannelActive in listOfInputChannelsActive) { if (inputChannelActive.XCellDestiny == null) { var xCellFuzzyMaster = new XCellFuzzyMaster(inputChannelActive.XCellOrigin.Id, this, ((XCellInput)(inputChannelActive.XCellOrigin)).R); xCellFuzzyMaster.AssignLevel(); xCellFuzzyMaster.ListOfInputChannels.Add(inputChannelActive); inputChannelActive.XCellDestiny = xCellFuzzyMaster; ListOfXCellsFuzzyMaster.Add(xCellFuzzyMaster); xCellFuzzyMaster.ORExplodeLayer.ConnectThisLayerWithOutputLayer(this); } inputChannelActive.XCellDestiny.GetInputData(); } } }
/// <summary> /// Hacer la atomización o la autogénesis al leer los datos de entrada para generar la estructura que se usará para hacer SendOutputData /// </summary> public override void GetInputData() //Diastole { var splittedIds = Id.Split('&'); var concatenatedRestingIDs = string.Empty; var idsOfActiveChannels = string.Empty; var listOfActiveChannels = ListOfInputChannels.Where(inputChannel => inputChannel.IsActive).ToList(); foreach (var inputChannel in listOfActiveChannels) { var patternToSendToAnXCell = inputChannel.PatternToSendToAnXCell; foreach (var splittedId in splittedIds) { inputChannel.PatternToSendToAnXCell = inputChannel.PatternToSendToAnXCell.Trim(splittedId.ToCharArray()).Replace("&&", string.Empty); } if (!string.IsNullOrEmpty(inputChannel.PatternToSendToAnXCell) && !string.IsNullOrEmpty(concatenatedRestingIDs)) { concatenatedRestingIDs = $"{concatenatedRestingIDs}{inputChannel.PatternToSendToAnXCell}&"; } if (inputChannel.IsActive && !string.IsNullOrEmpty(inputChannel.XCellOrigin.Id) && !string.IsNullOrEmpty(idsOfActiveChannels)) { idsOfActiveChannels = $"{idsOfActiveChannels}{inputChannel.XCellOrigin.Id}&"; } } concatenatedRestingIDs = concatenatedRestingIDs.TrimEnd('&'); idsOfActiveChannels = idsOfActiveChannels.TrimEnd('&'); if (listOfActiveChannels.Count() == ListOfInputChannels.Count()) //Han llegado patrones por todos los canales { if (concatenatedRestingIDs.Length == 0) //Se han eliminado todos los IDs en los InP { var kk = 0; //AuxPattern = string.Empty; //AuxIsActive = false; //double minValue = double.MaxValue; //foreach (var inputChannel in ListOfInputChannels) //{ // if (inputChannel.IsActive) // { // AuxIsActive = true; // if (inputChannel.Aij < minValue) // { // minValue = inputChannel.Aij; // } // if (!string.IsNullOrEmpty(inputChannel.PatternToSendToAnXCell)) // { // AuxPattern = $"{AuxPattern}{inputChannel.PatternToSendToAnXCell}|"; // } // } //} //AuxPattern = AuxPattern.TrimEnd('|'); //IN = minValue; } else //Quedan IDs en los InP { var splittedConcatenatedRestingIDs = concatenatedRestingIDs.Split('&'); var messageWasSent = false; foreach (var outputChannel in ListOfOutputChannels) { foreach (var restingID in splittedConcatenatedRestingIDs) { if (outputChannel.XCellDestiny.Id.Contains(restingID)) { //calcular la AND de los valores de entrada y dejar el valor preparado //IN= //foreach messageWasSent = true; } } } if (!messageWasSent) { var kk = 0; //Autogenesis(concatenatedRestingIDs); } } } else //Han llegado patrones sólo por algunos canales { var kk = 0; //Atomice(idsOfActiveChannels); } }