ExperienceSetup.h
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2014, University of Colorado, Boulder
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of the Univ of CO, Boulder nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 /* Author: Dave Coleman
36  */
37 
38 #ifndef OMPL_TOOLS_EXPERIENCE__EXPERIENCE_SETUP_
39 #define OMPL_TOOLS_EXPERIENCE__EXPERIENCE_SETUP_
40 
41 #include "ompl/geometric/SimpleSetup.h"
42 
43 namespace ompl
44 {
45  namespace tools
46  {
48  OMPL_CLASS_FORWARD(ExperienceSetup);
50 
57  {
58  public:
63  {
64  ExperienceStats() = default;
65 
66  double getAveragePlanningTime() const
67  {
68  if (numProblems_ == 0.0)
69  return 0.0;
70 
71  return totalPlanningTime_ / numProblems_;
72  }
73 
74  double getAverageInsertionTime() const
75  {
76  if (numProblems_ == 0.0)
77  return 0.0;
78 
79  // Clean up output
80  double time = totalInsertionTime_ / numProblems_;
81  if (time < 1e-8)
82  return 0.0;
83  return totalInsertionTime_ / numProblems_;
84  }
85 
86  double numSolutionsFromRecall_{0.};
87  double numSolutionsFromRecallSaved_{0.};
88  double numSolutionsFromScratch_{0.};
89  double numSolutionsFailed_{0.};
90  double numSolutionsTimedout_{0.};
91  double numSolutionsApproximate_{0.};
92  double numSolutionsTooShort_{0.}; // less than 3 states
93  double numProblems_{0.}; // input requests
94  double totalPlanningTime_{0.}; // of all input requests, used for averaging
95  double totalInsertionTime_{0.}; // of all input requests, used for averaging
96  };
97 
102  {
103  ExperienceLog() = default;
104  // Times
105  double planning_time{0.0};
106  double insertion_time{0.0};
107  // Solution properties
108  std::string planner{"NA"};
109  std::string result{"NA"};
110  std::string is_saved{"NA"};
111  // Failure booleans
112  bool approximate{false};
113  bool too_short{false};
114  bool insertion_failed{false};
115  // Lightning properties
116  double score{0.0};
117  // Thunder (SPARS) properties
118  std::size_t num_vertices{0};
119  std::size_t num_edges{0};
120  std::size_t num_connected_components{0};
121  };
122 
124  explicit ExperienceSetup(const base::SpaceInformationPtr &si);
125 
127  explicit ExperienceSetup(const base::StateSpacePtr &space);
128 
130  void logInitialize();
131 
133  void convertLogToString(const ExperienceLog &log);
134 
136  virtual void printResultsInfo(std::ostream &out = std::cout) const = 0;
137 
139  virtual void printLogs(std::ostream &out = std::cout) const = 0;
140 
142  virtual void saveDataLog(std::ostream &out = std::cout);
143 
147  virtual void setRepairPlanner(const base::PlannerPtr &planner) = 0;
148 
150  virtual bool save() = 0;
151 
153  virtual bool saveIfChanged() = 0;
154 
156  void enablePlanningFromRecall(bool enable);
157 
161  void enablePlanningFromScratch(bool enable);
162 
164  virtual void getAllPlannerDatas(std::vector<ompl::base::PlannerDataPtr> &plannerDatas) const = 0;
165 
167  virtual std::size_t getExperiencesCount() const = 0;
168 
171  virtual const std::string &getFilePath() const;
172 
176  virtual bool setFilePath(const std::string &filePath);
177 
181  const ExperienceStats &getStats() const
182  {
183  return stats_;
184  }
185 
189  virtual bool doPostProcessing()
190  {
191  return true;
192  }
193 
194  protected:
196  bool recallEnabled_{true};
197 
199  bool scratchEnabled_{true};
200 
202  std::string filePath_;
203 
204  // output data to file to analyze performance externally
205  std::stringstream csvDataLogStream_;
206 
209  };
210  }
211 }
212 #endif
Create the set of classes typically needed to solve a geometric problem.
Definition: SimpleSetup.h:63
Create the set of classes typically needed to solve a geometric problem.
void enablePlanningFromScratch(bool enable)
Optionally disable the ability to plan from scratch Note: Lightning can still save modified experienc...
virtual bool setFilePath(const std::string &filePath)
Set the database file to load. Actual loading occurs when setup() is called.
std::string filePath_
File location of database.
void logInitialize()
Load the header (first row) of the csv file.
void enablePlanningFromRecall(bool enable)
Optionally disable the ability to use previous plans in solutions (but will still save them)
virtual bool save()=0
Save the experience database to file.
virtual bool saveIfChanged()=0
Save the experience database to file if there has been a change.
void convertLogToString(const ExperienceLog &log)
Move data to string format and put in buffer.
const ExperienceStats & getStats() const
Getter for logging data.
virtual void saveDataLog(std::ostream &out=std::cout)
Save debug data about overall results since being loaded.
virtual std::size_t getExperiencesCount() const =0
Get the total number of paths stored in the database.
ExperienceStats stats_
States data for display to console
virtual bool doPostProcessing()
Allow accumlated experiences to be processed.
virtual void setRepairPlanner(const base::PlannerPtr &planner)=0
Set the planner to use for repairing experience paths inside the RetrieveRepair planner....
virtual void printResultsInfo(std::ostream &out=std::cout) const =0
Display debug data about potential available solutions.
virtual const std::string & getFilePath() const
After setFile() is called, access the generated file path for loading and saving the experience datab...
virtual void getAllPlannerDatas(std::vector< ompl::base::PlannerDataPtr > &plannerDatas) const =0
Get a vector of all the planning data in the database.
virtual void printLogs(std::ostream &out=std::cout) const =0
Display debug data about overall results since being loaded.
bool recallEnabled_
Flag indicating whether recalled plans should be used to find solutions. Enabled by default.
bool scratchEnabled_
Flag indicating whether planning from scratch should be used to find solutions. Enabled by default.
ExperienceSetup(const base::SpaceInformationPtr &si)
Constructor needs the state space used for planning.
void log(const char *file, int line, LogLevel level, const char *m,...)
Root level logging function. This should not be invoked directly, but rather used via a logging macro...
Definition: Console.cpp:120
Main namespace. Contains everything in this library.
Definition: AppBase.h:22
Single entry for the csv data logging file.
Simple logging functionality encapsled in a struct.