Commit 9f8f6442 authored by kraus's avatar kraus
Browse files

Merge branch 'master' of gitlab.psi.ch:OPAL/src

parents ff4c659d 8e45602d
......@@ -4,9 +4,6 @@
#include <set>
#include <vector>
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include "Comm/Splitter/SplitStrategy.h"
typedef std::vector<int> coordinates_t;
......@@ -52,12 +49,12 @@ public:
}
// 3. Compute centroids of partition and assign master
foreach(region_t & region, regions_) {
for(region_t & region : regions_) {
computeCentroid(region);
}
// 4. Create communicator groups
foreach(region_t & region, regions_) {
for(region_t & region : regions_) {
bool is_worker = false;
coordinates_t iter = region.origin;
......@@ -107,7 +104,7 @@ protected:
int split_in_direction = 0;
int max_ext_dir = 0;
foreach(region_t region, regions_) {
for(region_t region : regions_) {
for(int dim = 0; dim < topology_.getNumDimensions(); dim++) {
if(region.extensions[dim] > max_ext_dir) {
split_in_direction = dim;
......
......@@ -5,9 +5,6 @@
#include "Comm/Splitter/SplitStrategy.h"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>
......@@ -41,7 +38,7 @@ public:
int num_assigned_masters = 0;
// assign workers uniform at random to each master
foreach(int master_pid, master_pids) {
for(int master_pid : master_pids) {
if(master_pid == rank_) role_ = Role_t.POLLER;
......
......@@ -14,7 +14,6 @@
#include "Expression/Parser/skipper.hpp"
#include "Expression/Parser/function.hpp"
#include <boost/foreach.hpp>
#include <boost/function.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/variant/get.hpp>
......
......@@ -11,8 +11,6 @@
#include "boost/variant/get.hpp"
#include "boost/variant/variant.hpp"
#include "boost/smart_ptr.hpp"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include "Util/Types.h"
#include "Util/OptPilotException.h"
......@@ -43,7 +41,7 @@ struct FromFile {
return boost::make_tuple(0.0, false);
}
foreach(double obj_value, values_)
for(double obj_value : values_)
sum += obj_value;
return boost::make_tuple(sum, is_valid);
......
......@@ -4,7 +4,6 @@
=============================================================================*/
#include "evaluator.hpp"
#include <boost/foreach.hpp>
#include <boost/variant/apply_visitor.hpp>
namespace client { namespace code_gen {
......@@ -101,8 +100,7 @@ namespace client { namespace code_gen {
bool StackEvaluator::operator()(ast::function_call const& x) {
BOOST_FOREACH(ast::function_call_argument const& arg, x.args) {
for(ast::function_call_argument const& arg : x.args) {
if (!boost::apply_visitor(*this, arg))
return false;
}
......@@ -135,7 +133,7 @@ namespace client { namespace code_gen {
if (!boost::apply_visitor(*this, x.first))
return false;
BOOST_FOREACH(ast::operation const& oper, x.rest) {
for(ast::operation const& oper : x.rest) {
if (!(*this)(oper))
return false;
}
......
......@@ -60,8 +60,7 @@ namespace client { namespace code_gen
bool operator()(ast::function_call const& x) {
functions_.insert(x.function_name.name);
BOOST_FOREACH(ast::function_call_argument const& arg, x.args) {
for(ast::function_call_argument const& arg: x.args) {
if (!boost::apply_visitor(*this, arg))
return false;
//if (!(*this)(arg))
......@@ -75,7 +74,7 @@ namespace client { namespace code_gen
if (!boost::apply_visitor(*this, x.first))
return false;
BOOST_FOREACH(ast::operation const& oper, x.rest) {
for(ast::operation const& oper: x.rest) {
if (!(*this)(oper))
return false;
}
......
......@@ -10,8 +10,6 @@
#include "boost/variant/get.hpp"
#include "boost/variant/variant.hpp"
#include "boost/smart_ptr.hpp"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include "Util/Types.h"
#include "Util/SDDSReader.h"
......@@ -58,7 +56,7 @@ struct SumErrSq {
double sum = 0;
foreach(Measurement measurement, measurements_) {
for(Measurement measurement : measurements_) {
double sim_value = 0.0;
try {
sim_stats->getInterpolatedValue(
......
......@@ -61,11 +61,13 @@ public:
* @param[in] dim number of objectives
* @param[in] comms available to the optimizer
* @param[in] args the user passed on the command line
* @param[in] hypervolRef hypervolume reference point
*/
FixedPisaNsga2(Expressions::Named_t objectives,
Expressions::Named_t constraints,
DVarContainer_t dvars, size_t dim, Comm::Bundle_t comms,
CmdArguments_t args);
CmdArguments_t args,
std::vector<double> hypervolRef);
~FixedPisaNsga2();
......@@ -175,7 +177,7 @@ private:
DVarContainer_t dvars_m;
/// command line arguments specified by the user
CmdArguments_t args_;
CmdArguments_t args_m;
/// size of initial population
size_t alpha_m;
......@@ -205,6 +207,9 @@ private:
double conv_hvol_progress_;
double hvol_progress_;
/// hypervolume reference point
std::vector<double> hvol_ref_m;
/// file header for result files contains this parameter description
std::string file_param_descr_;
......
......@@ -11,8 +11,6 @@
#include <sys/stat.h>
#include "boost/algorithm/string.hpp"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
......@@ -32,15 +30,17 @@ FixedPisaNsga2<CO, MO>::FixedPisaNsga2(
Expressions::Named_t constraints,
DVarContainer_t dvars,
size_t dim, Comm::Bundle_t comms,
CmdArguments_t args)
CmdArguments_t args,
std::vector<double> hypervolRef)
: Optimizer(comms.opt)
, statistics_(new Statistics<size_t>("individuals"))
, comms_(comms)
, objectives_m(objectives)
, constraints_m(constraints)
, dvars_m(dvars)
, args_(args)
, args_m(args)
, dim_m(dim)
, hvol_ref_m(hypervolRef)
{
my_local_pid_ = 0;
MPI_Comm_rank(comms_.opt, &my_local_pid_);
......@@ -48,10 +48,10 @@ FixedPisaNsga2<CO, MO>::FixedPisaNsga2(
//FIXME: proper rand gen initialization (use boost?!)
srand(time(NULL) + comms_.island_id);
dump_freq_ = args->getArg<int>("dump-freq", 1, false);
dump_freq_ = args->getArg<int>("dump-freq", 1, false);
maxGenerations_m = args->getArg<int>("maxGenerations", true);
resultFile_m = args->getArg<std::string>("outfile", "-th_generation.dat", false);
resultDir_m = args->getArg<std::string>("outdir", "generations", false);
resultFile_m = args->getArg<std::string>("outfile", "-th_generation.dat", false);
resultDir_m = args->getArg<std::string>("outdir", "generations", false);
// create output directory if it does not exists
struct stat dirInfo;
......@@ -86,7 +86,7 @@ FixedPisaNsga2<CO, MO>::FixedPisaNsga2(
DVarContainer_t::iterator itr;
std::vector<std::string> dNames;
for(itr = dvars_m.begin(); itr != dvars_m.end(); itr++) {
std::string dName = boost::get<VAR_NAME>(itr->second);
file_param_descr_ += '%' + dName + ',';
......@@ -144,13 +144,14 @@ void FixedPisaNsga2<CO, MO>::initialize() {
// start poll loop
run_clock_start_ = boost::chrono::system_clock::now();
last_clock_ = boost::chrono::system_clock::now();
last_clock_ = boost::chrono::system_clock::now();
run();
// run has ended
bool compHyvol = (objectives_m.size() > (hyper_opt / 2 + 1));
if (compHyvol)
current_hvol_ =
variator_m->population()->computeHypervolume(comms_.island_id);
variator_m->population()->computeHypervolume(comms_.island_id, hvol_ref_m);
boost::chrono::duration<double> total =
boost::chrono::system_clock::now() - run_clock_start_;
......@@ -206,7 +207,7 @@ bool FixedPisaNsga2<CO, MO>::onMessage(MPI_Status status, size_t length) {
delete[] buffer;
std::set<unsigned int> new_state_ids;
foreach(individual ind, new_states) {
for (individual ind : new_states) {
// only insert individual if not already in population
if(variator_m->population()->isRepresentedInPopulation(ind.genes))
......@@ -262,9 +263,8 @@ bool FixedPisaNsga2<CO, MO>::onMessage(MPI_Status status, size_t length) {
ind->objectives.clear();
//XXX: check order of genes
reqVarContainer_t::iterator itr;
std::map<std::string, double> vars;
for(itr = res.begin(); itr != res.end(); itr++) {
reqVarContainer_t::iterator itr = res.begin();
for(; itr != res.end(); ++itr) {
// mark invalid if expression could not be evaluated or constraint does not hold
if(!itr->second.is_valid || (itr->second.value.size() > 1 && !itr->second.value[0])) {
std::ostringstream dump;
......@@ -321,7 +321,7 @@ void FixedPisaNsga2<CO, MO>::postPoll() {
bool compHyvol = (objectives_m.size() > (hyper_opt / 2 + 1));
if (compHyvol) {
double hvol =
variator_m->population()->computeHypervolume(comms_.island_id);
variator_m->population()->computeHypervolume(comms_.island_id, hvol_ref_m);
hvol_progress_ = fabs(current_hvol_ - hvol) / current_hvol_;
current_hvol_ = hvol;
}
......@@ -337,7 +337,7 @@ void FixedPisaNsga2<CO, MO>::postPoll() {
stats << "dt = " << dt.count() << "s, total = " << total.count()
<< "s" << std::endl;
if (compHyvol)
stats << "Hypervolume = " << current_hvol_ << std::endl;
stats << "Hypervolume = " << current_hvol_ << std::endl;
stats << "__________________________________________" << std::endl;
progress_->log(stats);
......@@ -370,7 +370,7 @@ void FixedPisaNsga2<CO, MO>::exchangeSolutionStates() {
typedef typename FixedPisaNsga2::Individual_t individual;
size_t num_masters = args_->getArg<size_t>("num-masters", 1, false);
size_t num_masters = args_m->getArg<size_t>("num-masters", 1, false);
if(num_masters <= 1 ||
exchangeSolStateFreq_m == 0 ||
......@@ -562,7 +562,8 @@ void FixedPisaNsga2<CO, MO>::runStateMachine() {
dumpPopulationToFile();
dumpPopulationToJSON();
variator_m->population()->clean_population();
// don't clean population otherwise final hypervolume calculation can't be done
//variator_m->population()->clean_population();
curState_m = VariatorStopped;
// notify pilot that we have converged
......@@ -660,7 +661,7 @@ template< template <class> class CO, template <class> class MO >
void FixedPisaNsga2<CO, MO>::dumpPopulationToFile() {
// only dump old data format if the user requests it
if(! args_->getArg<bool>("dump-dat", false, false)) return;
if(! args_m->getArg<bool>("dump-dat", false, false)) return;
typedef typename FixedPisaNsga2::Individual_t individual;
boost::shared_ptr<individual> temp;
......@@ -750,9 +751,9 @@ void FixedPisaNsga2<CO, MO>::dumpPopulationToJSON() {
for ( Expressions::Named_t::iterator it = constraints_m.begin();
it != constraints_m.end(); ++it )
{
std::string s = it->second->toString();
/// cleanup string to make json reader happy
s.erase(std::remove(s.begin(), s.end(), '"'), s.end());
std::string s = it->second->toString();
/// cleanup string to make json reader happy
s.erase(std::remove(s.begin(), s.end(), '"'), s.end());
file << "\t\t\"" << s << "\"";
......
......@@ -11,8 +11,6 @@
#include <fstream>
#include "boost/smart_ptr.hpp"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include "extlib/wfgHypervolume/hypervolume.h"
......@@ -33,12 +31,9 @@ class Population {
public:
Population() {
last_identity = 0;
hypervolume_ = 0.0;
}
~Population() {
clean_population();
}
~Population() {}
typedef typename Individual_t::genes_t genes_t;
typedef boost::shared_ptr<Individual_t> individual;
......@@ -119,7 +114,7 @@ public:
void commit_individuals(std::set<unsigned int> ids) {
foreach(unsigned int id, ids) {
for (unsigned int id : ids) {
//std::cout << "--+ committing id = " << id << "\xd";
individual ind = get_staging(id);
individuals.insert(ind_t(id, ind));
......@@ -128,9 +123,9 @@ public:
}
/**
* Remove all non-surviving individuals from the population and put ID's
* back in pool of free ID's.
* @param surviors to keep for next generation
* Remove all non-surviving individuals from the population and put IDs
* back in pool of free IDs.
* @param survivors to keep for next generation
*/
void keepSurvivors(std::set<unsigned int> survivors) {
......@@ -153,7 +148,7 @@ public:
//XXX: currently O(n): add a fast look-up table?
bool isRepresentedInPopulation(genes_t ind_genes) {
foreach(ind_t ind, individuals) {
for(ind_t ind : individuals) {
if( ind_genes == ind.second->genes )
return true;
}
......@@ -162,7 +157,9 @@ public:
}
double computeHypervolume(size_t island_id) {
double computeHypervolume(size_t island_id, const std::vector<double>& referencePoint) {
// protection check
if (individuals.empty() == true) return -1;
std::ofstream file;
std::ostringstream filename;
......@@ -186,8 +183,7 @@ public:
file.flush();
file.close();
hypervolume_ = Hypervolume::FromFile(filename.str());
return hypervolume_;
return Hypervolume::FromFile(filename.str(), referencePoint);
}
......@@ -214,12 +210,12 @@ public:
/// iterator end on population container
indItr_t end() { return individuals.end(); }
/// Remove (and cleanup) all individuals in the population
void clean_population() {
/* /// Remove (and cleanup) all individuals in the population */
/* void clean_population() { */
stagingArea.clear();
individuals.clear();
}
/* stagingArea.clear(); */
/* individuals.clear(); */
/* } */
private:
......@@ -229,16 +225,14 @@ private:
/// staging area for individuals probably joining population
std::map<unsigned int, individual > stagingArea;
/// queue to handle free individual ID's
/// queue to handle free individual IDs
std::queue<unsigned int> freeids;
/// last used (= next free) ID
unsigned int last_identity;
double hypervolume_;
/**
* Manages free individual ID's
* Manages free individual IDs
* @return lowest free ID
*/
unsigned int getFreeID() {
......
......@@ -113,13 +113,15 @@ public:
functionDictionary_t known_expr_funcs,
const DVarContainer_t &dvar,
const Expressions::Named_t &obj,
const Expressions::Named_t &cons)
const Expressions::Named_t &cons,
std::vector<double> hypervolRef = {})
: Poller(comm->mpiComm())
, comm_(comm)
, cmd_args_(args)
, objectives_(obj)
, constraints_(cons)
, dvars_(dvar)
, hypervolRef_(hypervolRef)
{
setup(known_expr_funcs);
}
......@@ -157,9 +159,11 @@ protected:
bool has_opt_converged_;
bool continue_polling_;
Expressions::Named_t objectives_;
Expressions::Named_t constraints_;
DVarContainer_t dvars_;
Expressions::Named_t objectives_; ///< objectives
Expressions::Named_t constraints_; ///< constraints
DVarContainer_t dvars_; ///< design variables
std::vector<double> hypervolRef_; ///< hypervolume reference point
// keep track of state of all workers
std::vector<bool> is_worker_idle_;
......@@ -248,7 +252,7 @@ protected:
boost::scoped_ptr<Opt_t> opt(
new Opt_t(objectives_, constraints_, dvars_, objectives_.size(),
comm_->getBundle(), cmd_args_));
comm_->getBundle(), cmd_args_, hypervolRef_));
opt->initialize();
std::cout << "Stop Opt.." << std::endl;
......
......@@ -6,8 +6,6 @@
#include "boost/smart_ptr.hpp"
#include "boost/tuple/tuple.hpp"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
namespace {
......@@ -80,7 +78,7 @@ namespace {
names.push_back("obj1");
names.push_back("ob3");
names.push_back("o2");
foreach(Expressions::SingleNamed_t expr, obj) {
for(Expressions::SingleNamed_t expr : obj) {
std::string expected_name = names.back();
EXPECT_EQ(expected_name, expr.first);
names.pop_back();
......
......@@ -15,7 +15,7 @@
/**
* \class CmdArguments
* \brief Parsing commando line arguments
* \brief Parsing command line arguments
*
* In order to have a flexible framework, each component implementation gets
* access to all command line arguments.
......
......@@ -4,7 +4,6 @@
#include "boost/algorithm/string.hpp"
#include "boost/tuple/tuple.hpp"
#include "boost/foreach.hpp"
#include "Expression/SumErrSq.h"
#include "Expression/FromFile.h"
......@@ -12,8 +11,6 @@
#include "CommentAnnotatedInputFileParser.h"
#include "Util/OptPilotException.h"
#define foreach BOOST_FOREACH
typedef std::pair<std::string, DVar_t> namedDVar_t;
CommentAnnotatedInputFileParser::CommentAnnotatedInputFileParser(
......@@ -31,17 +28,17 @@ void CommentAnnotatedInputFileParser::getProblem(Expressions::Named_t &objective
Expressions::Named_t &constraints,
DVarContainer_t &dvars) {
foreach(Expressions::SingleNamed_t obj, nobjectives_) {
for(Expressions::SingleNamed_t obj : nobjectives_) {
if(objectives_.count(obj.first) > 0)
objectives.insert(Expressions::SingleNamed_t(obj.first, obj.second));
}
foreach(Expressions::SingleNamed_t constr, nconstraints_) {
for(Expressions::SingleNamed_t constr : nconstraints_) {
if(constraints_.count(constr.first) > 0)
constraints.insert(Expressions::SingleNamed_t(constr.first, constr.second));
}
foreach(namedDVar_t dvar, ndvars_) {
for(namedDVar_t dvar : ndvars_) {
if(dvars_.count(dvar.first) > 0)
dvars.insert(namedDVar_t(dvar.first, dvar.second));
}
......@@ -137,7 +134,7 @@ std::set<std::string> CommentAnnotatedInputFileParser::getListAttribute(
boost::token_compress_on);
std::set<std::string> ret;
foreach(std::string list_attribute_name, attributes) {
for(std::string list_attribute_name : attributes) {
boost::trim(list_attribute_name);
ret.insert(list_attribute_name);
}
......
......@@ -5,9 +5,6 @@
#include <string>
#include <iostream>
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
template<typename T>
class Statistics {
......@@ -42,8 +39,7 @@ public:
std::cout << "Statistics: " << stat_name_ << std::endl;
T sum = 0;
std::pair<std::string, T> stat;
foreach(stat, statistics_) {
for(std::pair<std::string, T> stat : statistics_) {
sum += stat.second;
std::cout << "\t" << stat.first << " = " << stat.second << std::endl;
}
......@@ -56,8 +52,7 @@ public:
stream << "Statistics: " << stat_name_ << std::endl;
T sum = 0;
std::pair<std::string, T> stat;
foreach(stat, statistics_) {
for (std::pair<std::string, T> stat : statistics_) {
sum += stat.second;
stream << "\t" << stat.first << " = " << stat.second << std::endl;
}
......
......@@ -7,8 +7,6 @@
#include <map>
#include "boost/smart_ptr.hpp"
#include "boost/foreach.hpp"
#define foreach BOOST_FOREACH
#include "Util/Trace/TraceComponent.h"
......@@ -35,7 +33,7 @@ public:
}
void log(std::ostringstream &dump) {
foreach(boost::shared_ptr<TraceComponent> component, pipeline_) {
for(boost::shared_ptr<TraceComponent> component : pipeline_) {
component->execute(dump);
}
}
......
......@@ -22,6 +22,9 @@
*/
#include <string>
#include <vector>
// To do:
// - can we sort less often or reduce/optimise dominance checks?
// - should we use FPL's data structure?
......@@ -36,7 +39,7 @@
namespace Hypervolume {
double FromFile(std::string file);
double FromFile(std::string file, const std::vector<double>& referencePoint);
//Room for more functions to compute volumes
//without accessing external files
}
......@@ -138,7 +138,7 @@ double Cyclotron::getPZinit() const {
}
void Cyclotron::setTrimCoilThreshold(double trimCoilThreshold) {
trimCoilThreshold_m = trimCoilThreshold;
trimCoilThreshold_m = 10.0 * trimCoilThreshold; // convert from Tesla to kGauss
}
double Cyclotron::getTrimCoilThreshold() const {
......@@ -452,8 +452,13 @@ bool Cyclotron::apply(const Vector_t &R, const Vector_t &P, const double &t, Vec
// bt = -( btf - btcub );