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; }
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; }
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); } }
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); } }
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(); }
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; } }
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); }