diff --git a/include/parpeamici/optimizationApplication.h b/include/parpeamici/optimizationApplication.h index 7b4f8678..f7f470fe 100644 --- a/include/parpeamici/optimizationApplication.h +++ b/include/parpeamici/optimizationApplication.h @@ -148,14 +148,15 @@ class OptimizationApplication { protected: // command line option parsing - const char *shortOptions = "dhvmt:o:s:"; - struct option const longOptions[9] = { + const char *shortOptions = "dhvmt:o:s:g:"; + struct option const longOptions[10] = { {"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'}, + {"gradient-check", required_argument, nullptr, 'g'}, {"outfile-prefix", required_argument, nullptr, 'o'}, {"first-start-idx", required_argument, nullptr, 's'}, {nullptr, 0, nullptr, 0}}; @@ -165,6 +166,8 @@ class OptimizationApplication { gradientCheck }; + std::vector para_ind {}; + std::string dataFileName; std::string resultFileName; @@ -175,6 +178,7 @@ class OptimizationApplication { std::unique_ptr problem; H5::H5File h5File = 0; OperationType operationType = OperationType::parameterEstimation; + int num_parameter_checks = 1; LoadBalancerMaster loadBalancer; bool withMPI = false; }; diff --git a/src/parpeamici/optimizationApplication.cpp b/src/parpeamici/optimizationApplication.cpp index 0e472448..8d48030d 100644 --- a/src/parpeamici/optimizationApplication.cpp +++ b/src/parpeamici/optimizationApplication.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include namespace parpe { @@ -110,6 +112,21 @@ int OptimizationApplication::parseCliOptionsPostMpiInit(int argc, char **argv) { if (strcmp(optarg, "gradient_check") == 0) operationType = OperationType::gradientCheck; break; + case 'g': { + operationType = OperationType::gradientCheck; + /* + Assuming the next argument is of the type n1,n2,...,nX. + This will be a string of comma separated ints, that need + to be converted to std::vector. + */ + std::stringstream ss(optarg); + + for (int i; ss >> i;) { + para_ind.push_back(i); + if (ss.peek() == ',') + ss.ignore(); + } + } break; case 'o': resultFileName = processResultFilenameCommandLineArgument(optarg); break; @@ -230,9 +247,10 @@ int OptimizationApplication::run(int argc, char **argv) { void OptimizationApplication::runMaster() { switch (operationType) { case OperationType::gradientCheck: { - const int numParameterIndicesToCheck = 10000; - optimizationProblemGradientCheckMultiEps( - problem.get(), numParameterIndicesToCheck); + std::vector multi_eps {1e-1, 1e-3, 1e-4, 1e-5, 1e-7}; + optimizationProblemGradientCheckMultiEps(problem.get(), + para_ind, + multi_eps); break; } case OperationType::parameterEstimation: @@ -266,8 +284,10 @@ void OptimizationApplication::runSingleProcess() { switch (operationType) { case OperationType::gradientCheck: { const int numParameterIndicesToCheck = 10000; - optimizationProblemGradientCheckMultiEps( - problem.get(), numParameterIndicesToCheck); + const double epsilon = 1e-5; + optimizationProblemGradientCheck(problem.get(), + numParameterIndicesToCheck, + epsilon); break; } case OperationType::parameterEstimation: diff --git a/src/parpeoptimization/optimizationProblem.cpp b/src/parpeoptimization/optimizationProblem.cpp index bc0daf5c..b11b474d 100644 --- a/src/parpeoptimization/optimizationProblem.cpp +++ b/src/parpeoptimization/optimizationProblem.cpp @@ -58,7 +58,7 @@ void optimizationProblemGradientCheckMultiEps(OptimizationProblem *problem, int numParameterIndicesToCheck ) { // set eps - std::vector multi_eps {1e-1, 1e-3, 1e-5, 1e-7, 1e-9}; + std::vector multi_eps {1e-1, 1e-3, 1e-4, 1e-5, 1e-7}; // setting the number of parameters to the minimum of // numParamaterIndicesToCheck and dimension of the problem