Program Listing for File optimizationOptions.h

Return to documentation for file (include/parpeoptimization/optimizationOptions.h)

#ifndef OPTIMIZATIONOPTIONS_H
#define OPTIMIZATIONOPTIONS_H

#include <parpecommon/hdf5Misc.h>

#include <map>
#include <string>
#include <functional>
#include <algorithm>
#include <memory>
#include <vector>

namespace parpe {

class Optimizer;

enum class optimizerName {
    OPTIMIZER_IPOPT,
    OPTIMIZER_CERES,
    OPTIMIZER_DLIB,
    OPTIMIZER_TOMS611,
    OPTIMIZER_FSQP,
    OPTIMIZER_FIDES,
    OPTIMIZER_MINIBATCH_1 = 10
};



class OptimizationOptions {
  public:
    OptimizationOptions() = default;

    std::unique_ptr<Optimizer> createOptimizer() const;

    optimizerName optimizer = optimizerName::OPTIMIZER_IPOPT;

    char *logFile = nullptr;

    bool printToStdout = true;

    int maxOptimizerIterations = 100;

    static std::unique_ptr<OptimizationOptions> fromHDF5(std::string const& fileName);
    static std::unique_ptr<OptimizationOptions> fromHDF5(const H5::H5File &file, const std::string &path = "/optimizationOptions");

    static std::vector<double> getStartingPoint(const H5::H5File &file, int index);

    int numStarts = 1;

    int retryOptimization = false;

    int hierarchicalOptimization = true;

    int multistartsInParallel = true;

    std::string toString();

    int getIntOption(const std::string &key);
    double getDoubleOption(const std::string &key);
    std::string getStringOption(const std::string& key);

    void setOption(const std::string &key, int value);
    void setOption(const std::string &key, double value);
    void setOption(const std::string& key, std::string value);

    template <typename T>
    void for_each(std::function< void (const std::pair<const std::string, const std::string>, T)> f, T arg) const
    {
        std::for_each(options.cbegin(), options.cend(),
                      std::bind(f, std::placeholders::_1, arg));
    }

private:
    std::map<std::string, std::string> options;
};

std::unique_ptr<Optimizer> optimizerFactory(optimizerName optimizer);

void printAvailableOptimizers(const std::string &prefix = "");
} // namespace parpe

#endif // OPTIMIZATIONOPTIONS_H