Example #1
0
        public GSTree(bool positionTree)
        {
            root = new GSTreeNode();
            GSTreeNode left  = new GSTreeNode();
            GSTreeNode right = new GSTreeNode();

            root.value        = GSDictionaries.GetRandomDoubleArgFunction();
            left.value        = "(" + GetRandomFloat() + ")";
            right.value       = "(" + GetRandomFloat() + ")";
            root.left         = left;
            root.right        = right;
            this.positionTree = positionTree;
        }
Example #2
0
        public void MutateRandomNode()
        {
            List <GSTreeNode> nodes = new List <GSTreeNode>();

            GSTreeTraverse.GetAllFunctionNodes(root, nodes);
            System.Random rand = new System.Random();
            GSTreeNode    node = nodes[rand.Next(nodes.Count)];

            if (GSDictionaries.BasicFunctions.ContainsKey(node.value) ||
                GSDictionaries.DoubleArgFunctions.ContainsKey(node.value))
            {
                node.value = GSDictionaries.GetDifferentDoubleArgFunction(node.value);
            }
            else if (GSDictionaries.SingleArgFunctions.ContainsKey(node.value))
            {
                node.value = GSDictionaries.GetDifferentSingleArgFunction(node.value);
            }
        }
Example #3
0
        public void InsertRandomNode()
        {
            System.Random     rand  = new System.Random();
            List <GSTreeNode> nodes = new List <GSTreeNode>();

            GSTreeTraverse.GetDoubleArgFunctionNodes(root, nodes);
            GSTreeNode selNode  = nodes[rand.Next(nodes.Count)];
            GSTreeNode tempNode = selNode.left;

            GSTreeNode newNode = new GSTreeNode();

            selNode.left = newNode;

            if (rand.Next(0, 2) == 1)
            {
                newNode.value = GSDictionaries.GetRandomDoubleArgFunction();
                newNode.left  = tempNode;
                newNode.right = new GSTreeNode();
                string randValue;
                if (rand.Next(0, 2) == 1)
                {
                    randValue = "(" + GetRandomFloat() + ")";
                }
                else
                {
                    if (positionTree)
                    {
                        randValue = "(" + GSDictionaries.GetRandomPositionVariable() + ")";
                    }
                    else
                    {
                        randValue = "(" + GSDictionaries.GetRandomColorVariable() + ")";
                    }
                }
                newNode.right.value = randValue;
            }
            else
            {
                newNode.value = GSDictionaries.GetRandomSingleArgFunction();
                newNode.left  = tempNode;
            }
        }