public GPAbstractNode InternalCreateRandomNode(GPConfig config, bool flagTerminal, GPAbstractNode parent = null, int countLevel = 0) { GPSemantica semantica = GetRandomSemantica(flagTerminal); GPAbstractNode node = semantica.InstantiateEmpty(); if (parent == null) { parent = node; } int rndVal = rnd.Next(semantica.minParams, semantica.maxParams); for (int i = 0; i < rndVal; i++) { GPAbstractNode nodeParam = InternalCreateRandomNode(config, countLevel >= config.minLevels, parent, countLevel + 1); if (!node.CanAddNode(nodeParam)) { throw new Exception("Node não permite adicionar nodeParam!"); } node.AddNode(nodeParam); } return(node); }
private GPSemantica GetRandomSemantica(bool flagTerminal) { IList <GPSemantica> subLista = lista.Where(x => (!flagTerminal || (x.IsTerminal && flagTerminal))).ToList(); if (subLista.Count == 0) { subLista = lista; } GPSemantica semantica = subLista[rnd.Next(subLista.Count)]; return(semantica); }
/*public void AddSemantica(string listName, string holderName) * { * GPSemantica semantica = holder.GetSemantica(holderName); * AddSemantica(listName, semantica); * }*/ public void AddSemanticaToList(string listName, GPSemantica semantica) { if (semantica == null) { throw new Exception("Semantica nula!"); } SemanticaList list = GetListByName(listName); if (list.Contains(semantica)) { throw new Exception("Tentando adicionar uma semantica que já existe:" + semantica.ToString()); } list.Add(semantica); }
internal GPSemantica GetEquivalent(GPSemantica semanticaToAvoid, int qtdChild) { IList <GPSemantica> validOptions = new List <GPSemantica>(); foreach (GPSemantica sem in lista) { if (sem.minParams <= qtdChild && sem.maxParams >= qtdChild && semanticaToAvoid.name != sem.name) { validOptions.Add(sem); } } if (validOptions.Count == 0) { return(semanticaToAvoid); } GPSemantica choosen = validOptions[Utils.RandomInt(0, validOptions.Count)]; return(choosen); }
internal void Add(GPSemantica semantica) { lista.Add(semantica); }
public bool Contains(GPSemantica semantica) { return(lista.Contains(semantica)); }
public void AddSemanticaFormula(string name, GPSemantica semantica) { //semantica.AddPropriedade(GPConsts.GPNODE_TYPE.NODE_FORMULA, GPConsts.GPNODE_TYPE.NODE_NUMBER); //semantica.AddPropriedade(GPConsts.GPNODE_TYPE.NODE_FORMULA, GPConsts.GPNODE_TYPE.NODE_NUMBER); AddSemanticaToDictionary(name, semantica); }
public void AddSemanticaToDictionary(string name, GPSemantica semantica) { allSemantics.Add(name, semantica); }
// Para comparers eu permito formulas, exemplo F1 > F2 //TODO: como fazer para permitir formula e numero? public void AddSemanticaComparer(string name, GPSemantica semantica) { //semantica.AddPropriedade(GPConsts.GPNODE_TYPE.NODE_FORMULA, GPConsts.GPNODE_TYPE.NODE_NUMBER, GPConsts.GPNODE_TYPE.NODE_BOOLEAN, GPConsts.GPNODE_TYPE.NODE_COMPARER); // semantica.AddPropriedade(GPConsts.GPNODE_TYPE.NODE_FORMULA, GPConsts.GPNODE_TYPE.NODE_NUMBER, GPConsts.GPNODE_TYPE.NODE_BOOLEAN, GPConsts.GPNODE_TYPE.NODE_COMPARER); AddSemanticaToDictionary(name, semantica); }