// Returns new child private DBNode LinkNewChildToGraph(DBNode node, IDBOperator op) { IDBSpaceState newState = op.Apply(module, node.State); newState.UpdateIsGoal(module); DBNode newNode = new DBNode(DBNode.NodeType.Dependency, newState, level); if (newNode.IsGoal) { goalCount += 1; } TreeSizeIncreased = true; nodeCount += 1; // Graph bookkeeping node.Children.Add(newNode); module.RegisterNewNode(newNode, root); return(newNode); }
public void Search(IDBSpaceState rootState) { rootState.UpdateIsGoal(module); root = new DBNode(DBNode.NodeType.Root, rootState, 0); if (root.IsGoal) { goalCount += 1; } module.RegisterNewNode(root, root); level = 1; TreeSizeIncreased = true; try { while (TreeSizeIncreased) { //Console.WriteLine ("level {0}", level); TreeSizeIncreased = false; if (breadthFirst) { dependencyNodeQueue.Clear(); } AddDependencyStage(root); if (breadthFirst) { SolveDependencyStage(); } //DumpTree (root); /*Console.WriteLine ("level {0} dependency finished: {1} nodes, {2} goals", * level, nodeCount, goalCount);*/ if (TreeSizeIncreased == false) { break; } if (module.GoalCountThresh != 0 && goalCount >= module.GoalCountThresh) { break; } /* * Console.WriteLine ("COMB TEST"); * module.CombinationStage (level, root, this); * * if (module.GoalCountThresh != 0 && goalCount >= module.GoalCountThresh) * break; */ AddCombinationStage(root, new Stack()); /*Console.WriteLine ("level {0} combination finished: {1} nodes, {2} goals", * level, nodeCount, goalCount);*/ if (TreeSizeIncreased == false) { break; } if (module.GoalCountThresh != 0 && goalCount >= module.GoalCountThresh) { break; } //DumpTree (root); level += 1; } } catch (GoalCountExceededException) { /* * Console.WriteLine ("GOAL count limit of {0} exceeded.", * module.GoalCountThresh);*/ } }