ai.libs.jaicore.planning.hierarchical.algorithms.GraphSearchBasedHTNPlanningAlgorithm Maven / Gradle / Ivy
package ai.libs.jaicore.planning.hierarchical.algorithms;
import org.slf4j.Logger;
import ai.libs.jaicore.basic.algorithm.reduction.ReducingOptimizer;
import ai.libs.jaicore.planning.classical.problems.strips.Operation;
import ai.libs.jaicore.planning.core.EvaluatedSearchGraphBasedPlan;
import ai.libs.jaicore.planning.hierarchical.problems.htn.IHTNPlanningProblem;
import ai.libs.jaicore.planning.hierarchical.problems.htn.IHierarchicalPlanningToGraphSearchReduction;
import ai.libs.jaicore.planning.hierarchical.problems.stn.Method;
import ai.libs.jaicore.search.core.interfaces.IOptimalPathInORGraphSearchFactory;
import ai.libs.jaicore.search.model.other.EvaluatedSearchGraphPath;
import ai.libs.jaicore.search.probleminputs.GraphSearchInput;
/**
*
* @author fmohr
*
* @param
* class of the HTN planning problem
* @param
* class of the graph search problem input to which the HTN problem is reduced
* @param
* class of the nodes in the search problem
* @param
* class of the edges in the search problem
* @param
* evaluation of solutions
*/
public class GraphSearchBasedHTNPlanningAlgorithm, N, A, V extends Comparable>
extends ReducingOptimizer, S, EvaluatedSearchGraphPath, V> {
public GraphSearchBasedHTNPlanningAlgorithm(final P problem, final IHierarchicalPlanningToGraphSearchReduction, S, EvaluatedSearchGraphPath> problemTransformer,
final IOptimalPathInORGraphSearchFactory searchFactory) {
super(problem, problemTransformer, searchFactory);
}
@Override
public void runPreCreationHook() {
Logger logger = this.getLogger();
logger.info("Starting HTN planning process.");
if (logger.isDebugEnabled()) {
StringBuilder opSB = new StringBuilder();
for (Operation op : this.getInput().getDomain().getOperations()) {
opSB.append("\n\t\t");
opSB.append(op);
}
StringBuilder methodSB = new StringBuilder();
for (Method method : this.getInput().getDomain().getMethods()) {
methodSB.append("\n\t\t");
methodSB.append(method);
}
logger.debug("The HTN problem is defined as follows:\n\tOperations:{}\n\tMethods:{}", opSB, methodSB);
}
}
}