// function ITERATIVE-DEEPENING-SEARCH(problem) returns a solution, or
// failure
public List<Action> search(Problem p)
{
iterationMetrics.set(METRIC_NODES_EXPANDED, 0);
iterationMetrics.set(PATH_COST, 0);
// for depth = 0 to infinity do
for (int i = 0; i <= infinity; i++)
{
// result <- DEPTH-LIMITED-SEARCH(problem, depth)
DepthLimitedSearch dls = new DepthLimitedSearch(i);
List<Action> result = dls.search(p);
iterationMetrics.set(METRIC_NODES_EXPANDED, iterationMetrics
.getInt(METRIC_NODES_EXPANDED)
+ dls.getMetrics().getInt(METRIC_NODES_EXPANDED));
// if result != cutoff then return result
if (!dls.isCutOff(result))
{
iterationMetrics.set(PATH_COST, dls.getPathCost());
return result;
}
}
return failure();
}