* @throws TimeoutException
*/
public PlanResult plan(DomainDescription domainDescription, long timeout) throws PlanningGraphException, OperatorFactoryException, TimeoutException {
PropositionLevel initialLevel = new PropositionLevel();
initialLevel.addPropositions(domainDescription.getInitialState());
this.solutionExtraction = new TimeoutSolutionExtractionVisitor(domainDescription.getGoalState());
((TimeoutSolutionExtractionVisitor)solutionExtraction).setTimeout(timeout);
this.planningGraph = new PlanningGraph(initialLevel, new StaticMutexesTable(new ArrayList<Operator>(domainDescription.getOperators())));
OperatorFactory.getInstance().resetOperatorTemplates();