Ejemplo n.º 1
0
        public override SearchResult AllPaths(iDomain start)
        {
            var result     = new SearchResult();
            var discovered = new Dictionary <string, SearchNode>();
            var toSearch   = new Stack <SearchNode>();
            var rootNode   = new SearchNode(start);

            discovered.Add(start.getStateHash(), rootNode);
            toSearch.Push(rootNode);
            while (toSearch.Count() > 0)
            {
                var currentNode = toSearch.Pop();
                if (currentNode.IsComplete())
                {
                    result.AddSolution(currentNode);
                }
                else
                {
                    var neighbors = currentNode.GetNeighbors();
                    if (neighbors.Count == 0)
                    {
                        result.leafNodes += 1;
                    }
                    foreach (SearchNode neighbor in neighbors)
                    {
                        if (!discovered.ContainsKey(neighbor.getStateHash()))
                        {
                            discovered.Add(neighbor.getStateHash(), neighbor);
                            toSearch.Push(neighbor);
                        }
                    }
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        public override SearchNode AnyPath(iDomain start)
        {
            var discovered = new Dictionary <string, SearchNode>();
            var toSearch   = new Queue <SearchNode>();
            var rootNode   = new SearchNode(start);

            discovered.Add(start.getStateHash(), rootNode);
            toSearch.Enqueue(rootNode);
            while (toSearch.Count() > 0)
            {
                var currentNode = toSearch.Dequeue();
                if (currentNode.IsComplete())
                {
                    return(currentNode);
                }
                var neighbors = currentNode.GetNeighbors();
                foreach (SearchNode neighbor in neighbors)
                {
                    if (!discovered.ContainsKey(neighbor.getStateHash()))
                    {
                        discovered.Add(neighbor.getStateHash(), neighbor);
                        toSearch.Enqueue(neighbor);
                    }
                    else
                    {
                        if (neighbor.Depth() < discovered[neighbor.getStateHash()].Depth())
                        {
                            discovered[neighbor.getStateHash()].history = neighbor.history;
                        }
                    }
                }
            }
            return(null);
        }
Ejemplo n.º 3
0
 public SearchNode(iDomain _state, ActionSequence _history = null)
 {
     state = _state;
     if (_history != null)
     {
         history = _history;
     }
     else
     {
         history = new ActionSequence();
     }
 }
Ejemplo n.º 4
0
        public iDomain Act(iDomain board)
        {
            Node sourceNode = ((PegBoard)board).getNodeAtPoint(source);
            Node middleNode = ((PegBoard)board).getNodeAtPoint(middle);
            Node targetNode = ((PegBoard)board).getNodeAtPoint(target);

            if ((sourceNode == null || middleNode == null || targetNode == null) ||
                (!sourceNode.occupied || !middleNode.occupied || targetNode.occupied))
            {
                return(board);
            }
            sourceNode.occupied = false;
            middleNode.occupied = false;
            targetNode.occupied = true;
            return(board);
        }
Ejemplo n.º 5
0
 // Only run on finite search spaces
 public abstract SearchResult AllPaths(iDomain start);
Ejemplo n.º 6
0
 // Okay to run on infinite search spaces
 public abstract SearchNode AnyPath(iDomain start);