Program Listing for File optimizationApplication.h¶
↰ Return to documentation for file (include/parpeamici/optimizationApplication.h
)
#ifndef OPTIMIZATIONAPPLICATION_H
#define OPTIMIZATIONAPPLICATION_H
#include <parpecommon/parpeConfig.h>
#include <parpeamici/multiConditionProblem.h>
#include <parpeamici/hierarchicalOptimization.h>
#ifdef PARPE_ENABLE_MPI
#include <parpeloadbalancer/loadBalancerMaster.h>
#include <parpeloadbalancer/loadBalancerWorker.h>
#endif
#include <getopt.h>
#include <string>
namespace parpe {
#ifndef PARPE_ENABLE_MPI
// Workaround to allow building without MPI. Should be cleaned up.
using LoadBalancerMaster = int;
using LoadBalancerWorker = int;
#endif
// TODO: DistributedOptimizationApplication
class OptimizationApplication {
public:
OptimizationApplication() = default;
virtual ~OptimizationApplication();
virtual void initProblem(std::string const& inFileArgument,
std::string const& outFileArgument) = 0;
int run(int argc, char **argv);
virtual void runMaster();
#ifdef PARPE_ENABLE_MPI
virtual void runWorker();
#endif
virtual void runSingleProcess();
protected:
virtual void finalizeTiming(double wallTimeSeconds, double cpuTimeSeconds);
std::string
processResultFilenameCommandLineArgument(const char *commandLineArg);
bool isMaster();
bool isWorker();
static void initMPI(int *argc, char ***argv);
virtual int parseCliOptionsPreMpiInit(int argc, char **argv);
virtual int parseCliOptionsPostMpiInit(int argc, char **argv);
virtual void printUsage(char* const argZero);
virtual void logParPEVersion(const H5::H5File &file) const;
private:
int init(int argc, char **argv);
void runMultiStarts() const;
protected:
// command line option parsing
const char *shortOptions = "dhvmt:o:s:";
struct option const longOptions[9] = {
{"debug", no_argument, nullptr, 'd'},
{"print-worklist", no_argument, nullptr, 'p'},
{"help", no_argument, nullptr, 'h'},
{"version", no_argument, nullptr, 'v'},
{"mpi", no_argument, nullptr, 'm'},
{"task", required_argument, nullptr, 't'},
{"outfile-prefix", required_argument, nullptr, 'o'},
{"first-start-idx", required_argument, nullptr, 's'},
{nullptr, 0, nullptr, 0}};
enum class OperationType {
parameterEstimation,
gradientCheck
};
std::string dataFileName;
std::string resultFileName;
int first_start_idx {0};
// the need to be filled in by sub
std::unique_ptr<MultiStartOptimizationProblem> multiStartOptimizationProblem;
std::unique_ptr<OptimizationProblem> problem;
H5::H5File h5File = 0;
OperationType operationType = OperationType::parameterEstimation;
LoadBalancerMaster loadBalancer;
bool withMPI = false;
};
void saveTotalCpuTime(const H5::H5File &file, const double timeInSeconds);
} // namespace parpe
#endif // OPTIMIZATIONAPPLICATION_H