From 4d1fe2b3f5fed9f339fe67ed7e5d58ea74a8ac43 Mon Sep 17 00:00:00 2001 From: XavierAdriaens <xavier.adriaens@doct.uliege.be> Date: Mon, 28 Nov 2022 14:22:46 +0100 Subject: [PATCH] Decreasing additive penalization --- .../model/regularization/regularization.cpp | 27 +++- common/model/regularization/regularization.h | 5 +- common/statefunctional.cpp | 13 ++ common/statefunctional.h | 1 + specific/model/regularization/flooding.cpp | 16 +-- specific/model/regularization/flooding.h | 1 - specific/model/regularization/tikhonov.cpp | 18 +-- specific/model/regularization/tikhonov.h | 2 - .../model/regularization/totalvariation.cpp | 13 +- .../model/regularization/totalvariation.h | 1 - .../newGlobalMinimumSearch.h | 4 +- .../{sequentialscale.cpp => sequential.cpp} | 117 ++++++++++-------- .../{sequentialscale.h => sequential.h} | 24 ++-- 13 files changed, 122 insertions(+), 120 deletions(-) rename specific/optimization/globalminimumsearch/{sequentialscale.cpp => sequential.cpp} (64%) rename specific/optimization/globalminimumsearch/{sequentialscale.h => sequential.h} (73%) diff --git a/common/model/regularization/regularization.cpp b/common/model/regularization/regularization.cpp index 127f910..aa07be1 100644 --- a/common/model/regularization/regularization.cpp +++ b/common/model/regularization/regularization.cpp @@ -11,7 +11,7 @@ using namespace gmshfem::equation; /* * RegularizationInterface */ -RegularizationInterface::RegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : _config(config) +RegularizationInterface::RegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : _config(config), _m_size(_config->model_size()), _lambda(_m_size,0.) { if(!gmshFem.userDefinedParameter(_integrationType, "integration_type")) { @@ -33,6 +33,21 @@ RegularizationInterface::RegularizationInterface(const ConfigurationInterface* c { throw Exception("Regularization integration degree (boundary) could not be found."); } + for (unsigned int c = 0; c < _m_size; c++) + { + std::string suffix1 = "c"+std::to_string(c); + std::string root = "regularization_lambda"; + if(!( + gmshFem.userDefinedParameter(_lambda[c], root) || + gmshFem.userDefinedParameter(_lambda[c], root+suffix) + || + gmshFem.userDefinedParameter(_lambda[c], root+suffix1) || + gmshFem.userDefinedParameter(_lambda[c], root+suffix1+suffix) + )) + { + throw Exception("Regularization strength could not be found."); + } + } }; std::complex<double> RegularizationInterface::directional(const Sensitivity& sensitivity, const ModelFunction& dm2, Support support) const @@ -53,11 +68,19 @@ std::complex<double> RegularizationInterface::directional(const Sensitivity& sen return sum; } +void RegularizationInterface::lambda(double lambda,unsigned int c) +{ + if(c<_m_size) {_lambda[c]=lambda;} + else + { + throw Exception("Component c"+std::to_string(c)+" does not exsit."); + } +} /* * DifferentialRegularizationInterface */ -DifferentialRegularizationInterface::DifferentialRegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : RegularizationInterface(config, gmshFem, suffix), _m_size(_config->model_size()), _systemAreUpToDate(false), _systemAreFactorized(false) +DifferentialRegularizationInterface::DifferentialRegularizationInterface(const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : RegularizationInterface(config, gmshFem, suffix),_systemAreUpToDate(false), _systemAreFactorized(false) { for (unsigned int c = 0; c < _m_size; c++) { diff --git a/common/model/regularization/regularization.h b/common/model/regularization/regularization.h index 75e8853..fa31a9c 100644 --- a/common/model/regularization/regularization.h +++ b/common/model/regularization/regularization.h @@ -15,6 +15,8 @@ class RegularizationInterface { protected: const ConfigurationInterface* const _config; + const unsigned int _m_size; + std::vector<double> _lambda; std::string _integrationType; unsigned int _integrationDegreeBlk; unsigned int _integrationDegreeBnd; @@ -31,6 +33,8 @@ public: virtual void modelIsObsolete() {}; virtual void modelPerturbationIsObsolete() {}; + + void lambda(double lambda,unsigned int c=0); }; /* @@ -39,7 +43,6 @@ public: class DifferentialRegularizationInterface: public RegularizationInterface { protected: - const unsigned int _m_size; ModelField _k; std::array<std::array<ModelField,2>,3> _j; diff --git a/common/statefunctional.cpp b/common/statefunctional.cpp index d9f6a35..16fdf15 100644 --- a/common/statefunctional.cpp +++ b/common/statefunctional.cpp @@ -122,6 +122,19 @@ void StateFunctional<T_Physic>::objectiveIsObsolete() _mu.isObsolete(modelNoMoreUpToDate); } +template<Physic T_Physic> +void StateFunctional<T_Physic>::regularizationIsObsolete() +{ + if(_regularization != nullptr) + { + std::array<bool,3> sensitivityNoMoreUpToDate = {true, true, true}; + _suv[_nf]->isObsolete(sensitivityNoMoreUpToDate); + _su.isObsolete(sensitivityNoMoreUpToDate); + std::array<bool,4> modelNoMoreUpToDate = {false, false, true, true}; + _mu.isObsolete(modelNoMoreUpToDate); + } +} + template<Physic T_Physic> void StateFunctional<T_Physic>::modelIsObsolete() { diff --git a/common/statefunctional.h b/common/statefunctional.h index 6f9eb15..28031e7 100644 --- a/common/statefunctional.h +++ b/common/statefunctional.h @@ -38,6 +38,7 @@ public: void innerproductIsObsolete(); void objectiveIsObsolete(); + void regularizationIsObsolete(); void write_model(Type type, std::string name); void write_data(Type type, std::string name, std::string fmt = "csv"); diff --git a/specific/model/regularization/flooding.cpp b/specific/model/regularization/flooding.cpp index a47afd8..3bc81f9 100644 --- a/specific/model/regularization/flooding.cpp +++ b/specific/model/regularization/flooding.cpp @@ -15,22 +15,8 @@ using namespace gmshfem::post; */ namespace flooding { - Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _lambda(_m_size,0.) + Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix) { - for (unsigned int c = 0; c < _m_size; c++) - { - std::string suffix1 = "c"+std::to_string(c); - if(!( - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda") || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix) - || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1) || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1+suffix) - )) - { - throw Exception("Regularization scale could not be found."); - } - } if(!( gmshFem.userDefinedParameter(_p, "regularization_p") || gmshFem.userDefinedParameter(_p, "regularization_p"+suffix) diff --git a/specific/model/regularization/flooding.h b/specific/model/regularization/flooding.h index fb9fd5d..d4a43d0 100644 --- a/specific/model/regularization/flooding.h +++ b/specific/model/regularization/flooding.h @@ -16,7 +16,6 @@ namespace flooding { private: double _p; - std::vector<double> _lambda; public: Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix=""); diff --git a/specific/model/regularization/tikhonov.cpp b/specific/model/regularization/tikhonov.cpp index 1ff88fd..0afdc23 100644 --- a/specific/model/regularization/tikhonov.cpp +++ b/specific/model/regularization/tikhonov.cpp @@ -14,23 +14,7 @@ using namespace gmshfem::post; */ namespace tikhonov { - Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _lambda(_m_size,0.) - { - for (unsigned int c = 0; c < _m_size; c++) - { - std::string suffix1 = "c"+std::to_string(c); - if(!( - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda") || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix) - || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1) || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1+suffix) - )) - { - throw Exception("Regularization scale could not be found."); - } - } - }; + Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix) {}; double Regularization::performance(const ModelField& m) { diff --git a/specific/model/regularization/tikhonov.h b/specific/model/regularization/tikhonov.h index 2268bfe..14ee7cf 100644 --- a/specific/model/regularization/tikhonov.h +++ b/specific/model/regularization/tikhonov.h @@ -14,8 +14,6 @@ namespace tikhonov { class Regularization final: public DifferentialRegularizationInterface { - private: - std::vector<double> _lambda; public: Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix=""); diff --git a/specific/model/regularization/totalvariation.cpp b/specific/model/regularization/totalvariation.cpp index 37f9d3c..9ea6872 100644 --- a/specific/model/regularization/totalvariation.cpp +++ b/specific/model/regularization/totalvariation.cpp @@ -15,22 +15,11 @@ using namespace gmshfem::post; */ namespace totalvariation { - Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _lambda(_m_size,0.), _beta(_m_size,0.) + Regularization::Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix) : DifferentialRegularizationInterface(config,m,gmshFem,suffix), _beta(_m_size,0.) { for (unsigned int c = 0; c < _m_size; c++) { std::string suffix1 = "c"+std::to_string(c); - if(!( - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda") || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix) - || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1) || - gmshFem.userDefinedParameter(_lambda[c], "regularization_lambda"+suffix1+suffix) - )) - { - throw Exception("Regularization scale could not be found."); - } - if(!( gmshFem.userDefinedParameter(_beta[c], "regularization_beta") || gmshFem.userDefinedParameter(_beta[c], "regularization_beta"+suffix) diff --git a/specific/model/regularization/totalvariation.h b/specific/model/regularization/totalvariation.h index 5494160..9ccd5f6 100644 --- a/specific/model/regularization/totalvariation.h +++ b/specific/model/regularization/totalvariation.h @@ -15,7 +15,6 @@ namespace totalvariation class Regularization final: public DifferentialRegularizationInterface { private: - std::vector<double> _lambda; std::vector<double> _beta; public: Regularization(const ConfigurationInterface* const config, const ModelField& m, const gmshfem::common::GmshFem& gmshFem, std::string suffix=""); diff --git a/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h b/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h index c2c6880..7243d71 100644 --- a/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h +++ b/specific/optimization/globalminimumsearch/newGlobalMinimumSearch.h @@ -9,7 +9,7 @@ #include "Exception.h" //FWI Library -#include "sequentialscale.h" +#include "sequential.h" template<Physic T_Physic> GlobalMinimumSearchInterface<T_Physic>* newGlobalMinimumSearch(const std::string& name, const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, const std::string& suffix = "") @@ -19,7 +19,7 @@ GlobalMinimumSearchInterface<T_Physic>* newGlobalMinimumSearch(const std::string { throw gmshfem::common::Exception("Global minimum search type could not be found."); } - if(minimumsearch=="sequentialscale"){return new sequentialscale::GlobalMinimumSearch<T_Physic>(name, config, gmshFem, suffix);} + if(minimumsearch=="sequential" || minimumsearch=="mono"){return new sequential::GlobalMinimumSearch<T_Physic>(name, config, gmshFem, suffix);} else { throw gmshfem::common::Exception("Global minimum search " + minimumsearch + " is not valid."); diff --git a/specific/optimization/globalminimumsearch/sequentialscale.cpp b/specific/optimization/globalminimumsearch/sequential.cpp similarity index 64% rename from specific/optimization/globalminimumsearch/sequentialscale.cpp rename to specific/optimization/globalminimumsearch/sequential.cpp index 6c00c58..8dfc864 100644 --- a/specific/optimization/globalminimumsearch/sequentialscale.cpp +++ b/specific/optimization/globalminimumsearch/sequential.cpp @@ -1,8 +1,9 @@ //GmshFEM Library #include "Exception.h" +#include "Message.h" //GmshFWI Library -#include "sequentialscale.h" +#include "sequential.h" #include "../../data/objective/newObjective.h" #include "../../model/innerproduct/newInnerProduct.h" #include "../../model/regularization/newRegularization.h" @@ -14,7 +15,7 @@ using namespace gmshfem; using namespace gmshfem::common; -namespace sequentialscale +namespace sequential { /* * class GlobalMinimumSearchHistoryLine2 @@ -23,11 +24,11 @@ namespace sequentialscale { if(write_header) { - file << "Performance" << "Relative decrease" << "Scale" << "Objective" << "Regularization" << csv::endl; + file << "Performance" << "Relative decrease" << "Sequential parameter" << "Objective" << "Regularization" << csv::endl; } else { - file << performance << relDecrease << scale << perf_obj << perf_reg << csv::endl; + file << performance << relDecrease << sequential_parameter << perf_obj << perf_reg << csv::endl; } } @@ -38,12 +39,12 @@ namespace sequentialscale { if(write_header) { - file << "Success" << "Scale number" << csv::endl; + file << "Success" << "Scale number" << "Parameter type" << csv::endl; file << "History" << csv::endl; } else { - file << success << nscale << csv::endl; + file << success << nseq << type << csv::endl; if(!history.empty()) { history.begin()->write(file,true); @@ -82,45 +83,47 @@ namespace sequentialscale template<Physic T_Physic> GlobalMinimumSearch<T_Physic>::GlobalMinimumSearch(const std::string& name, const ConfigurationInterface* const config, const GmshFem& gmshFem, const std::string& suffix) : GlobalMinimumSearchInterface<T_Physic>::GlobalMinimumSearchInterface(name,config), _history( new GlobalMinimumSearchHistory() ), _gmshFem(gmshFem), _suffix(suffix) { - if(!( - gmshFem.userDefinedParameter(_n_scale, "globalminimum_n_scale") || - gmshFem.userDefinedParameter(_n_scale, "globalminimum_n_scale"+suffix) - ) - ) + std::string minimumsearch; + gmshFem.userDefinedParameter(minimumsearch, "globalminimumsearch"); + if(minimumsearch=="mono") { - throw Exception("Number of scale for group "+suffix+" could not be found."); + _type = "none"; + _n_seq = 1; + _seq_parameters.resize(_n_seq); + _seq_parameters[0]=0.; } - if(!( - gmshFem.userDefinedParameter(_minNscale, "globalminimum_minNscale") || - gmshFem.userDefinedParameter(_minNscale, "globalminimum_minNscale"+suffix) - ) - ) + else { - msg::warning << "Minimum number of scales (globalminimum_minNscale) could not be found." << msg::endl; - _minNscale = 0; - } - if(!( - gmshFem.userDefinedParameter(_relDecreaseThreshold, "globalminimum_relDecreaseThreshold") || - gmshFem.userDefinedParameter(_relDecreaseThreshold, "globalminimum_relDecreaseThreshold"+suffix) + _type = "innerproduct_strength"; + if(!( + gmshFem.userDefinedParameter(_type, "globalminimum_type") || + gmshFem.userDefinedParameter(_type, "globalminimum_type"+suffix) ) - ) - { - msg::warning << "Global minimum relative decrease threshold (relDecreaseThreshold) could not be found." << msg::endl; - _relDecreaseThreshold = 0.0; - } - _scale.resize(_n_scale); - for (unsigned int sc = 0; sc < _n_scale; sc++) - { - std::string suffix1 = std::to_string(sc); + ) + { + msg::warning << "Sequential globalminimum parameter type could not be found. Default is used (innerproduct_strength)." << msg::endl; + } if(!( - _gmshFem.userDefinedParameter(_scale[sc], "scale") - || - _gmshFem.userDefinedParameter(_scale[sc], "scale"+suffix) - || - _gmshFem.userDefinedParameter(_scale[sc], "scale"+suffix+suffix1) - )) + gmshFem.userDefinedParameter(_n_seq, "globalminimum_n_seq") || + gmshFem.userDefinedParameter(_n_seq, "globalminimum_n_scale"+suffix) + ) + ) + { + throw Exception("Number of sequence for group "+suffix+" could not be found."); + } + _seq_parameters.resize(_n_seq); + for (unsigned int sq = 0; sq < _n_seq; sq++) { - throw Exception("Scale "+suffix1+" could not be found."); + std::string suffix1 = "s"+std::to_string(sq); + std::string root = "globalminimum_sequential_parameter"; + if(!( + _gmshFem.userDefinedParameter(_seq_parameters[sq],root+suffix1) + || + _gmshFem.userDefinedParameter(_seq_parameters[sq],root+suffix+suffix1) + )) + { + throw Exception("Sequential parameter "+suffix1+" could not be found."); + } } } } @@ -128,7 +131,7 @@ namespace sequentialscale template<Physic T_Physic> void GlobalMinimumSearch<T_Physic>::operator()(ModelField* const m, const Data<T_Physic>& d0, const std::vector<EquationInterface<T_Physic>*>& equation) const { - msg::print << "Search global minimum (sequential scale)" << msg::endl; + msg::print << "Search global minimum (sequential)" << msg::endl; msg::indent(); unsigned int n_freq = d0.nf(); @@ -155,16 +158,24 @@ namespace sequentialscale historyline.emplace_back(js,0.,0.,statefunctional->performance_objective(),statefunctional->performance_regularization()); double rel_djs = 0.; bool success = false; - unsigned int sc = 0; - for (sc = 0; sc < _n_scale; sc++) + unsigned int sq = 0; + for (sq = 0; sq < _n_seq; sq++) { - std::string suffix1 = std::to_string(sc); - msg::print << "--- Scale #" << suffix1 << " = " << _scale[sc] << " --- " << msg::endl; + std::string suffix1 = std::to_string(sq); + msg::print << "--- Sequence #" << suffix1 << ": " << _seq_parameters[sq] << " --- " << msg::endl; msg::indent(); - innerproduct->scale(_scale[sc]); - objective->scale(_scale[sc]); - statefunctional->innerproductIsObsolete(); - statefunctional->objectiveIsObsolete(); + + if (_type == "none"){} + else if(_type=="innerproduct_strength") + { + innerproduct->scale(_seq_parameters[sq]); + statefunctional->innerproductIsObsolete(); + } + else if(_type=="regularization_strength") + { + regularization->lambda(_seq_parameters[sq]); + statefunctional->regularizationIsObsolete(); + } minimumsearch->name(_name+"g"+_suffix+"s"+suffix1); js_1=js; (*minimumsearch)(m, functional, descentsearch, linesearch); @@ -173,15 +184,11 @@ namespace sequentialscale //statefunctional->write_data(Type::FS,_name+"_dg"+_suffix+"s"+suffix1,"pos"); rel_djs = 2. * (js_1-js) / (js_1+js); msg::print << "relative decrease = " << rel_djs << msg::endl; - historyline.emplace_back(js,rel_djs,_scale[sc],statefunctional->performance_objective(),statefunctional->performance_regularization()); + historyline.emplace_back(js,rel_djs,_seq_parameters[sq],statefunctional->performance_objective(),statefunctional->performance_regularization()); msg::unindent(); - if(rel_djs < _relDecreaseThreshold && (sc+1) >= _minNscale) - { - success=true; - break; - } } - _history->emplace_back(success,sc,historyline); + success=true; + _history->emplace_back(success,sq,historyline); minimumsearch->history()->write(_name+"_localminimum_historyg" + _suffix); descentsearch->history()->write(_name+"_descent_historyg" + _suffix); diff --git a/specific/optimization/globalminimumsearch/sequentialscale.h b/specific/optimization/globalminimumsearch/sequential.h similarity index 73% rename from specific/optimization/globalminimumsearch/sequentialscale.h rename to specific/optimization/globalminimumsearch/sequential.h index 0b56a21..184c3cc 100644 --- a/specific/optimization/globalminimumsearch/sequentialscale.h +++ b/specific/optimization/globalminimumsearch/sequential.h @@ -1,5 +1,5 @@ -#ifndef H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIALSCALE -#define H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIALSCALE +#ifndef H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIAL +#define H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIAL //GmshFEM Library #include "GmshFem.h" @@ -8,7 +8,7 @@ //GmshFWI Library #include "../../../common/optimization/globalminimumsearch.h" -namespace sequentialscale +namespace sequential { /* * class GlobalMinimumSearchHistoryLine2 @@ -18,11 +18,11 @@ namespace sequentialscale public: const double performance; const double relDecrease; - const double scale; + const double sequential_parameter; const double perf_obj; const double perf_reg; - GlobalMinimumSearchHistoryLine2(double performance_init, double relDecrease_init, double scale_init, double perf_obj_init, double perf_reg_init) : performance(performance_init), relDecrease(relDecrease_init), scale(scale_init), perf_obj(perf_obj_init), perf_reg(perf_reg_init) {}; + GlobalMinimumSearchHistoryLine2(double performance_init, double relDecrease_init, double sequential_parameter_init, double perf_obj_init, double perf_reg_init) : performance(performance_init), relDecrease(relDecrease_init), sequential_parameter(sequential_parameter_init), perf_obj(perf_obj_init), perf_reg(perf_reg_init) {}; void write(gmshfem::common::CSVio& file, bool write_header=false) const; }; @@ -34,10 +34,11 @@ namespace sequentialscale { public: const bool success; - const unsigned int nscale; + const std::string type; + const unsigned int nseq; const std::vector<GlobalMinimumSearchHistoryLine2> history; - GlobalMinimumSearchHistoryLine(bool success_init, unsigned int nscale_init, const std::vector<GlobalMinimumSearchHistoryLine2>& history_init) : success(success_init), nscale(nscale_init), history(history_init) {}; + GlobalMinimumSearchHistoryLine(bool success_init, unsigned int nseq_init, const std::vector<GlobalMinimumSearchHistoryLine2>& history_init) : success(success_init), nseq(nseq_init), history(history_init) {}; void write(gmshfem::common::CSVio& file, bool write_header=false) const; }; @@ -61,13 +62,12 @@ namespace sequentialscale using GlobalMinimumSearchInterface<T_Physic>::_name; using GlobalMinimumSearchInterface<T_Physic>::_config; - unsigned int _n_scale; - std::vector<double> _scale; - unsigned int _minNscale; - double _relDecreaseThreshold; + unsigned int _n_seq; + std::vector<double> _seq_parameters; GlobalMinimumSearchHistory* const _history; const gmshfem::common::GmshFem& _gmshFem; + std::string _type; std::string _suffix; public: GlobalMinimumSearch(const std::string& name, const ConfigurationInterface* const config, const gmshfem::common::GmshFem& gmshFem, const std::string& suffix); @@ -79,4 +79,4 @@ namespace sequentialscale }; }; -#endif // H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIALSCALE +#endif // H_SPECIFIC_OPTIMIZATION_GLOBALMINIMUMSEARCH_SEQUENTIAL -- GitLab