pddl_planner
Planning.hpp
Go to the documentation of this file.
1 #ifndef PDDL_PLANNER_H
2 #define PDDL_PLANNER_H
3 
4 #include <string>
5 #include <stdexcept>
6 #include <map>
7 #include <set>
8 #include <vector>
9 #include <string>
10 #include <pddl_planner/representation/Problem.hpp>
11 #include <pddl_planner/PDDLPlannerTypes.hpp>
12 #include <boost/thread/mutex.hpp>
13 #include <boost/thread.hpp>
14 
15 #define TIMEOUT 7.
16 
150 namespace pddl_planner
151 {
153  typedef std::string PlannerName;
154  typedef std::map<std::string, std::string> ActionDescriptions;
155  typedef std::map<std::string, std::string> DomainDescriptions;
156  typedef std::map<std::string, PDDLPlannerInterface*> PlannerMap;
157  typedef std::vector<PDDLPlannerInterface*> PlannerList;
158  typedef std::pair<PlannerName, PlanCandidates> PlanResult;
159  typedef std::vector< PlanResult > PlanResultList;
160 
166  class Planning
167  {
168 
169  public:
174  Planning();
175 
179  ~Planning();
180 
181 
186  PlannerMap getPlanners() const { return mPlanners; }
187 
192  std::set<std::string> getAvailablePlanners() const;
193 
197  void registerPlanner(PDDLPlannerInterface* planner);
198 
203  PlannerList getRegisteredPlanners() const;
204 
208  bool isRegistered(const std::string& name) const { return mPlanners.count(name); }
209 
214  PDDLPlannerInterface* getPlanner(const std::string& name) const;
215 
219  void setActionDescription(const std::string& action, const std::string& description);
220 
224  void setDomainDescription(const std::string& domain, const std::string& description);
225 
231  std::string getDomainDescriptions() const;
232 
238  std::string getActionDescriptions() const;
239 
245  PlanResultList plan(const std::string& problem, const std::set<std::string>& planners, bool sequential = false, double timeout = TIMEOUT);
246 
252  PlanCandidates plan(const std::string& problem, const std::string& plannerName = "LAMA", double timeout = TIMEOUT);
253 
266  PlanResultList plan(const representation::Problem& problem, const std::set<std::string>& planners, bool sequential = false, double timeout = TIMEOUT);
267 
279  PlanResultList plan(const representation::Domain& domain, const representation::Problem& problem, const std::set<std::string>& planners, bool sequential = false, double timeout = TIMEOUT);
280 
286  PlanCandidates plan(const representation::Problem& problem, const std::string& plannerName = "LAMA", double timeout = TIMEOUT);
287 
291  PlanCandidates plan(const representation::Domain& domain, const representation::Problem& problem, const std::string& plannerName = "LAMA", double timeout = TIMEOUT);
292 
293  private:
294  PlannerMap mPlanners;
295  ActionDescriptions mActionDescriptions;
296  DomainDescriptions mDomainDescriptions;
297  std::vector<boost::thread *> mPlanRunners;
298  public:
299  PlanResultList mPlanResultList;
300  boost::mutex mResultMutex;
301  boost::mutex mPlannerMutex;
302  };
303 
304 
305 }
306 #endif // PDDL_PLANNER_H
boost::mutex mPlannerMutex
Definition: Planning.hpp:301
std::vector< PlanResult > PlanResultList
Definition: Planning.hpp:159
bool isRegistered(const std::string &name) const
Definition: Planning.hpp:208
Definition: Problem.hpp:9
#define TIMEOUT
Definition: Planning.hpp:15
std::string getDomainDescriptions() const
Definition: Planning.cpp:121
void setActionDescription(const std::string &action, const std::string &description)
Definition: Planning.cpp:100
std::map< std::string, std::string > DomainDescriptions
Definition: Planning.hpp:155
PlannerList getRegisteredPlanners() const
Definition: Planning.cpp:88
PDDLPlannerInterface * getPlanner(const std::string &name) const
Definition: Planning.cpp:78
void setDomainDescription(const std::string &domain, const std::string &description)
Definition: Planning.cpp:105
std::pair< PlannerName, PlanCandidates > PlanResult
Definition: Planning.hpp:158
An internal representation of a PDDL domain description.
Definition: Domain.hpp:423
Planning()
Default constructor for planning It will instanciate all associated planners at construction time...
Definition: Planning.cpp:17
Planning provides the main infrastructure to perform planning with different planner implementations...
Definition: Planning.hpp:166
std::string PlannerName
Definition: Planning.hpp:152
std::map< std::string, std::string > ActionDescriptions
Definition: Planning.hpp:154
Definition: PDDLPlannerInterface.cpp:18
std::set< std::string > getAvailablePlanners() const
Definition: Planning.cpp:45
Definition: PDDLPlannerTypes.hpp:66
~Planning()
Definition: Planning.cpp:35
boost::mutex mResultMutex
Definition: Planning.hpp:300
Definition: PDDLPlannerInterface.hpp:9
PlannerMap getPlanners() const
Definition: Planning.hpp:186
void registerPlanner(PDDLPlannerInterface *planner)
Definition: Planning.cpp:60
PlanResultList mPlanResultList
Definition: Planning.hpp:299
PlanResultList plan(const std::string &problem, const std::set< std::string > &planners, bool sequential=false, double timeout=TIMEOUT)
Definition: Planning.cpp:144
std::vector< PDDLPlannerInterface * > PlannerList
Definition: Planning.hpp:157
std::map< std::string, PDDLPlannerInterface * > PlannerMap
Definition: Planning.hpp:156
std::string getActionDescriptions() const
Definition: Planning.cpp:110