All Downloads are FREE. Search and download functionalities are using the official Maven repository.

aima.core.search.framework.qsearch.TreeSearch Maven / Gradle / Ivy

package aima.core.search.framework.qsearch;

import java.util.Queue;

import aima.core.search.framework.Node;
import aima.core.search.framework.NodeExpander;
import aima.core.search.framework.problem.Problem;

/**
 * Artificial Intelligence A Modern Approach (3rd Edition): Figure 3.7, page 77.
 * 
* *
 * function TREE-SEARCH(problem) returns a solution, or failure
 *   initialize the frontier using the initial state of the problem
 *   loop do
 *     if the frontier is empty then return failure
 *     choose a leaf node and remove it from the frontier
 *     if the node contains a goal state then return the corresponding solution
 *     expand the chosen node, adding the resulting nodes to the frontier
 * 
* * Figure 3.7 An informal description of the general tree-search algorithm. * *
* This implementation is based on the template method * {@link #findNode(Problem, Queue)} from superclass {@link QueueSearch} and * provides implementations for the needed primitive operations. * * @author Ravi Mohan * @author Ruediger Lunde * */ public class TreeSearch extends QueueSearch { public TreeSearch() { this(new NodeExpander()); } public TreeSearch(NodeExpander nodeExpander) { super(nodeExpander); } /** * Inserts the node at the tail of the frontier. */ @Override protected void addToFrontier(Node node) { frontier.add(node); updateMetrics(frontier.size()); } /** * Removes and returns the node at the head of the frontier. * * @return the node at the head of the frontier. */ @Override protected Node removeFromFrontier() { Node result = frontier.remove(); updateMetrics(frontier.size()); return result; } /** * Checks whether the frontier contains not yet expanded nodes. */ @Override protected boolean isFrontierEmpty() { return frontier.isEmpty(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy