示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
 internal void Add(GPSemantica semantica)
 {
     lista.Add(semantica);
 }
示例#6
0
 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);
 }