package org.aksw.state_space_search.core;
import java.util.Comparator;
import java.util.stream.Stream;
import com.google.common.collect.Ordering;
public class StateSearchUtils
{
public static <S> Stream<S> breadthFirstSearch(State<S> state, int maxDepth) {
Stream<S> result = breadthFirstSearch(state, 0, maxDepth);
return result;
}
public static <S> Stream<S> breadthFirstSearch(State<S> state, int depth, int maxDepth) {
Stream<S> result = SearchUtils.<State<S>, Action<S>, S>breadthFirstSearch(
state,
State::isFinal,
State::getSolution,
State::getActions,
Action::apply,
depth,
maxDepth);
return result;
}
public static <S> Stream<S> depthFirstSearch(State<S> state, int maxDepth) {
Stream<S> result = depthFirstSearch(state, 0, maxDepth);
return result;
}
public static <S> Stream<S> depthFirstSearch(State<S> state, int depth, int maxDepth) {
Stream<S> result = SearchUtils.<State<S>, Action<S>, S>depthFirstSearch(
state,
State::isFinal,
State::getSolution,
State::getActions,
//Ordering.<Comparator<Action<S>>>natural(),
//cmp,
(a, b) -> (int)(b.getCost() - a.getCost()),
Action::apply,
depth,
maxDepth);
return result;
}
}