void ompl::control::SimpleSetup::setup() { if (!configured_ || !si_->isSetup() || !planner_->isSetup()) { if (!si_->isSetup()) si_->setup(); if (!planner_) { if (pa_) planner_ = pa_(si_); if (!planner_) { OMPL_INFORM("No planner specified. Using default."); planner_ = getDefaultPlanner(getGoal()); } } planner_->setProblemDefinition(pdef_); if (!planner_->isSetup()) planner_->setup(); params_.clear(); params_.include(si_->params()); params_.include(planner_->params()); configured_ = true; } }
void ompl::geometric::SimpleSetup::setup() { if (!configured_ || !si_->isSetup() || !planner_->isSetup()) { if (!si_->isSetup()) si_->setup(); if (!planner_) { if (pa_) planner_ = pa_(si_); if (!planner_) { OMPL_INFORM("No planner specified. Using default."); planner_ = tools::SelfConfig::getDefaultPlanner(getGoal()); } } planner_->setProblemDefinition(pdef_); if (!planner_->isSetup()) planner_->setup(); configured_ = true; } }
void ompl::tools::Lightning::setup() { if (!configured_ || !si_->isSetup() || !planner_->isSetup() || !rrPlanner_->isSetup() ) { OMPL_INFORM("Setting up the Lightning Framework"); if (!configured_) OMPL_INFORM(" Setting up because not configured"); else if(!si_->isSetup()) OMPL_INFORM(" Setting up because not si->isSetup"); else if(!planner_->isSetup()) OMPL_INFORM(" Setting up because not planner->isSetup"); else if(!rrPlanner_->isSetup()) OMPL_INFORM(" Setting up because not rrPlanner->isSetup"); // Setup Space Information if we haven't already done so if (!si_->isSetup()) si_->setup(); // Setup planning from scratch planner if (!planner_) { if (pa_) planner_ = pa_(si_); if (!planner_) { planner_ = tools::SelfConfig::getDefaultPlanner(pdef_->getGoal()); // we could use the repairProblemDef_ here but that isn't setup yet OMPL_INFORM("No planner specified. Using default: %s", planner_->getName().c_str() ); } } planner_->setProblemDefinition(pdef_); if (!planner_->isSetup()) planner_->setup(); // Setup planning from experience planner rrPlanner_->setProblemDefinition(pdef_); if (!rrPlanner_->isSetup()) rrPlanner_->setup(); // Create the parallel component for splitting into two threads pp_ = ot::ParallelPlanPtr(new ot::ParallelPlan(pdef_) ); if (!scratchEnabled_ && !recallEnabled_) { throw Exception("Both planning from scratch and experience have been disabled, unable to plan"); } if (scratchEnabled_) pp_->addPlanner(planner_); // Add the planning from scratch planner if desired if (recallEnabled_) pp_->addPlanner(rrPlanner_); // Add the planning from experience planner if desired // Check if experience database is already loaded if (experienceDB_->isEmpty()) { if (filePath_.empty()) { OMPL_ERROR("No file path has been specified, unable to load experience DB"); } else { experienceDB_->load(filePath_); // load from file } } else OMPL_ERROR("Attempting to load experience database when it is not empty"); // Set the configured flag configured_ = true; } }
int main(int argc, char* argv[]) { std::string filepath("CARTPOLENNACTORCRITIC"); std::string filepathRSFA(filepath+".FA.txt"); std::string filepathRSPA(filepath+".PA.txt"); unsigned int nbrthread = 4; unsigned int nbrepi = 100; float gamma_ = 0.99f; float EOE = 5.0f; //in seconds... SimulatorRKCARTPOLE env_(EOE); /* 2x10 float lrPA_ = 1e-2f; float lrFA_ = 1e-2f; */ /* 4x10 */ /* float lrPA_ = 1e-2f; float lrFA_ = 1e-2f; */ /* 4x50 */ float lrPA_ = 1e-4f; float lrFA_ = 1e-4f; /**/ float eps_ = 0.9f; int dimActionSpace_ = 1; int dimStateSpace_ = 4; Topology topoFA; unsigned int nbrneuronsFA = 50; unsigned int nbrlayerFA = 4; unsigned int nbrinputFA = dimActionSpace_+dimStateSpace_; unsigned int nbroutputFA = 1; topoFA.push_back(nbrinputFA,NTNONE); //input layer //topoFA.push_back(nbrinputFA,NTSIGMOID); //input layer //for(int i=nbrlayerFA;i--;) topoFA.push_back(nbrneuronsFA, NTSIGMOID); for(int i=nbrlayerFA;i--;) topoFA.push_back(nbrneuronsFA, NTTANH); //topoFA.push_back(nbroutputFA, NTNONE); //linear output //topoFA.push_back(nbroutputFA, NTSIGMOID); //linear output topoFA.push_back(nbroutputFA, NTTANH); //linear output QFANN<float> fa_( lrFA_, eps_, gamma_, dimActionSpace_, topoFA, filepathRSFA); Topology topoPA; unsigned int nbrneuronsPA = 50; unsigned int nbrlayerPA = 4; unsigned int nbrinputPA = dimStateSpace_; unsigned int nbroutputPA = dimActionSpace_; topoPA.push_back(nbrinputPA,NTNONE); //input layer //topoPA.push_back(nbrinputPA,NTSIGMOID); //input layer //for(int i=nbrlayerPA;i--;) topoPA.push_back(nbrneuronsPA, NTSIGMOID); for(int i=nbrlayerPA;i--;) topoPA.push_back(nbrneuronsPA, NTTANH); //it would be difficult to get to higher values with a nonlinearity that would reduice the range of possibility, maybe... //topoPA.push_back(nbroutputPA, NTNONE); //linear output //topoPA.push_back(nbroutputPA, NTSIGMOID); //linear output topoPA.push_back(nbroutputPA, NTTANH); //linear output QPANN<float> pa_( lrPA_, eps_, gamma_, dimActionSpace_, topoPA, filepathRSPA); //QLEARNINGXPReplay instance(nbrepi, gamma_, (Environment<float>*)(&env_), (FA<float>*)&fa_); //QLEARNINGXPReplayActorCritic instance(nbrepi, gamma_, (Environment<float>*)(&env_), (FA<float>*)&fa_, (PA<float>*)&pa_); float momentumUpdate = 1e-4f; int freqUpdate = 1; DDPGA3C instance(nbrepi, gamma_, (Environment<float>*)(&env_), (FA<float>*)&fa_, (PA<float>*)&pa_, momentumUpdate, freqUpdate); instance.run(nbrepi,nbrthread); fa_.save(filepath+"FA"); pa_.save(filepath+"PA"); }