Example #1
0
        public void PermutateRandomNode()
        {
            List <GSTreeNode> nodes = new List <GSTreeNode>();

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

            node.left  = node.right;
            node.right = temp;
        }
Example #2
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 #3
0
 public static List <GSTreeNode> GetSingleArgFunctionNodes(GSTreeNode node, List <GSTreeNode> nodes)
 {
     if (node == null)
     {
         return(nodes);
     }
     else
     {
         if (GSDictionaries.SingleArgFunctions.ContainsKey(node.value))
         {
             nodes.Add(node);
         }
         GetSingleArgFunctionNodes(node.left, nodes);
         GetSingleArgFunctionNodes(node.right, nodes);
         return(nodes);
     }
 }
Example #4
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 #5
0
        public void CrossoverRandom(GSTree treeB)
        {
            List <GSTreeNode> nodes = new List <GSTreeNode>();

            GSTreeTraverse.GetDoubleArgFunctionNodes(treeB.root, nodes);
            System.Random rand  = new System.Random();
            GSTreeNode    nodeB = nodes[rand.Next(nodes.Count)];

            nodes = new List <GSTreeNode>();
            GSTreeTraverse.GetDoubleArgFunctionNodes(root, nodes);
            rand = new System.Random();
            GSTreeNode nodeA = nodes[rand.Next(nodes.Count)];

            GSTreeNode newTree = new GSTreeNode();

            newTree.left  = nodeB.left;
            newTree.right = nodeA.right;
            nodeA         = (GSTreeNode)newTree.Clone();
        }
Example #6
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;
            }
        }
Example #7
0
 public static StringBuilder TraverseTreeWrite(GSTreeNode node, StringBuilder value)
 {
     if (node == null)
     {
         return(value);
     }
     else if (GSDictionaries.BasicFunctions.ContainsKey(node.value))
     {
         value.Append("(");
         TraverseTreeWrite(node.left, value);
         value.Append(GSDictionaries.BasicFunctions[node.value]);
         TraverseTreeWrite(node.right, value);
         value.Append(")");
     }
     else if (GSDictionaries.DoubleArgFunctions.ContainsKey(node.value))
     {
         value.Append(GSDictionaries.DoubleArgFunctions[node.value]);
         value.Append("(");
         TraverseTreeWrite(node.left, value);
         value.Append(",");
         TraverseTreeWrite(node.right, value);
         value.Append(")");
     }
     else if (GSDictionaries.SingleArgFunctions.ContainsKey(node.value))
     {
         value.Append(GSDictionaries.SingleArgFunctions[node.value]);
         value.Append("(");
         TraverseTreeWrite(node.left, value);
         value.Append(")");
     }
     else
     {
         TraverseTreeWrite(node.left, value);
         value.Append(node.value);
         TraverseTreeWrite(node.right, value);
     }
     return(value);
 }