From d63e10d117a6c1cd9f1ef8e97a6edabb2a2ef67f Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 7 Jul 2022 11:41:01 -0500 Subject: [PATCH 01/19] starting on sqp dev again --- src/libs/common/utilities.cpp | 30 ++++++++++---------- src/libs/pestpp_common/SQP.cpp | 3 +- src/libs/pestpp_common/pest_data_structs.cpp | 4 +-- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/libs/common/utilities.cpp b/src/libs/common/utilities.cpp index a40425be9..39da2b129 100644 --- a/src/libs/common/utilities.cpp +++ b/src/libs/common/utilities.cpp @@ -377,7 +377,7 @@ map read_twocol_ascii_to_map(string filename, int header_lines, { map result; ifstream fin(filename); - if (!fin.good()) + if (!fin.good()) throw runtime_error("could not open file " + filename + " for reading"); string line; double value; @@ -406,7 +406,7 @@ vector read_onecol_ascii_to_vector(std::string filename) { vector result; ifstream fin(filename); - if (!fin.good()) + if (!fin.good()) throw runtime_error("could not open file " + filename + " for reading"); string line; vector tokens; @@ -430,7 +430,7 @@ void read_res(string& res_filename, Observations& obs) { map result; ifstream fin(res_filename); - if (!fin.good()) + if (!fin.good()) throw runtime_error("could not open residuals file " + res_filename + " for reading"); vector tokens; string line, name; @@ -720,7 +720,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector stringstream ss; ifstream in; in.open(filename.c_str(), ifstream::binary); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary() error opening binary file " << filename << " for reading"; @@ -754,7 +754,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector for (int i = 0; i < n_obs_and_pi; i++) { in.read((char*)&(name_size), sizeof(name_size)); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format error reading size column name size for column number " << i; @@ -769,7 +769,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector { char* col_name = new char[col_name_size]; in.read(col_name, col_name_size); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format error reading column name for column number " << i << ", size " << col_name_size; @@ -796,7 +796,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector } in.read((char*)&(name_size), sizeof(name_size)); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format incomplete record: error reading row name size for row number " << i << "...continuing"; @@ -805,7 +805,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector } char* row_name = new char[name_size]; in.read(row_name, name_size); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format incomplete record: error reading row name for row number " << i << "...continuing"; @@ -815,7 +815,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector name = string(row_name, name_size); pest_utils::strip_ip(name); pest_utils::upper_ip(name); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format incomplete record: error skipping values for row " << i << "...continuing "; @@ -828,7 +828,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector in.read(row_name, sizeof(double)* col_names.size()); if (in.eof()) break; - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format incomplete record: error skipping values for row " << i << "...continuing "; @@ -852,7 +852,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector in.seekg(sizeof(int) + row_names[i].size(), ios_base::cur); for (int j = 0; j < col_names.size(); j++) { - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "read_dense_binary(), dense format incomplete record: error reading row,col value " << i << "," << j << "...continuing "; @@ -871,7 +871,7 @@ void read_binary_matrix_header(const string& filename, int& tmp1, int& tmp2, int stringstream ss; ifstream in; in.open(filename.c_str(), ifstream::binary); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "pest_utils::read_binary_matrix_header() error opening binary file " << filename << " for reading"; @@ -880,7 +880,7 @@ void read_binary_matrix_header(const string& filename, int& tmp1, int& tmp2, int in.read((char*)&tmp1, sizeof(tmp1)); in.read((char*)&tmp2, sizeof(tmp2)); in.read((char*)&tmp3, sizeof(tmp3)); - if (in.bad()) + if (!in.good()) { ss.str(""); ss << "pest_utils::read_binary_matrix_header() error header from binary file " << filename << " for reading"; @@ -929,7 +929,7 @@ bool read_binary(const string &filename, vector &row_names, vector::max()); constraints.initial_report(); + initialize_objfunc(); //some risk-based stuff here string chance_points = ppo->get_opt_chance_points(); if (chance_points == "ALL") diff --git a/src/libs/pestpp_common/pest_data_structs.cpp b/src/libs/pestpp_common/pest_data_structs.cpp index 2f880f53c..517bfd1ea 100644 --- a/src/libs/pestpp_common/pest_data_structs.cpp +++ b/src/libs/pestpp_common/pest_data_structs.cpp @@ -1736,7 +1736,7 @@ void PestppOptions::summary(ostream& os) const os << "gsa_morris_r: " << gsa_morris_r << endl; os << "gsa_morris_delta: " << gsa_morris_delta << endl; os << "gsa_sobol_samples: " << gsa_sobol_samples << endl; - os << "gsa_sobol_par_dist: " << gsa_sobol_par_dist << endl; + os << "gsa_sobol_par_dist: " << gsa_sobol_par_dist << endl << endl; os << "pestpp-da options (those not shared with pestpp-ies):" << endl; os << "da_parameter_cycle_table: " << da_par_cycle_table << endl; @@ -1860,7 +1860,7 @@ void PestppOptions::set_defaults() set_ies_use_approx(true); set_ies_subset_size(4); set_ies_reg_factor(0.0); - set_ies_verbose_level(0); + set_ies_verbose_level(1); set_ies_use_prior_scaling(false); set_ies_num_reals(50); set_ies_bad_phi(1.0e+300); From 2f3dfdca42264769a82fe06eb535ab1671da60c1 Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 7 Jul 2022 14:37:05 -0500 Subject: [PATCH 02/19] working on sqp with rosenc --- src/libs/pestpp_common/Ensemble.cpp | 2 +- src/libs/pestpp_common/SQP.cpp | 371 ++++++---------------------- src/libs/pestpp_common/SQP.h | 12 +- 3 files changed, 76 insertions(+), 309 deletions(-) diff --git a/src/libs/pestpp_common/Ensemble.cpp b/src/libs/pestpp_common/Ensemble.cpp index 4846b5824..7f5c57664 100644 --- a/src/libs/pestpp_common/Ensemble.cpp +++ b/src/libs/pestpp_common/Ensemble.cpp @@ -422,7 +422,7 @@ pair Ensemble::get_empirical_cov_matrices(FileManager* fi } double scale = (num_reals / ((num_reals - 1.) * (num_reals - 1.) * (num_reals - 1.))) * wij_sum; scale = scale / demon; - cout << "optimal residual covariance matrix shrinkage factor: " << scale << endl; + //cout << "optimal residual covariance matrix shrinkage factor: " << scale << endl; file_manager_ptr->rec_ofstream() << "optimal residual covariance matrix shrinkage factor : " << scale << endl; Covariance rcov_diag; diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index 5f083d366..addc827ba 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -268,38 +268,39 @@ bool SeqQuadProgram::initialize_dv(Covariance &cov) } -void SeqQuadProgram::add_bases() +void SeqQuadProgram::add_current_as_bases(ParameterEnsemble& _dv, ObservationEnsemble& _oe) { //check that 'base' isn't already in ensemble - vector rnames = dv.get_real_names(); + vector rnames = _dv.get_real_names(); bool inpar = false; if (find(rnames.begin(), rnames.end(), BASE_REAL_NAME) != rnames.end()) { - message(1, "'base' realization already in parameter ensemble, ignoring '++ies_include_base'"); + message(1, "'base' realization already in parameter ensemble, ignoring 'include_base'"); inpar = true; } else { message(1, "adding 'base' parameter values to ensemble"); Parameters pars = pest_scenario.get_ctl_parameters(); - dv.get_par_transform().active_ctl2numeric_ip(pars); - vector drop{ dv.shape().first - 1 }; - dv.drop_rows(drop); - dv.append(BASE_REAL_NAME, pars); + pars.update_without_clear(dv_names,current_ctl_dv_values.get_data_vec(dv_names)); + _dv.get_par_transform().active_ctl2numeric_ip(pars); + vector drop{ _dv.shape().first - 1 }; + _dv.drop_rows(drop); + _dv.append(BASE_REAL_NAME, pars); } //check that 'base' isn't already in ensemble - rnames = oe.get_real_names(); + rnames = _oe.get_real_names(); if (find(rnames.begin(), rnames.end(), BASE_REAL_NAME) != rnames.end()) { - message(1, "'base' realization already in observation ensemble, ignoring '++ies_include_base'"); + message(1, "'base' realization already in observation ensemble, ignoring 'include_base'"); } else { Observations obs = pest_scenario.get_ctl_observations(); if (inpar) { - vector prnames = dv.get_real_names(); + vector prnames = _dv.get_real_names(); int idx = find(prnames.begin(), prnames.end(), BASE_REAL_NAME) - prnames.begin(); //cout << idx << "," << rnames.size() << endl; @@ -311,44 +312,22 @@ void SeqQuadProgram::add_bases() message(1, mess); vector drop; drop.push_back(oreal); - oe.drop_rows(drop); - oe.append(BASE_REAL_NAME, obs); + _oe.drop_rows(drop); + _oe.append(BASE_REAL_NAME, obs); //rnames.insert(rnames.begin() + idx, string(base_name)); rnames[idx] = BASE_REAL_NAME; - oe.reorder(rnames, vector()); + _oe.reorder(rnames, vector()); } else { message(1, "adding 'base' observation values to ensemble"); - vector drop{ oe.shape().first - 1 }; - oe.drop_rows(drop); - oe.append(BASE_REAL_NAME, obs); + vector drop{ _oe.shape().first - 1 }; + _oe.drop_rows(drop); + _oe.append(BASE_REAL_NAME, obs); } } } - -//template -//void SeqQuadProgram::message(int level, char* _message, vector _extras) -//{ -// string s(_message); -// message(level, s, _extras); -//} - -//void SeqQuadProgram::message(int level, char* _message) -//{ -// string s(_message); -// message(level, s); -//} - -//template -//void SeqQuadProgram::message(int level, char* _message, T extra) -//{ -// string s(_message); -// message(level, s, extra); -// -//} - template void SeqQuadProgram::message(int level, const string &_message, vector _extras, bool echo) { @@ -676,18 +655,6 @@ void SeqQuadProgram::initialize_parcov() } - -void SeqQuadProgram::initialize_obscov() -{ - message(1, "initializing observation noise covariance matrix"); - string obscov_filename = pest_scenario.get_pestpp_options().get_obscov_filename(); - - string how = obscov.try_from(pest_scenario, file_manager, false, true); - message(1, "obscov loaded ", how); - -} - - void SeqQuadProgram::initialize() { message(0, "initializing"); @@ -855,7 +822,7 @@ void SeqQuadProgram::initialize() scale_vals = ppo->get_sqp_scale_facs(); - message(1, "using the following upgrade vector scale values (e.g. 'line search'):", scale_vals); + message(1, "using the following upgrade vector scale (e.g. 'line search') values:", scale_vals); //ofstream &frec = file_manager.rec_ofstream(); last_best = 1.0E+30; @@ -863,8 +830,8 @@ void SeqQuadProgram::initialize() warn_min_reals = 10; error_min_reals = 2; - vector scale_facs = pest_scenario.get_pestpp_options().get_lambda_scale_vec(); - message(1, "using scaling factors: ", scale_facs); + //vector scale_facs = pest_scenario.get_pestpp_options().get_lambda_scale_vec(); + //message(1, "using scaling factors: ", scale_facs); message(1, "max run fail: ", ppo->get_max_run_fail()); @@ -880,11 +847,9 @@ void SeqQuadProgram::initialize() echo = true; initialize_parcov(); - //I dont think SQP needs an obscov? - //initialize_obscov(); - //these will be the ones we track... + //this means the initial dv vals in the control file will be the "center" of the enopt ensemble current_ctl_dv_values = pest_scenario.get_ctl_parameters(); current_obs = pest_scenario.get_ctl_observations(); @@ -1073,9 +1038,11 @@ void SeqQuadProgram::make_gradient_runs(Parameters& _current_dv_vals, Observatio Parameters dv_par = _current_dv_vals.get_subset(dv_names.begin(),dv_names.end()); ofstream& frec = file_manager.rec_ofstream(); _dv.draw(pest_scenario.get_pestpp_options().get_sqp_num_reals(), dv_par, parcov, performance_log, 0, frec); + //todo: save _dv here in case something bad happens... ObservationEnsemble _oe(&pest_scenario, &rand_gen); _oe.reserve(_dv.get_real_names(), constraints.get_obs_constraint_names()); + add_current_as_bases(_dv, _oe); message(1, "running new dv ensemble"); run_ensemble(_dv, _oe); save(_dv, _oe); @@ -1178,18 +1145,14 @@ void SeqQuadProgram::prep_4_ensemble_grad() dv.transform_ip(ParameterEnsemble::transStatus::NUM); - //TODO: think about what adding the base would do for SQP? - /*if (pest_scenario.get_pestpp_options().get_ies_include_base()) - if (pp_args.find("SQP_RESTART_OBS_EN") != pp_args.end()) - { - message(1, "Warning: even though `sqp_include_base` is true, you passed a restart obs en, not adding 'base' realization..."); - } - else - add_bases();*/ - + //TODO: think about what adding the base would do for SQP + if (pp_args.find("SQP_RESTART_OBS_EN") != pp_args.end()) + { + message(1, "Warning: even though `sqp_include_base` is true, you passed a restart obs en, not adding 'base' realization..."); + } + else + add_current_as_bases(dv, oe); - //now we check to see if we need to try to align the par and obs en - //this would only be needed if either of these were not drawn if (!dv_drawn || !oe_drawn) { bool aligned = dv.try_align_other_rows(performance_log, oe); @@ -1218,12 +1181,10 @@ void SeqQuadProgram::prep_4_ensemble_grad() frec << ma << endl; } - - message(2, "checking for denormal values in dv"); dv.check_for_normal("initial transformed dv ensemble"); ss.str(""); - //TODO: setup an sqp save bin flag? or piggy back? + if (pest_scenario.get_pestpp_options().get_save_binary()) { ss << file_manager.get_base_filename() << ".0.par.jcb"; @@ -1239,19 +1200,7 @@ void SeqQuadProgram::prep_4_ensemble_grad() oe.check_for_normal("observation ensemble"); ss.str(""); - - /*if (pest_scenario.get_pestpp_options().get_ies_save_binary()) - { - ss << file_manager.get_base_filename() << ".obs.jcb"; - oe.to_binary(ss.str()); - } - else - { - ss << file_manager.get_base_filename() << ".obs.csv"; - oe.to_csv(ss.str()); - } - message(1, "saved initial observation ensemble to ", ss.str());*/ - message(1, "centering on ensemble mean vector"); + message(1, "centering on 'base' realization"); if (pest_scenario.get_control_info().noptmax == -2) { @@ -1276,16 +1225,7 @@ void SeqQuadProgram::prep_4_ensemble_grad() _oe.append("mean", pest_scenario.get_ctl_observations()); oe_base = _oe; oe_base.reorder(vector(), act_obs_names); - //initialize the phi handler - ph = L2PhiHandler(&pest_scenario, &file_manager, &oe_base, &dv_base, &parcov); - if (ph.get_lt_obs_names().size() > 0) - { - message(1, "less_than inequality defined for observations: ", ph.get_lt_obs_names().size()); - } - if (ph.get_gt_obs_names().size()) - { - message(1, "greater_than inequality defined for observations: ", ph.get_gt_obs_names().size()); - } + message(1, "running mean dv values"); vector failed_idxs = run_ensemble(_pe, _oe); @@ -1299,11 +1239,11 @@ void SeqQuadProgram::prep_4_ensemble_grad() _oe.to_csv(obs_csv); - //TODO: rather than report l2 phi, report actual obj func and feas status - ph.update(_oe, _pe); - message(0, "mean parameter phi report:"); - ph.report(true); - ph.write(0, 1); + Eigen::VectorXd o = _oe.get_real_vector("mean"); + current_obs = pest_scenario.get_ctl_observations(); + current_obs.update_without_clear(_oe.get_var_names(), o); + save_real_par_rei(pest_scenario, _pe, _oe, output_file_writer, file_manager, -1, "mean"); + constraints.sqp_report(0,current_ctl_dv_values, current_obs); return; } @@ -1355,48 +1295,6 @@ void SeqQuadProgram::prep_4_ensemble_grad() save_real_par_rei(pest_scenario, dv, oe, output_file_writer, file_manager, -1); - performance_log->log_event("calc pre-drop phi"); - //todo: I think we probably want to use the opt_objective_function arg - //to define the objective function. Support and obs or a pi. - //what about an external file like pestpp-opt with just coefficients? - - - //initialize the phi handler - //todo: can we also use the l2 norm of residuals to ident - //"bad" realizations? - - /*ph = L2PhiHandler(&pest_scenario, &file_manager, &oe_base, &dv_base, &parcov); - - if (ph.get_lt_obs_names().size() > 0) - { - message(1, "less_than inequality defined for observations: ", ph.get_lt_obs_names().size()); - } - if (ph.get_gt_obs_names().size()) - { - message(1, "greater_than inequality defined for observations: ", ph.get_gt_obs_names().size()); - } - - ph.update(oe, dv); - message(0, "pre-drop initial phi summary"); - ph.report(true); - drop_bad_phi(dv, oe); - if (oe.shape().first == 0) - { - throw_sqp_error(string("all realizations dropped as 'bad'")); - } - if (oe.shape().first <= error_min_reals) - { - message(0, "too few active realizations:", oe.shape().first); - message(1, "need at least ", error_min_reals); - throw_sqp_error(string("too few active realizations, cannot continue")); - } - if (oe.shape().first < warn_min_reals) - { - ss.str(""); - ss << "WARNING: less than " << warn_min_reals << " active realizations...might not be enough"; - string s = ss.str(); - message(0, s); - }*/ pcs = ParChangeSummarizer(&dv_base, &file_manager, &output_file_writer); @@ -1413,88 +1311,7 @@ void SeqQuadProgram::prep_4_ensemble_grad() } -void SeqQuadProgram::drop_bad_phi(ParameterEnsemble &_pe, ObservationEnsemble &_oe, bool is_subset) -{ - //don't use this assert because _pe maybe full size, but _oe might be subset size - if (!is_subset) - if (_pe.shape().first != _oe.shape().first) - throw_sqp_error("SeqQuadProgram::drop_bad_phi() error: _pe != _oe and not subset"); - - double bad_phi = pest_scenario.get_pestpp_options().get_ies_bad_phi(); - double bad_phi_sigma = pest_scenario.get_pestpp_options().get_ies_bad_phi_sigma(); - vector idxs = ph.get_idxs_greater_than(bad_phi,bad_phi_sigma, _oe); - - if (pest_scenario.get_pestpp_options().get_ies_debug_bad_phi()) - idxs.push_back(0); - - if (idxs.size() > 0) - { - - message(0, "dropping realizations as bad: ", idxs.size()); - vector par_real_names = _pe.get_real_names(), obs_real_names = _oe.get_real_names(); - stringstream ss; - string pname; - string oname; - - int pidx; - vector full_onames, full_pnames; - // if a subset drop, then use the full oe index, otherwise, just use _oe index - /*if (_oe.shape().first != _pe.shape().first) - { - full_onames = oe.get_real_names(); - } - else - { - full_onames = _oe.get_real_names(); - }*/ - full_onames = oe.get_real_names(); - full_pnames = dv.get_real_names(); - vector pdrop, odrop; - for (auto i : idxs) - { - oname = obs_real_names[i]; - - /*if (is_subset) - { - pidx = find(full_onames.begin(), full_onames.end(), oname) - full_onames.begin(); - if (find(subset_idxs.begin(), subset_idxs.end(), pidx) == subset_idxs.end()) - { - ss.str(""); - ss << "drop_bad_phi() error: idx " << pidx << " not found in subset_idxs"; - throw_sqp_error(ss.str()); - } - pname = full_pnames[pidx]; - }*/ - //else - { - pidx = i; - pname = par_real_names[pidx]; - } - ss << pname << " : " << obs_real_names[i] << " , "; - pdrop.push_back(pname); - odrop.push_back(obs_real_names[i]); - } - - string s = "dropping par:obs realizations: "+ ss.str(); - message(1, s); - try - { - _pe.drop_rows(pdrop); - _oe.drop_rows(odrop); - } - catch (const exception &e) - { - stringstream ss; - ss << "drop_bad_phi() error : " << e.what(); - throw_sqp_error(ss.str()); - } - catch (...) - { - throw_sqp_error(string("drop_bad_phi() error")); - } - } -} void SeqQuadProgram::save_mat(string prefix, Eigen::MatrixXd &mat) { @@ -1554,15 +1371,20 @@ void SeqQuadProgram::iterate_2_solution() //todo: save and write out the current phi grad vector (maybe save all of them???) ss.str(""); - ss << "best phi sequence:"; + ss << "best phi sequence:" << endl; + ss << " "; int ii = 0; for (auto phi : best_phis) { - ss << phi << " "; + ss << setw(10) << setprecision(4) << phi << " "; ii++; - if (ii % 7 == 0) - ss << endl; + if (ii % 6 == 0) { + ss << endl; + ss << " "; + } + } + ss << endl; message(0, ss.str()); //check to break here before making more runs @@ -1672,67 +1494,6 @@ bool SeqQuadProgram::should_terminate() -void SeqQuadProgram::update_reals_by_phi(ParameterEnsemble &_pe, ObservationEnsemble &_oe) -{ - - vector oe_names = _oe.get_real_names(); - vector pe_names = _pe.get_real_names(); - vector oe_base_names = oe.get_real_names(); - vector pe_base_names = dv.get_real_names(); - - //if (pe_names.size() != oe_base_names.size()) - // throw runtime_error("SeqQuadProgram::update_reals_by_phi() error: pe_names != oe_base_names"); - map oe_name_to_idx; - map pe_idx_to_name; - - for (int i = 0; i < oe_base_names.size(); i++) - oe_name_to_idx[oe_base_names[i]] = i; - - for (int i = 0; i < pe_base_names.size(); i++) - pe_idx_to_name[i] = pe_base_names[i]; - //store map of current phi values - ph.update(oe, dv); - L2PhiHandler::phiType pt = L2PhiHandler::phiType::COMPOSITE; - map phi_map = ph.get_phi_map(pt); - map cur_phi_map; - for (auto p : phi_map) - cur_phi_map[p.first] = p.second; - - //now get a phi map of the new phi values - ph.update(_oe, _pe); - phi_map = ph.get_phi_map(pt); - - double acc_fac = pest_scenario.get_pestpp_options().get_ies_accept_phi_fac(); - double cur_phi, new_phi; - string oname, pname; - Eigen::VectorXd real; - stringstream ss; - for (int i=0;i<_oe.shape().first;i++) - { - oname = oe_names[i]; - new_phi = phi_map.at(oname); - cur_phi = cur_phi_map.at(oname); - if (new_phi < cur_phi * acc_fac) - { - //pname = pe_names[i]; - //pname = pe_names[oe_name_to_idx[oname]]; - pname = pe_idx_to_name[oe_name_to_idx[oname]]; - if (find(pe_names.begin(), pe_names.end(), pname) == pe_names.end()) - throw runtime_error("SeqQuadProgram::update_reals_by_phi() error: pname not in pe_names: " + pname); - ss.str(""); - ss << "updating dv:oe real =" << pname << ":" << oname << ", current phi: new phi =" << cur_phi << ":" << new_phi; - message(3, ss.str()); - - real = _pe.get_real_vector(pname); - dv.update_real_ip(pname, real); - real = _oe.get_real_vector(oname); - oe.update_real_ip(oname, real); - } - } - ph.update(oe, dv); - -} - Eigen::VectorXd SeqQuadProgram::calc_gradient_vector_from_coeffs(const Parameters& _current_dv_values) { Eigen::VectorXd grad(dv_names.size()); @@ -1775,6 +1536,7 @@ Parameters SeqQuadProgram::calc_gradient_vector(const Parameters& _current_dv_va { stringstream ss; Eigen::VectorXd grad(dv_names.size()); + //TODO: should this be optional? string center_on = pest_scenario.get_pestpp_options().get_ies_center_on(); //if don't already have or if already have and exit @@ -1792,9 +1554,6 @@ Parameters SeqQuadProgram::calc_gradient_vector(const Parameters& _current_dv_va //ensemble stuff here if (use_obj_obs) { - - //todo: need to make sqp specific or refactor ies arg names - // compute sample dec var cov matrix and its pseudo inverse // see eq (8) of Dehdari and Oliver 2012 SPE and Fonseca et al 2015 SPE // TODO: so can pseudo inverse: Covariance dv_cov_matrix; @@ -1821,8 +1580,9 @@ Parameters SeqQuadProgram::calc_gradient_vector(const Parameters& _current_dv_va Covariance shrunk_cov = dv.get_empirical_cov_matrices(&file_manager).second; shrunk_cov.inv_ip(); parcov_inv = shrunk_cov.e_ptr()->toDense(); + //cout << "parcov inv: " << endl << parcov_inv << endl; //TODO: Matt to check consistency being sample cov forms - message(1, "empirical parcov inv:", parcov_inv); // tmp + //message(1, "empirical parcov inv:", parcov_inv); // tmp // try pseudo_inv_ip() //Covariance x; @@ -1838,7 +1598,7 @@ Parameters SeqQuadProgram::calc_gradient_vector(const Parameters& _current_dv_va Eigen::MatrixXd obj_anoms = oe.get_eigen_anomalies(vector(), vector{obj_func_str}, center_on); Eigen::MatrixXd cross_cov_vector; // or Eigen::VectorXd? cross_cov_vector = 1.0 / (dv.shape().first - 1.0) * (dv_anoms.transpose() * obj_anoms); - cout << "dv-obj_cross_cov:" << cross_cov_vector << endl; + //cout << "dv-obj_cross_cov:" << endl << cross_cov_vector << endl; // now compute grad vector // this is a matrix-vector product; the matrix being the pseudo inv of diag empirical dec var cov matrix and the vector being the dec var-phi cross-cov vector\ @@ -2058,7 +1818,8 @@ pair SeqQuadProgram::_kkt_null_space(Eigen::Ma // combine to make total direction message(1, "combining range and null space components of search direction"); // tmp search_d = Y * p_y + Z * p_z; - message(1, "SD", search_d); // tmp + //message(1, "SD", search_d); // tmp + if (search_d.size() != curved_grad.size()) { throw_sqp_error("search direction vector computation error (in null space KKT solve method)!"); @@ -2139,10 +1900,10 @@ pair SeqQuadProgram::calc_search_direction_vec pair x; - message(1, "hessian:", hessian); // tmp + //message(1, "hessian:", hessian); // tmp Mat constraint_mat; if (use_ensemble_grad) { - message(2, "getting ensemble-based working set constraint matrix"); + message(1, "getting ensemble-based working set constraint matrix"); constraint_mat = constraints.get_working_set_constraint_matrix(current_ctl_dv_values, current_obs, dv, oe,true); } else @@ -2536,14 +2297,16 @@ bool SeqQuadProgram::solve_new() //enforce bounds on candidates - TODO: report the shrinkage summary that enforce_bounds returns dv_candidates.enforce_bounds(performance_log,false); ss.str(""); - ss << file_manager.get_base_filename() << "." << iter << ".par.csv"; + ss << file_manager.get_base_filename() << "." << iter << ".dv_candidates.csv"; dv_candidates.to_csv(ss.str()); message(0, "running candidate decision variable batch"); vector passed_scale_vals = scale_vals; //passed_scale_vals will get amended in this function based on run fails... ObservationEnsemble oe_candidates = run_candidate_ensemble(dv_candidates, passed_scale_vals); - + ss.str(""); + ss << file_manager.get_base_filename() << "." << iter << ".oe_candidates.csv"; + oe_candidates.to_csv(ss.str()); //todo: decide which if any dv candidate to accept... bool success = pick_candidate_and_update_current(dv_candidates, oe_candidates, passed_scale_vals); if (!success) @@ -2797,12 +2560,23 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can t = _oe.get_real_vector(real_names[i]); cand_obs_values.update_without_clear(onames, t); - constraints.sqp_report(iter, cand_dv_values, cand_obs_values, true,tag); + constraints.sqp_report(iter, cand_dv_values, cand_obs_values, false,tag); } - message(0, "best phi this iteration: ", oext); + + if (idx == -1) throw_sqp_error("shits busted"); + message(0, "best phi this iteration: ", oext); + t = dv_candidates.get_real_vector(real_names[idx]); + cand_dv_values = current_ctl_dv_values; + cand_dv_values.update_without_clear(dv_names, t); + pts.numeric2ctl_ip(cand_dv_values); + t = _oe.get_real_vector(real_names[idx]); + cand_obs_values.update_without_clear(onames, t); + ss.str(""); + ss << "best candidate (scale factor: " << setprecision(4) << scale_vals[idx] << ", phi: " << oext << ")"; + constraints.sqp_report(iter, cand_dv_values, cand_obs_values, true,ss.str()); best_phis.push_back(oext); if (((obj_sense == "minimize") && (oext < last_best)) || ((obj_sense == "maximize") && (oext > last_best))) { @@ -2822,6 +2596,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can message(0, "new best phi:", last_best); + // todo add constraint (largest violating constraint not already in working set) to working set // is this the right place to do this? after accepting a particular candidate? // also can we adapt alpha_mult based on subset? using concept of blocking constraint here? diff --git a/src/libs/pestpp_common/SQP.h b/src/libs/pestpp_common/SQP.h index 7f94ed44f..62bbcf8d9 100644 --- a/src/libs/pestpp_common/SQP.h +++ b/src/libs/pestpp_common/SQP.h @@ -86,7 +86,7 @@ class SeqQuadProgram OutputFileWriter &output_file_writer; PerformanceLog *performance_log; RunManagerAbstract* run_mgr_ptr; - L2PhiHandler ph; + //L2PhiHandler ph; ParChangeSummarizer pcs; Covariance parcov, obscov; double reg_factor; @@ -184,13 +184,9 @@ class SeqQuadProgram void save(ParameterEnsemble& _dv, ObservationEnsemble& _oe, bool save_base=true); void save_mat(string prefix, Eigen::MatrixXd &mat); bool initialize_dv(Covariance &cov); - //bool initialize_oe(Covariance &cov); bool initialize_restart(); void initialize_parcov(); - void initialize_obscov(); void initialize_objfunc(); - void drop_bad_phi(ParameterEnsemble &_pe, ObservationEnsemble &_oe, bool is_subset=false); - void queue_chance_runs(); template @@ -202,12 +198,8 @@ class SeqQuadProgram void sanity_checks(); - void add_bases(); - - void update_reals_by_phi(ParameterEnsemble &_pe, ObservationEnsemble &_oe); + void add_current_as_bases(ParameterEnsemble& _dv, ObservationEnsemble& _oe); - void set_subset_idx(int size); - }; #endif From 8501dcde77b4b211959dfed271f36dfa52bda9b4 Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 7 Jul 2022 16:49:08 -0500 Subject: [PATCH 03/19] more work on filter --- src/libs/pestpp_common/SQP.cpp | 59 ++++++++++++++++++++++++---------- src/libs/pestpp_common/SQP.h | 3 +- 2 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index addc827ba..9b97f4f02 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -34,18 +34,18 @@ bool SqpFilter::accept(double obj_val, double violation_val, int iter, double al candidate.obj_val *= (1 - obj_tol); candidate.viol_val *= (1 + viol_tol); - bool accept = false; + bool accept = true; for (auto& p : obj_viol_pairs) - if (first_dominates_second(candidate, p)) + if (!first_partially_dominates_second(candidate, p)) { - accept = true; + accept = false; break; } return accept; } -bool SqpFilter::first_dominates_second(const FilterRec& first, const FilterRec& second) +bool SqpFilter::first_partially_dominates_second(const FilterRec& first, const FilterRec& second) { if (minimize) { @@ -62,6 +62,25 @@ bool SqpFilter::first_dominates_second(const FilterRec& first, const FilterRec& return false; } } + +bool SqpFilter::first_strictly_dominates_second(const FilterRec& first, const FilterRec& second) +{ + if (minimize) + { + if ((first.obj_val < second.obj_val) && (first.viol_val < second.viol_val)) + return true; + else + return false; + } + else + { + if ((first.obj_val > second.obj_val) && (first.viol_val < second.viol_val)) + return true; + else + return false; + } +} + bool SqpFilter::update(double obj_val, double violation_val, int iter, double alpha) { bool acc = accept(obj_val, violation_val,iter, alpha); @@ -75,7 +94,7 @@ bool SqpFilter::update(double obj_val, double violation_val, int iter, double al set updated{ candidate }; for (auto& p : obj_viol_pairs) { - if (first_dominates_second(p, candidate)) + if (first_strictly_dominates_second(p, candidate)) updated.insert(p); } obj_viol_pairs = updated; @@ -2535,23 +2554,29 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can //but maybe we want to just add all of these candidates to the filter? //there is also a test method with the filter that doesnt add //to the records... - filter_accept = filter.update(obj_vec[i], infeas_sum,iter,alpha_vals[i]); + filter_accept = filter.accept(obj_vec[i], infeas_sum,iter,alpha_vals[i]); if (filter_accept) ss << " filter accepted "; else ss << " filter rejected "; message(1, ss.str()); - if ((obj_sense=="minimize") && (obj_vec[i] < oext)) - { - idx = i; - oext = obj_vec[i]; - } - else if ((obj_sense == "maximize") && (obj_vec[i] > oext)) - { - idx = i; - oext = obj_vec[i]; - } - +// if ((obj_sense=="minimize") && (obj_vec[i] < oext)) +// { +// idx = i; +// oext = obj_vec[i]; +// } +// else if ((obj_sense == "maximize") && (obj_vec[i] > oext)) +// { +// idx = i; +// oext = obj_vec[i]; +// } + if (filter_accept) + { + idx = i; + oext = obj_vec[i]; + // now update the filter recs to remove any dominated pairs + filter.update(obj_vec[i], infeas_sum, iter, alpha_vals[i]); + } //report the constraint info for this candidate t = dv_candidates.get_real_vector(real_names[i]); cand_dv_values = current_ctl_dv_values; diff --git a/src/libs/pestpp_common/SQP.h b/src/libs/pestpp_common/SQP.h index 62bbcf8d9..037524050 100644 --- a/src/libs/pestpp_common/SQP.h +++ b/src/libs/pestpp_common/SQP.h @@ -60,7 +60,8 @@ class SqpFilter set obj_viol_pairs; - bool first_dominates_second(const FilterRec& first, const FilterRec& second); + bool first_partially_dominates_second(const FilterRec& first, const FilterRec& second); + bool first_strictly_dominates_second(const FilterRec& first, const FilterRec& second); }; From b141c78415a1447e730982bd92b2ef36cdf0fddb Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 7 Jul 2022 17:07:00 -0500 Subject: [PATCH 04/19] more work on filter reporting --- src/libs/pestpp_common/SQP.cpp | 31 +++++++++++++++++++++++++++++++ src/libs/pestpp_common/SQP.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index 9b97f4f02..ecbfa92bf 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -79,6 +79,35 @@ bool SqpFilter::first_strictly_dominates_second(const FilterRec& first, const Fi else return false; } +} + +void SqpFilter::report(ofstream& frec, int iter) +{ + frec << "...SQP filter members for iteration " << iter << ":" << endl << " obj, violation" << endl; + double omin = 1.0e+300,omax = -1e+300,vmin = 1e+300,vmax = -1e+300; + for (auto& fr : obj_viol_pairs) + { + frec << setw(6) << setprecision(3) << fr.obj_val << "," << fr.viol_val << endl; + omin = min(fr.obj_val,omin); + omax = max(fr.obj_val,omax); + vmin = min(fr.viol_val,vmin); + vmax = max(fr.viol_val,vmax); + } + stringstream ss; + ss.str(""); + ss << endl << "... filter summary for iteration " << iter << ":" << endl; + ss << "-->obj min:" << omin << endl; + ss << "-->obj max:" << omax << endl; + ss << "-->violation min:" << vmin << endl; + ss << "-->violation max:" << vmax << endl; + ss << endl; + + frec << ss.str(); + cout << ss.str(); + + + + } bool SqpFilter::update(double obj_val, double violation_val, int iter, double alpha) @@ -2589,6 +2618,8 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can } + filter.report(file_manager.rec_ofstream(),iter); + if (idx == -1) throw_sqp_error("shits busted"); diff --git a/src/libs/pestpp_common/SQP.h b/src/libs/pestpp_common/SQP.h index 037524050..80f7524f9 100644 --- a/src/libs/pestpp_common/SQP.h +++ b/src/libs/pestpp_common/SQP.h @@ -52,6 +52,8 @@ class SqpFilter } bool accept(double obj_val, double violation_val,int iter=0,double alpha=-1.0); bool update(double obj_val, double violation_val, int iter=0,double alpha=-1.0); + void report(ofstream& frec,int iter); + private: bool minimize; From 9f0bdd66c3c0d5368fe4e63f97717cc939694724 Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 7 Jul 2022 19:08:25 -0500 Subject: [PATCH 05/19] heuristics if filter fails --- src/libs/pestpp_common/SQP.cpp | 43 ++++++++++++++++++++++++++++++++-- src/libs/pestpp_common/SQP.h | 1 + 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index ecbfa92bf..faa7b31de 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -2565,6 +2565,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can ParamTransformSeq pts = pest_scenario.get_base_par_tran_seq(); bool filter_accept; string tag; + vector infeas_vec; for (int i = 0; i < obj_vec.size(); i++) { ss.str(""); @@ -2578,7 +2579,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can infeas_sum += v.second; } ss << " infeasibilty total: " << infeas_sum << ", "; - + infeas_vec.push_back(infeas_sum); //not sure how to deal with filter here - liu and reynolds have a scheme about it... //but maybe we want to just add all of these candidates to the filter? //there is also a test method with the filter that doesnt add @@ -2620,9 +2621,47 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can filter.report(file_manager.rec_ofstream(),iter); + //if the filter approach failed...some heuristics + if (idx == -1) + { + message(0,"filter failed, checking for feasible solutions...."); + double viol_tol = filter.get_viol_tol(); + for (int i=0;i oext)) + { + idx = i; + oext = obj_vec[i]; + } + } + } + if (idx == -1) + { + message(0,"no feasible solutions, choosing lowest constraint violation..."); + //now what? + //how about least violation - probably going to hand off to ies now anyway... + double viol_min = 1e+300; + for (int i=0;i Date: Fri, 8 Jul 2022 10:54:50 -0500 Subject: [PATCH 06/19] working seek feasible --- src/libs/pestpp_common/SQP.cpp | 142 ++++++++++++------- src/libs/pestpp_common/SQP.h | 2 + src/libs/pestpp_common/pest_data_structs.cpp | 1 + 3 files changed, 96 insertions(+), 49 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index faa7b31de..d4242d7d1 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -83,7 +83,7 @@ bool SqpFilter::first_strictly_dominates_second(const FilterRec& first, const Fi void SqpFilter::report(ofstream& frec, int iter) { - frec << "...SQP filter members for iteration " << iter << ":" << endl << " obj, violation" << endl; + frec << "...SQP filter members (" << obj_viol_pairs.size() <<") for iteration " << iter << ":" << endl << " obj, violation" << endl; double omin = 1.0e+300,omax = -1e+300,vmin = 1e+300,vmax = -1e+300; for (auto& fr : obj_viol_pairs) { @@ -95,23 +95,19 @@ void SqpFilter::report(ofstream& frec, int iter) } stringstream ss; ss.str(""); - ss << endl << "... filter summary for iteration " << iter << ":" << endl; - ss << "-->obj min:" << omin << endl; - ss << "-->obj max:" << omax << endl; - ss << "-->violation min:" << vmin << endl; - ss << "-->violation max:" << vmax << endl; + ss << endl << "... filter summary with " << obj_viol_pairs.size() << " pairs for iteration " << iter << ":" << endl; + ss << "-->obj min:max" << omin << ":" << omax << endl; + ss << "-->violation min:max" << vmin << ":" << vmax << endl; ss << endl; frec << ss.str(); cout << ss.str(); - - - } bool SqpFilter::update(double obj_val, double violation_val, int iter, double alpha) { + //check if this candidate is nondom bool acc = accept(obj_val, violation_val,iter, alpha); if (!acc) return false; @@ -121,11 +117,36 @@ bool SqpFilter::update(double obj_val, double violation_val, int iter, double al candidate.iter = iter; candidate.alpha = alpha; set updated{ candidate }; - for (auto& p : obj_viol_pairs) - { - if (first_strictly_dominates_second(p, candidate)) - updated.insert(p); - } + //for (auto& p : obj_viol_pairs) + //{ + // if (first_strictly_dominates_second(p, candidate)) + // updated.insert(p); + //} + bool i_is_dominated = false; + set::iterator first = obj_viol_pairs.begin(); + set::iterator second = obj_viol_pairs.begin(); + for (int i=0;i MAX_CONSEC_INFEAS) + { + ss.str(""); + ss << "number of consecutive infeasible iterations > " << MAX_CONSEC_INFEAS << ", switching ies to seek feasibility"; + message(0,ss.str()); + seek_feasible(); + n_consec_infeas = 0; + } + + //update the underlying runs make_gradient_runs(current_ctl_dv_values,current_obs); @@ -2339,9 +2372,6 @@ bool SeqQuadProgram::solve_new() throw_sqp_error("ies_debug_upgrade_only is true, exiting"); } - //TODO: add sqp option to save candidates - - //enforce bounds on candidates - TODO: report the shrinkage summary that enforce_bounds returns dv_candidates.enforce_bounds(performance_log,false); ss.str(""); @@ -2374,8 +2404,6 @@ bool SeqQuadProgram::seek_feasible() { stringstream ss; message(1, "seeking feasibility with iterative ensemble smoother solution"); - - Pest ies_pest_scenario; string pst_filename = pest_scenario.get_pst_filename(); ifstream fin(pest_scenario.get_pst_filename()); @@ -2386,7 +2414,7 @@ bool SeqQuadProgram::seek_feasible() ParamTransformSeq pts = ies_pest_scenario.get_base_par_tran_seq_4_mod(); TranFixed* tf_ptr = pts.get_fixed_ptr_4_mod(); - Parameters ctl_pars = ies_pest_scenario.get_ctl_parameters_4_mod(); + Parameters& ctl_pars = ies_pest_scenario.get_ctl_parameters_4_mod(); for (auto& name : ies_pest_scenario.get_ctl_ordered_par_names()) { @@ -2419,7 +2447,7 @@ bool SeqQuadProgram::seek_feasible() { shifted = constraints.get_chance_shifted_constraints(current_obs); } - Observations ctl_obs = ies_pest_scenario.get_ctl_observations_4_mod(); + Observations& ctl_obs = ies_pest_scenario.get_ctl_observations_4_mod(); for (auto& name : ies_pest_scenario.get_ctl_ordered_obs_names()) { if (snames.find(name) == send) @@ -2566,6 +2594,9 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can bool filter_accept; string tag; vector infeas_vec; + vector accept_idxs; + bool accept; + for (int i = 0; i < obj_vec.size(); i++) { ss.str(""); @@ -2580,32 +2611,20 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can } ss << " infeasibilty total: " << infeas_sum << ", "; infeas_vec.push_back(infeas_sum); - //not sure how to deal with filter here - liu and reynolds have a scheme about it... - //but maybe we want to just add all of these candidates to the filter? - //there is also a test method with the filter that doesnt add - //to the records... filter_accept = filter.accept(obj_vec[i], infeas_sum,iter,alpha_vals[i]); if (filter_accept) ss << " filter accepted "; else ss << " filter rejected "; message(1, ss.str()); -// if ((obj_sense=="minimize") && (obj_vec[i] < oext)) -// { -// idx = i; -// oext = obj_vec[i]; -// } -// else if ((obj_sense == "maximize") && (obj_vec[i] > oext)) -// { -// idx = i; -// oext = obj_vec[i]; -// } if (filter_accept) { - idx = i; - oext = obj_vec[i]; - // now update the filter recs to remove any dominated pairs - filter.update(obj_vec[i], infeas_sum, iter, alpha_vals[i]); + accept_idxs.push_back(i); +// idx = i; +// oext = obj_vec[i]; +// // now update the filter recs to remove any dominated pairs +// filter.update(obj_vec[i], infeas_sum, iter, alpha_vals[i]); +// accept = true; } //report the constraint info for this candidate t = dv_candidates.get_real_vector(real_names[i]); @@ -2621,8 +2640,26 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can filter.report(file_manager.rec_ofstream(),iter); - //if the filter approach failed...some heuristics - if (idx == -1) + + if (accept_idxs.size() > 0) + { + accept = true; + //since all of the these passed the filter, choose the one with lowest phi + double min_obj = 1.0e+300; + ss.str(""); + ss << "number of scale factors passing filter:" << accept_idxs.size(); + message(1,ss.str()); + for (auto iidx : accept_idxs) + { + if (obj_vec[iidx] < min_obj) + { + min_obj = obj_vec[iidx]; + idx = iidx; + oext = obj_vec[iidx]; + } + } + } + else { message(0,"filter failed, checking for feasible solutions...."); double viol_tol = filter.get_viol_tol(); @@ -2672,8 +2709,10 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can ss.str(""); ss << "best candidate (scale factor: " << setprecision(4) << scale_vals[idx] << ", phi: " << oext << ")"; constraints.sqp_report(iter, cand_dv_values, cand_obs_values, true,ss.str()); - best_phis.push_back(oext); - if (((obj_sense == "minimize") && (oext < last_best)) || ((obj_sense == "maximize") && (oext > last_best))) + + //TODO: need more thinking here - do we accept only if filter accepts? I think so.... + //if (((obj_sense == "minimize") && (oext < last_best)) || ((obj_sense == "maximize") && (oext > last_best))) + if (accept) { //todo:update current_dv and current_obs message(0, "accepting upgrade", real_names[idx]); @@ -2689,14 +2728,17 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can current_obs.update_without_clear(onames, t); last_best = oext; message(0, "new best phi:", last_best); - - + best_phis.push_back(oext); // todo add constraint (largest violating constraint not already in working set) to working set // is this the right place to do this? after accepting a particular candidate? // also can we adapt alpha_mult based on subset? using concept of blocking constraint here? // take diff between vector of strings of constraints in working set and constraints with non-zero violation (return constraint idx from filter?) + if (infeas_vec[idx] > filter.get_viol_tol()) + { + n_consec_infeas++; + } return true; @@ -2704,12 +2746,14 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can else { message(0, "not accepting upgrade #sad"); + best_phis.push_back(last_best); + if (infeas_vec[idx] > filter.get_viol_tol()) + { + n_consec_infeas++; + } + //TODO: something here to adapt to the failed iteration, otherwise I think we will continue failing... return false; } - - - - //return true; } void SeqQuadProgram::report_and_save_ensemble() diff --git a/src/libs/pestpp_common/SQP.h b/src/libs/pestpp_common/SQP.h index 9303f6f7e..f61a480ec 100644 --- a/src/libs/pestpp_common/SQP.h +++ b/src/libs/pestpp_common/SQP.h @@ -103,6 +103,8 @@ class SeqQuadProgram map obj_func_coef_map; int num_threads; + int n_consec_infeas; + int MAX_CONSEC_INFEAS = 3; double eigthresh; vector scale_vals; diff --git a/src/libs/pestpp_common/pest_data_structs.cpp b/src/libs/pestpp_common/pest_data_structs.cpp index 517bfd1ea..9aa217605 100644 --- a/src/libs/pestpp_common/pest_data_structs.cpp +++ b/src/libs/pestpp_common/pest_data_structs.cpp @@ -1480,6 +1480,7 @@ bool PestppOptions::assign_value_by_key_sqp(const string& key, const string& val convert_ip(t, v); sqp_scale_facs.push_back(v); } + return true; } return false; From 0ef2223dc57c53e5f0dacaa026eaa894cae1a851 Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 8 Jul 2022 12:13:51 -0500 Subject: [PATCH 07/19] more work on feas seek --- src/libs/pestpp_common/SQP.cpp | 17 ++++++++++++----- src/libs/pestpp_common/constraints.cpp | 18 +++++++++++------- src/libs/pestpp_common/constraints.h | 4 ++-- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index d4242d7d1..37700dec6 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -2461,10 +2461,17 @@ bool SeqQuadProgram::seek_feasible() } } - snames = ies_pest_scenario.get_pestpp_options().get_passed_args(); - if (snames.find("IES_NUM_REALS") == snames.end()) - ies_pest_scenario.get_pestpp_options_ptr()->set_ies_num_reals(10); - IterEnsembleSmoother ies(ies_pest_scenario, file_manager, output_file_writer, performance_log, run_mgr_ptr); + //snames = ies_pest_scenario.get_pestpp_options().get_passed_args(); + //if (snames.find("IES_NUM_REALS") == snames.end()) + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_num_reals(pest_scenario.get_pestpp_options().get_sqp_num_reals()); + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_no_noise(true); + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_obs_csv(""); + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_obs_restart_csv(""); + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_par_csv(""); + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_par_restart_csv(""); + ies_pest_scenario.get_control_info_4_mod().noptmax = 3; //TODO: make this an option some how? + + IterEnsembleSmoother ies(ies_pest_scenario, file_manager, output_file_writer, performance_log, run_mgr_ptr); ies.initialize(); ies.iterate_2_solution(); @@ -2585,7 +2592,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can vector real_names = dv_candidates.get_real_names(); map obj_map = get_obj_map(dv_candidates, _oe); //todo make sure chances have been applied before now... - map> violations = constraints.get_ensemble_violations_map(dv_candidates,_oe); + map> violations = constraints.get_ensemble_violations_map(dv_candidates,_oe,filter.get_viol_tol(),true); Parameters cand_dv_values = current_ctl_dv_values; Observations cand_obs_values = current_obs; Eigen::VectorXd t; diff --git a/src/libs/pestpp_common/constraints.cpp b/src/libs/pestpp_common/constraints.cpp index 841113132..8312167aa 100644 --- a/src/libs/pestpp_common/constraints.cpp +++ b/src/libs/pestpp_common/constraints.cpp @@ -2815,7 +2815,7 @@ map Constraints::get_unsatified_pi_constraints(Parameters& par_a return unsatisfied; } -map> Constraints::get_ensemble_violations_map(ParameterEnsemble& pe, ObservationEnsemble& oe) +map> Constraints::get_ensemble_violations_map(ParameterEnsemble& pe, ObservationEnsemble& oe, double tol, bool include_weight) { //make sure pe and oe share realizations vector pe_names = pe.get_real_names(); @@ -2835,7 +2835,7 @@ map> Constraints::get_ensemble_violations_map(Parame { v = oe.get_real_vector(name); obs.update_without_clear(vnames, v); - vmap = get_unsatified_obs_constraints(obs); + vmap = get_unsatified_obs_constraints(obs,tol,true,include_weight); violations[name] = vmap; } @@ -2855,7 +2855,7 @@ map> Constraints::get_ensemble_violations_map(Parame } -map Constraints::get_unsatified_obs_constraints(Observations& constraints_sim, double tol, bool do_shift) +map Constraints::get_unsatified_obs_constraints(Observations& constraints_sim, double tol, bool do_shift, bool include_weight) { /* get a map of name, distance for each of the obs-based (e.g. model-based) constraints that are not satisfied in the constraint_obs container. tol is a percent-based tolerance to accont for constraints that are very near their required (rhs) value @@ -2866,6 +2866,8 @@ map Constraints::get_unsatified_obs_constraints(Observations& co Observations _constraints_sim(constraints_sim); if ((do_shift) && (use_chance)) _constraints_sim = get_chance_shifted_constraints(constraints_sim); + ObservationInfo oi = pest_scenario.get_ctl_observation_info(); + double weight; for (int i = 0; i < num_obs_constraints(); ++i) { string name = ctl_ord_obs_constraint_names[i]; @@ -2880,14 +2882,16 @@ map Constraints::get_unsatified_obs_constraints(Observations& co scaled_diff = abs((obs_val - sim_val) / obs_val); else scaled_diff = abs(obs_val - sim_val); - + weight = 1.0; + if (include_weight) + weight = oi.get_weight(name); //check for invalid obs constraints (e.g. satified) if ((constraint_sense_map[name] == ConstraintSense::less_than) && (sim_val > obs_val) && (scaled_diff > tol)) - unsatisfied[name] = sim_val - obs_val; + unsatisfied[name] = weight * (sim_val - obs_val); else if ((constraint_sense_map[name] == ConstraintSense::greater_than) && (sim_val < obs_val) && (scaled_diff > tol)) - unsatisfied[name] = obs_val - sim_val; + unsatisfied[name] = weight * (obs_val - sim_val); else if ((constraint_sense_map[name] == ConstraintSense::equal_to) && (sim_val != obs_val) && (scaled_diff > tol)) - unsatisfied[name] = abs(sim_val - obs_val); + unsatisfied[name] = weight * abs(sim_val - obs_val); } return unsatisfied; diff --git a/src/libs/pestpp_common/constraints.h b/src/libs/pestpp_common/constraints.h index a9f942574..baa222c9c 100644 --- a/src/libs/pestpp_common/constraints.h +++ b/src/libs/pestpp_common/constraints.h @@ -108,13 +108,13 @@ class Constraints //get maps of obs and pi constraints that are not satified - the value is the distance to cosntraint RHS map get_unsatified_pi_constraints(Parameters& par_and_dec_vars, double tol=0.0); - map get_unsatified_obs_constraints(Observations& constraints_sim, double tol=0.0, bool do_shift = true); + map get_unsatified_obs_constraints(Observations& constraints_sim, double tol=0.0, bool do_shift = true, bool include_weight = false); map get_constraint_map(Parameters& par_and_dec_vars, Observations& constraints_sim, bool do_shift); Mat get_working_set_constraint_matrix(Parameters& par_and_dec_vars, Observations& constraints_sim, const Jacobian_1to1& jco, bool do_shift, double working_set_tol = 0.1); Mat get_working_set_constraint_matrix(Parameters& par_and_dec_vars, Observations& constraints_sim, ParameterEnsemble& dv, ObservationEnsemble& oe, bool do_shift, double working_set_tol = 0.1); - map> get_ensemble_violations_map(ParameterEnsemble& pe, ObservationEnsemble& oe); + map> get_ensemble_violations_map(ParameterEnsemble& pe, ObservationEnsemble& oe, double tol=0.0,bool include_weight=true); //get the number of non-zero Prior info constraint elements int get_num_nz_pi_constraint_elements(); From 3f55f2f6d869b570c85b733092a3251d957927d0 Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 8 Jul 2022 15:34:26 -0500 Subject: [PATCH 08/19] starting on constraints --- src/libs/pestpp_common/SQP.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index 37700dec6..eab98e4b4 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -1823,7 +1823,8 @@ pair SeqQuadProgram::_kkt_null_space(Eigen::Ma rhs = (-1. * constraint_diff); message(1, "rhs", rhs); rsvd.solve_ip(coeff, s, U, V, pest_scenario.get_svd_info().eigthresh, pest_scenario.get_svd_info().maxsing); - coeff = V * s.inverse() * U.transpose(); + coeff = V * s.inverse().asDiagonal() * U.transpose(); + message(1, "coeff inv", coeff); p_y = coeff * rhs; message(1, "p_y", p_y); // tmp @@ -2032,7 +2033,8 @@ pair SeqQuadProgram::calc_search_direction_vec // throw error here if not all on/near constraint if ((constraint_diff.array() != 0.0).any()) // todo make some level of forgiveness with a tolerance parameter here { - throw_sqp_error("not on constraint"); // better to pick this up elsewhere (before) anyway + //throw_sqp_error("not on constraint"); // better to pick this up elsewhere (before) anyway + message(0,"WARNING: not on constraint, continuing..."); } // some transforms for solve @@ -2502,7 +2504,7 @@ bool SeqQuadProgram::seek_feasible() constraints.sqp_report(iter, current_ctl_dv_values, current_obs, true, "post feasible seek"); //todo: probably more algorithmic things here... last_best = get_obj_value(current_ctl_dv_values, current_obs); - message(1, "reset best phi value to ", last_best); + message(1, "finished seeking feasible, reset best phi value to ", last_best); return false; } From 0db7a089b4bb79760595c30a39be684cd328668b Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 14 Jul 2022 16:17:03 -0500 Subject: [PATCH 09/19] more work on sharing runs with ies in seek feas --- .../pestpp_common/EnsembleMethodUtils.cpp | 2 +- src/libs/pestpp_common/SQP.cpp | 64 +++++++++++++------ 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/libs/pestpp_common/EnsembleMethodUtils.cpp b/src/libs/pestpp_common/EnsembleMethodUtils.cpp index 851d9e61c..caffa07c5 100644 --- a/src/libs/pestpp_common/EnsembleMethodUtils.cpp +++ b/src/libs/pestpp_common/EnsembleMethodUtils.cpp @@ -4200,7 +4200,7 @@ void EnsembleMethod::initialize(int cycle, bool run, bool use_existing) ss << " with the prior simulated ensemble." << endl; message(0, ss.str()); - cout << "...see rec file or " << file_manager.get_base_filename() << ".pdc.csv" << "for listing of conflicted observations" << endl << endl; + cout << "...see rec file or " << file_manager.get_base_filename() << ".pdc.csv" << " for listing of conflicted observations" << endl << endl; ofstream& frec = file_manager.rec_ofstream(); frec << endl << "...conflicted observations: " << endl; for (auto oname : in_conflict) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index eab98e4b4..148dcf301 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -96,8 +96,8 @@ void SqpFilter::report(ofstream& frec, int iter) stringstream ss; ss.str(""); ss << endl << "... filter summary with " << obj_viol_pairs.size() << " pairs for iteration " << iter << ":" << endl; - ss << "-->obj min:max" << omin << ":" << omax << endl; - ss << "-->violation min:max" << vmin << ":" << vmax << endl; + ss << "-->obj min,max: " << omin << "," << omax << endl; + ss << "-->violation min,max: " << vmin << "," << vmax << endl; ss << endl; frec << ss.str(); @@ -1465,13 +1465,11 @@ void SeqQuadProgram::iterate_2_solution() if (n_consec_infeas > MAX_CONSEC_INFEAS) { ss.str(""); - ss << "number of consecutive infeasible iterations > " << MAX_CONSEC_INFEAS << ", switching ies to seek feasibility"; + ss << "number of consecutive infeasible iterations > " << MAX_CONSEC_INFEAS << ", switching to IES to seek feasibility"; message(0,ss.str()); seek_feasible(); n_consec_infeas = 0; } - - //update the underlying runs make_gradient_runs(current_ctl_dv_values,current_obs); @@ -1822,8 +1820,14 @@ pair SeqQuadProgram::_kkt_null_space(Eigen::Ma message(1, "coeff matrix for p_range_space component", coeff); // tmp rhs = (-1. * constraint_diff); message(1, "rhs", rhs); + cout << "starting SVD..." << endl; rsvd.solve_ip(coeff, s, U, V, pest_scenario.get_svd_info().eigthresh, pest_scenario.get_svd_info().maxsing); - coeff = V * s.inverse().asDiagonal() * U.transpose(); + cout << "...done..." << endl; + S_ = s.asDiagonal().inverse(); + cout << "s:" << S_.rows() << "," << S_.cols() << ", U:" << U.rows() << "," << U.cols() << ", V:" << V.rows() << "," << V.cols() << endl; + cout << endl << endl; + + coeff = V * S_ * U.transpose(); message(1, "coeff inv", coeff); p_y = coeff * rhs; @@ -2014,8 +2018,6 @@ pair SeqQuadProgram::calc_search_direction_vec message(0, "current working set:", cnames); Eigen::MatrixXd constraint_jco = constraint_mat.e_ptr()->toDense(); // or would you pref to slice and dice each time - this won't get too big but want to avoid replicates // and/or make Jacobian obj? - - //constraint_jco = jco.get_matrix(cnames, dv_names); message(1, "A:", constraint_jco); // tmp // add check here that A is full rank; warn that linearly dependent will be removed via factorization @@ -2031,10 +2033,11 @@ pair SeqQuadProgram::calc_search_direction_vec message(1, "constraint diff:", constraint_diff); // tmp // throw error here if not all on/near constraint - if ((constraint_diff.array() != 0.0).any()) // todo make some level of forgiveness with a tolerance parameter here + if ((constraint_diff.array().abs() > filter.get_viol_tol()).any()) // todo make some level of forgiveness with a tolerance parameter here { //throw_sqp_error("not on constraint"); // better to pick this up elsewhere (before) anyway - message(0,"WARNING: not on constraint, continuing..."); + cout << "constraint diff vector: " << constraint_diff.array() << endl; + message(0,"WARNING: not on constraint but working set not empty, continuing..."); } // some transforms for solve @@ -2128,7 +2131,7 @@ pair SeqQuadProgram::calc_search_direction_vec string to_drop = cnames[idx]; cnames.erase(cnames.begin() + idx); - message(1, "cnames after dropping atttempting:", cnames); // tmp + message(1, "cnames after dropping attempting:", cnames); // tmp // todo JDub now we need to skip alpha testing for this iter and recalc search_d without this constraint... i moved to next iter in proto because it was cheap, probably want to go back to start of search_d computation? // jwhite: will this process happen multiple times? If so, we probably need to wrap this process in a "while true" loop @@ -2455,16 +2458,20 @@ bool SeqQuadProgram::seek_feasible() if (snames.find(name) == send) { oi->get_observation_rec_ptr_4_mod(name)->weight = 0.0; + } else { ctl_obs.update_rec(name, shifted.get_rec(name)); - //oi->get_observation_rec_ptr_4_mod(name)->group = "__nz_temp__"; + oi->get_observation_rec_ptr_4_mod(name)->group = "__eqconstraint__"+name; } } - //snames = ies_pest_scenario.get_pestpp_options().get_passed_args(); - //if (snames.find("IES_NUM_REALS") == snames.end()) + snames = ies_pest_scenario.get_pestpp_options().get_passed_args(); + if (snames.find("IES_BAD_PHI_SIGMA") == snames.end()) + { + ies_pest_scenario.get_pestpp_options_ptr()->set_ies_bad_phi_sigma(1.25); + } ies_pest_scenario.get_pestpp_options_ptr()->set_ies_num_reals(pest_scenario.get_pestpp_options().get_sqp_num_reals()); ies_pest_scenario.get_pestpp_options_ptr()->set_ies_no_noise(true); ies_pest_scenario.get_pestpp_options_ptr()->set_ies_obs_csv(""); @@ -2474,27 +2481,44 @@ bool SeqQuadProgram::seek_feasible() ies_pest_scenario.get_control_info_4_mod().noptmax = 3; //TODO: make this an option some how? IterEnsembleSmoother ies(ies_pest_scenario, file_manager, output_file_writer, performance_log, run_mgr_ptr); - ies.initialize(); + if (use_ensemble_grad) { + ies.set_pe(dv); + ies.set_oe(oe); + ies.set_noise_oe(oe_base); + } + ies.initialize(iter,true,true); + ies.iterate_2_solution(); //what to do here? maybe we need to eval the kkt conditions to pick a new point that maintains the hessian? ParameterEnsemble* ies_pe_ptr = ies.get_pe_ptr(); + ObservationEnsemble* ies_oe_ptr = ies.get_oe_ptr(); + vector oreal_names = ies_oe_ptr->get_real_names(); + map aphi_map = ies.get_phi_handler().get_phi_map(L2PhiHandler::phiType::ACTUAL); + ies_pe_ptr->transform_ip(ParameterEnsemble::transStatus::CTL); names = ies_pe_ptr->get_var_names(); + Eigen::VectorXd cdv = current_ctl_dv_values.get_data_eigen_vec(dv_names); double mndiff = 1.0e+300; int mndiff_idx = -1; for (int i = 0; i < ies_pe_ptr->shape().first; i++) { - Eigen::VectorXd real = ies_pe_ptr->get_eigen_ptr()->row(i); - Eigen::VectorXd d = real - cdv; - double diff = (d.array() * d.array()).sum(); - if (diff < mndiff) + //cout << "real:" << oreal_names[i] << ", phi: " << aphi_map[oreal_names[i]] << endl; + //Eigen::VectorXd real = ies_pe_ptr->get_eigen_ptr()->row(i); + //Eigen::VectorXd d = real - cdv; + //double diff = (d.array() * d.array()).sum(); + //if (diff < mndiff) + if (aphi_map[oreal_names[i]] < mndiff) { - mndiff = diff; + mndiff = aphi_map[oreal_names[i]]; mndiff_idx = i; } } + ss.str(""); + ss << "updating current decision variable values with realization " << ies_pe_ptr->get_real_names()[mndiff_idx]; + ss << ", with minimum weighted constraint phi of " << mndiff; + message(1,ss.str()); cdv = ies_pe_ptr->get_real_vector(mndiff_idx); current_ctl_dv_values.update_without_clear(names, cdv); //update current obs From 50111cefce09d15ad2021ddd349793a23fbe93b7 Mon Sep 17 00:00:00 2001 From: jdub Date: Thu, 14 Jul 2022 17:03:55 -0500 Subject: [PATCH 10/19] plugged in should term from EM --- src/libs/pestpp_common/SQP.cpp | 125 ++++++++++++++++----------------- src/libs/pestpp_common/SQP.h | 3 + 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index 148dcf301..8b45c17fb 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -1429,6 +1429,7 @@ void SeqQuadProgram::iterate_2_solution() bool accept; n_consec_infeas = 0; + n_consec_phiinc = 0; for (int i = 0; i < pest_scenario.get_control_info().noptmax; i++) { iter++; @@ -1501,78 +1502,74 @@ void SeqQuadProgram::iterate_2_solution() bool SeqQuadProgram::should_terminate() { + //todo: use ies accept fac here? + double phiredstp = pest_scenario.get_control_info().phiredstp; + int nphistp = pest_scenario.get_control_info().nphistp; + int nphinored = pest_scenario.get_control_info().nphinored; + bool phiredstp_sat = false, nphinored_sat = false, consec_sat = false; + double phi, ratio; + int count = 0; + int nphired = 0; + //best_mean_phis = vector{ 1.0,0.8,0.81,0.755,1.1,0.75,0.75,1.2 }; + + + + /*if ((!consec_sat )&& (best_mean_phis.size() == 0)) + return false;*/ + message(0, "phi-based termination criteria check"); + message(1, "phiredstp: ", phiredstp); + message(1, "nphistp: ", nphistp); + message(1, "nphinored: ", nphinored); + message(1, "best phi yet: ", best_phi_yet); + + for (auto& phi : best_phis) + { + ratio = (phi - best_phi_yet) / phi; + if (ratio <= phiredstp) + count++; + } + message(1, "number of iterations satisfying phiredstp criteria: ", count); + if (count >= nphistp) + { + message(1, "number iterations satisfying phiredstp criteria > nphistp"); + phiredstp_sat = true; + } + + message(1, "number of iterations since best yet mean phi: ", nphired); + if (nphired >= nphinored) + { + message(1, "number of iterations since best yet mean phi > nphinored"); + nphinored_sat = true; + } + if (best_phis[best_phis.size() - 1] == 0.0) + { + message(1, "phi is zero, all done"); + return true; + } + + if ((nphinored_sat) || (phiredstp_sat) || (consec_sat)) + { + message(1, "phi-based termination criteria satisfied, all done"); + return true; + } int q = pest_utils::quit_file_found(); if ((q == 1) || (q == 2)) { - cout << "pest.stp' found, quitting" << endl; - file_manager.rec_ofstream() << "pest.stp' found, quitting" << endl; + message(1,"'pest.stp' found, quitting"); return true; } - if (iter >= pest_scenario.get_control_info().noptmax) - return true; - - //todo: work out some SQP-based criteria here... - //double phiredstp = pest_scenario.get_control_info().phiredstp; - //int nphistp = pest_scenario.get_control_info().nphistp; - //int nphinored = pest_scenario.get_control_info().nphinored; - //bool phiredstp_sat = false, nphinored_sat = false, consec_sat = false; - //double phi, ratio; - //int count = 0; - //int nphired = 0; - - //message(0, "phi-based termination criteria check"); - //message(1, "phiredstp: ", phiredstp); - //message(1, "nphistp: ", nphistp); - //message(1, "nphinored (also used for consecutive bad lambda cycles): ", nphinored); - //if (best_mean_phis.size() > 0) - //{ - // vector::iterator idx = min_element(best_mean_phis.begin(), best_mean_phis.end()); - // nphired = (best_mean_phis.end() - idx) - 1; - // best_phi_yet = best_mean_phis[idx - best_mean_phis.begin()];// *pest_scenario.get_pestpp_options().get_ies_accept_phi_fac(); - // message(1, "best mean phi sequence: ", best_mean_phis); - // message(1, "best phi yet: ", best_phi_yet); - //} - //message(1, "number of consecutive bad lambda testing cycles: ", consec_bad_lambda_cycles); - //if (consec_bad_lambda_cycles >= nphinored) - //{ - // message(1, "number of consecutive bad lambda testing cycles > nphinored"); - // consec_sat = true; - //} - - //for (auto &phi : best_mean_phis) - //{ - // ratio = (phi - best_phi_yet) / phi; - // if (ratio <= phiredstp) - // count++; - //} - //message(1, "number of iterations satisfying phiredstp criteria: ", count); - //if (count >= nphistp) - //{ - // message(1, "number iterations satisfying phiredstp criteria > nphistp"); - // phiredstp_sat = true; - //} - - //message(1, "number of iterations since best yet mean phi: ", nphired); - //if (nphired >= nphinored) - //{ - // message(1, "number of iterations since best yet mean phi > nphinored"); - // nphinored_sat = true; - //} - - //if ((nphinored_sat) || (phiredstp_sat) || (consec_sat)) - //{ - // message(1, "phi-based termination criteria satisfied, all done"); - // return true; - //} - return false; + else if (q == 4) + { + message(0,"pest.stp found with '4'. run mgr has returned control, removing file."); + if (!pest_utils::try_remove_quit_file()) + { + message(0,"error removing pest.stp file, bad times ahead..."); + } + } + return false; } - - - - - Eigen::VectorXd SeqQuadProgram::calc_gradient_vector_from_coeffs(const Parameters& _current_dv_values) { Eigen::VectorXd grad(dv_names.size()); diff --git a/src/libs/pestpp_common/SQP.h b/src/libs/pestpp_common/SQP.h index f61a480ec..0f338fb94 100644 --- a/src/libs/pestpp_common/SQP.h +++ b/src/libs/pestpp_common/SQP.h @@ -105,6 +105,9 @@ class SeqQuadProgram int num_threads; int n_consec_infeas; int MAX_CONSEC_INFEAS = 3; + int MAX_CONSEC_PHIINC = 3; + + int n_consec_phiinc; double eigthresh; vector scale_vals; From ebc641d0e6790fe0e6225d6b69dad4e51cff97cf Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 15 Jul 2022 16:13:26 -0500 Subject: [PATCH 11/19] more work on the filter --- src/libs/pestpp_common/SQP.cpp | 117 ++++++++++--------- src/libs/pestpp_common/SQP.h | 5 +- src/libs/pestpp_common/pest_data_structs.cpp | 2 +- 3 files changed, 66 insertions(+), 58 deletions(-) diff --git a/src/libs/pestpp_common/SQP.cpp b/src/libs/pestpp_common/SQP.cpp index 8b45c17fb..31356a0cf 100644 --- a/src/libs/pestpp_common/SQP.cpp +++ b/src/libs/pestpp_common/SQP.cpp @@ -18,7 +18,7 @@ #include "EnsembleSmoother.h" -bool SqpFilter::accept(double obj_val, double violation_val, int iter, double alpha) +bool SqpFilter::accept(double obj_val, double violation_val, int iter, double alpha,bool keep) { FilterRec candidate{ obj_val, violation_val,iter,alpha }; if (obj_viol_pairs.size() == 0) @@ -41,6 +41,11 @@ bool SqpFilter::accept(double obj_val, double violation_val, int iter, double al accept = false; break; } + if ((keep) && (accept)) + { + //cout << "obj:" << obj_val << ", viol:" << violation_val << ", alpha:" << alpha << endl; + obj_viol_pairs.insert(candidate); + } return accept; } @@ -96,8 +101,10 @@ void SqpFilter::report(ofstream& frec, int iter) stringstream ss; ss.str(""); ss << endl << "... filter summary with " << obj_viol_pairs.size() << " pairs for iteration " << iter << ":" << endl; - ss << "-->obj min,max: " << omin << "," << omax << endl; - ss << "-->violation min,max: " << vmin << "," << vmax << endl; + ss << " obj min: " << setw(10) << omin << endl; + ss << " obj max: " << setw(10) << omax << endl; + ss << " violation min: " << setw(10) << vmin << endl; + ss << " violation max: " << setw(10) << vmax << endl; ss << endl; frec << ss.str(); @@ -108,23 +115,19 @@ void SqpFilter::report(ofstream& frec, int iter) bool SqpFilter::update(double obj_val, double violation_val, int iter, double alpha) { //check if this candidate is nondom - bool acc = accept(obj_val, violation_val,iter, alpha); - if (!acc) - return false; + //bool acc = accept(obj_val, violation_val,iter, alpha); + //if (!acc) + // return false; FilterRec candidate; candidate.obj_val = obj_val; candidate.viol_val = violation_val; candidate.iter = iter; candidate.alpha = alpha; - set updated{ candidate }; - //for (auto& p : obj_viol_pairs) - //{ - // if (first_strictly_dominates_second(p, candidate)) - // updated.insert(p); - //} + multiset updated; + obj_viol_pairs.insert(candidate); bool i_is_dominated = false; - set::iterator first = obj_viol_pairs.begin(); - set::iterator second = obj_viol_pairs.begin(); + multiset::iterator first = obj_viol_pairs.begin(); + multiset::iterator second = obj_viol_pairs.begin(); for (int i=0;i{ 1.0,0.8,0.81,0.755,1.1,0.75,0.75,1.2 }; + //todo: save and write out the current phi grad vector (maybe save all of them???) + ss.str(""); + ss << "best phi sequence:" << endl; + ss << " "; + int ii = 0; + for (auto phi : best_phis) + { + ss << setw(10) << setprecision(4) << phi << " "; + ii++; + if (ii % 6 == 0) { + ss << endl; + ss << " "; + } + } + ss << endl; + message(0, ss.str()); /*if ((!consec_sat )&& (best_mean_phis.size() == 0)) return false;*/ @@ -2290,7 +2294,6 @@ bool SeqQuadProgram::solve_new() //Eigen::VectorXd vec = dv_num_candidate.get_data_eigen_vec(dv_names); Eigen::VectorXd vec = num_candidate.get_data_eigen_vec(dv_names); dv_candidates.update_real_ip(real_names[i], vec); - ss.str(""); message(1, "finished calcs for scaling factor:", scale_val); @@ -2482,8 +2485,13 @@ bool SeqQuadProgram::seek_feasible() ies.set_pe(dv); ies.set_oe(oe); ies.set_noise_oe(oe_base); + ies.initialize(iter,true,true); + } + else{ + ies.initialize(); } - ies.initialize(iter,true,true); + + ies.iterate_2_solution(); @@ -2641,7 +2649,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can } ss << " infeasibilty total: " << infeas_sum << ", "; infeas_vec.push_back(infeas_sum); - filter_accept = filter.accept(obj_vec[i], infeas_sum,iter,alpha_vals[i]); + filter_accept = filter.accept(obj_vec[i], infeas_sum,iter,alpha_vals[i],true); if (filter_accept) ss << " filter accepted "; else @@ -2668,7 +2676,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can } - filter.report(file_manager.rec_ofstream(),iter); + if (accept_idxs.size() > 0) @@ -2688,6 +2696,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can oext = obj_vec[iidx]; } } + filter.update(min_obj,infeas_vec[idx],iter,alpha_vals[idx]); } else { @@ -2739,7 +2748,7 @@ bool SeqQuadProgram::pick_candidate_and_update_current(ParameterEnsemble& dv_can ss.str(""); ss << "best candidate (scale factor: " << setprecision(4) << scale_vals[idx] << ", phi: " << oext << ")"; constraints.sqp_report(iter, cand_dv_values, cand_obs_values, true,ss.str()); - + filter.report(file_manager.rec_ofstream(),iter); //TODO: need more thinking here - do we accept only if filter accepts? I think so.... //if (((obj_sense == "minimize") && (oext < last_best)) || ((obj_sense == "maximize") && (oext > last_best))) if (accept) diff --git a/src/libs/pestpp_common/SQP.h b/src/libs/pestpp_common/SQP.h index 0f338fb94..27d28cfa7 100644 --- a/src/libs/pestpp_common/SQP.h +++ b/src/libs/pestpp_common/SQP.h @@ -50,18 +50,17 @@ class SqpFilter SqpFilter(bool _minimize=true,double _obj_tol = 0.01, double _viol_tol = 0.01) { minimize = _minimize; obj_tol = _obj_tol; viol_tol = _viol_tol; } - bool accept(double obj_val, double violation_val,int iter=0,double alpha=-1.0); + bool accept(double obj_val, double violation_val,int iter=0,double alpha=-1.0, bool keep=false); bool update(double obj_val, double violation_val, int iter=0,double alpha=-1.0); void report(ofstream& frec,int iter); double get_viol_tol() {return viol_tol;} - private: bool minimize; double obj_tol; double viol_tol; - set obj_viol_pairs; + multiset obj_viol_pairs; bool first_partially_dominates_second(const FilterRec& first, const FilterRec& second); bool first_strictly_dominates_second(const FilterRec& first, const FilterRec& second); diff --git a/src/libs/pestpp_common/pest_data_structs.cpp b/src/libs/pestpp_common/pest_data_structs.cpp index 9aa217605..94a237d59 100644 --- a/src/libs/pestpp_common/pest_data_structs.cpp +++ b/src/libs/pestpp_common/pest_data_structs.cpp @@ -1827,7 +1827,7 @@ void PestppOptions::set_defaults() set_sqp_obs_restart_en(""); set_sqp_num_reals(-1); set_sqp_update_hessian(false); - set_sqp_scale_facs(vector{0.00001, 0.0001, 0.01, 0.1, 1.0}); + set_sqp_scale_facs(vector{0.00001, 0.0001,0.001, 0.005, 0.01, 0.05, 0.075, 0.1, 0.25,0.5, 1.0}); set_mou_generator("DE"); set_mou_population_size(100); From 731e4587057d7a890136e8bba30efdd24f934d6d Mon Sep 17 00:00:00 2001 From: jdub Date: Sat, 16 Jul 2022 20:46:58 -0500 Subject: [PATCH 12/19] added more aliases for weight en arg --- src/libs/pestpp_common/pest_data_structs.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/pestpp_common/pest_data_structs.cpp b/src/libs/pestpp_common/pest_data_structs.cpp index 94a237d59..dec0cb5d8 100644 --- a/src/libs/pestpp_common/pest_data_structs.cpp +++ b/src/libs/pestpp_common/pest_data_structs.cpp @@ -856,10 +856,13 @@ bool PestppOptions::assign_ies_value_by_key(const string& key, const string& val return true; } - else if ((key == "IES_WEIGHTS_ENSEMBLE") || (key == "IES_WEIGHTS_EN")) + else if ((key == "IES_WEIGHTS_ENSEMBLE") || (key == "IES_WEIGHTS_EN") || + (key == "IES_WEIGHT_ENSEMBLE") || (key == "IES_WEIGHT_EN")) { passed_args.insert("IES_WEIGHTS_ENSEMBLE"); passed_args.insert("IES_WEIGHTS_EN"); + passed_args.insert("IES_WEIGHT_ENSEMBLE"); + passed_args.insert("IES_WEIGHT_EN"); //convert_ip(value, ies_obs_restart_csv); ies_weights_csv = org_value; return true; From d1ddec5d0b7365baabef3fdb9ba6e746d7f07ff1 Mon Sep 17 00:00:00 2001 From: jdub Date: Sun, 24 Jul 2022 21:54:12 -0500 Subject: [PATCH 13/19] added traps for extra var names in binary ensembles --- src/libs/common/utilities.cpp | 4 +- src/libs/pestpp_common/Ensemble.cpp | 37 ++++++++++++++++++- .../pestpp_common/EnsembleMethodUtils.cpp | 4 ++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/libs/common/utilities.cpp b/src/libs/common/utilities.cpp index 39da2b129..016f546a4 100644 --- a/src/libs/common/utilities.cpp +++ b/src/libs/common/utilities.cpp @@ -790,7 +790,8 @@ void read_dense_binary(const string& filename, vector& row_names, vector while (true) { //finished - if ((in.bad()) || (in.eof())) + //if ((in.bad()) || (in.eof())) + if ((i > 0) && (!in.good())) { break; } @@ -836,6 +837,7 @@ void read_dense_binary(const string& filename, vector& row_names, vector break; } row_names.push_back(name); + i++; } in.close(); diff --git a/src/libs/pestpp_common/Ensemble.cpp b/src/libs/pestpp_common/Ensemble.cpp index 7f5c57664..28378d019 100644 --- a/src/libs/pestpp_common/Ensemble.cpp +++ b/src/libs/pestpp_common/Ensemble.cpp @@ -2258,7 +2258,7 @@ void ParameterEnsemble::from_binary(string file_name, bool forgive) map header_info = Ensemble::from_binary(file_name, names, false); unordered_setsvar_names(var_names.begin(), var_names.end()); vector missing; - for (auto& name : pest_scenario_ptr->get_ctl_ordered_adj_par_names()) + for (auto& name : names) { if (svar_names.find(name) == svar_names.end()) { @@ -2282,6 +2282,24 @@ void ParameterEnsemble::from_binary(string file_name, bool forgive) throw_ensemble_error("from_binary() error: the following adjustable parameter names in the control file are not in the binary parameter ensemble file:", missing); } } + missing.clear(); + svar_names.clear(); + svar_names.insert(names.begin(),names.end()); + unordered_set::iterator send = svar_names.end(); + for (auto& name: var_names) + { + if (svar_names.find(name) == send) + { + missing.push_back(name); + } + } + if (missing.size() > 0) + { + drop_cols(missing); + } + + + prep_par_ensemble_after_read(header_info); } @@ -3735,6 +3753,23 @@ void ObservationEnsemble::from_binary(string file_name) if (missing.size() > 0) throw_ensemble_error("from_binary() error: the following non-zero-weighted obs names in the control file are not in the binary obs ensemble file:", missing); names = pest_scenario_ptr->get_ctl_ordered_obs_names(); + missing.clear(); + svar_names.clear(); + svar_names.insert(names.begin(),names.end()); + unordered_set::iterator send = svar_names.end(); + + for (auto& name : var_names) + { + if (svar_names.find(name) == send) + { + missing.push_back(name); + } + } + if (missing.size() > 0) + { + //drop these extra vars + drop_cols(missing); + } if (var_names.size() < names.size()) { update_var_map(); diff --git a/src/libs/pestpp_common/EnsembleMethodUtils.cpp b/src/libs/pestpp_common/EnsembleMethodUtils.cpp index caffa07c5..6019afeb9 100644 --- a/src/libs/pestpp_common/EnsembleMethodUtils.cpp +++ b/src/libs/pestpp_common/EnsembleMethodUtils.cpp @@ -4133,6 +4133,10 @@ void EnsembleMethod::initialize(int cycle, bool run, bool use_existing) vector failed = run_ensemble(pe, oe, vector(), cycle); if (pe.shape().first == 0) throw_em_error("all realizations failed during initial evaluation"); + if (pest_scenario.get_pestpp_options().get_ies_debug_fail_remainder()) + { + failed.push_back(0); + } if (failed.size() > 0) { ss.str(""); From 54a783284299fd670aa9135d9ae5f7381e7bfdfd Mon Sep 17 00:00:00 2001 From: jdub Date: Mon, 25 Jul 2022 11:40:46 -0500 Subject: [PATCH 14/19] checking binary pe names against all pars, not just adj pars --- src/libs/pestpp_common/Ensemble.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/pestpp_common/Ensemble.cpp b/src/libs/pestpp_common/Ensemble.cpp index 28378d019..e4a609872 100644 --- a/src/libs/pestpp_common/Ensemble.cpp +++ b/src/libs/pestpp_common/Ensemble.cpp @@ -2284,6 +2284,7 @@ void ParameterEnsemble::from_binary(string file_name, bool forgive) } missing.clear(); svar_names.clear(); + names = pest_scenario_ptr->get_ctl_ordered_par_names(); svar_names.insert(names.begin(),names.end()); unordered_set::iterator send = svar_names.end(); for (auto& name: var_names) From c6d17a8f04b0ee03707ea3cbdc0ec844078c643c Mon Sep 17 00:00:00 2001 From: jdub Date: Mon, 25 Jul 2022 21:34:21 -0500 Subject: [PATCH 15/19] fix in pe constructor to set org real names --- src/libs/pestpp_common/Ensemble.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libs/pestpp_common/Ensemble.cpp b/src/libs/pestpp_common/Ensemble.cpp index e4a609872..64bc68efc 100644 --- a/src/libs/pestpp_common/Ensemble.cpp +++ b/src/libs/pestpp_common/Ensemble.cpp @@ -1977,6 +1977,7 @@ ParameterEnsemble::ParameterEnsemble(Pest *_pest_scenario_ptr, std::mt19937* _ra reals = _reals; var_names = _var_names; real_names = _real_names; + org_real_names = _real_names; tstat = transStatus::CTL; set_fixed_names(); } From 0f3b231dbc71e575af769f56f7cbe6c0568cdbc0 Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 29 Jul 2022 11:23:45 -0500 Subject: [PATCH 16/19] fix in regul solve to handle failed der runs, more testing --- src/libs/pestpp_common/Jacobian_1to1.cpp | 5 +++-- src/libs/pestpp_common/SVDSolver.cpp | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libs/pestpp_common/Jacobian_1to1.cpp b/src/libs/pestpp_common/Jacobian_1to1.cpp index 54d92148b..9df0c32f2 100644 --- a/src/libs/pestpp_common/Jacobian_1to1.cpp +++ b/src/libs/pestpp_common/Jacobian_1to1.cpp @@ -296,11 +296,12 @@ bool Jacobian_1to1::process_runs(ParamTransformSeq &par_transform, run_manager.get_model_parameters(par_run.second[0], run_list.back().ctl_pars); bool success = run_manager.get_observations_vec(par_run.second[0], run_list.back().obs_vec); run_list.back().numeric_derivative_par = cur_numeric_par_value; - /*if ((debug_fail) && (i_run == 1)) + if (debug_fail) { file_manager.rec_ofstream() << "NOTE: 'GLM_DEBUG_DER_FAIL' is true, failing jco run for parameter '" << cur_par_name << "'" << endl; success = false; - }*/ + debug_fail = false; + } if (success) { par_transform.model2ctl_ip(run_list.back().ctl_pars); diff --git a/src/libs/pestpp_common/SVDSolver.cpp b/src/libs/pestpp_common/SVDSolver.cpp index 88ae66d01..f5cd44c67 100644 --- a/src/libs/pestpp_common/SVDSolver.cpp +++ b/src/libs/pestpp_common/SVDSolver.cpp @@ -1762,6 +1762,7 @@ PhiComponets SVDSolver::phi_estimate(const ModelRun &base_run, const Jacobian &j Parameters new_ctl_pars = par_transform.active_ctl2ctl_cp(new_pars); Parameters delta_par = par_transform.active_ctl2numeric_cp(new_pars) - par_transform.active_ctl2numeric_cp(base_run_active_ctl_par); + delta_par.erase(freeze_active_ctl_pars); vector numeric_par_names = delta_par.get_keys(); VectorXd delta_par_vec = transformable_2_eigen_vec(delta_par, numeric_par_names); Eigen::SparseMatrix jac = jacobian.get_matrix(obs_names_vec, numeric_par_names); From 81b55446b384279fa542b3560ca3e1ba2ec08cba Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 29 Jul 2022 12:23:59 -0500 Subject: [PATCH 17/19] fix in regul --- src/libs/pestpp_common/Regularization.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libs/pestpp_common/Regularization.cpp b/src/libs/pestpp_common/Regularization.cpp index 6550fdadd..7e4d547ea 100644 --- a/src/libs/pestpp_common/Regularization.cpp +++ b/src/libs/pestpp_common/Regularization.cpp @@ -102,8 +102,11 @@ PestppOptions::ARG_STATUS DynamicRegularization::assign_value_by_key(const std:: pest_utils::convert_ip(value, wf_min); else if (key == "WFMAX") pest_utils::convert_ip(value, wf_max); - else if (key == "WFINIT") - pest_utils::convert_ip(value, wf_init); + else if (key == "WFINIT") { + pest_utils::convert_ip(value, wf_init); + tikhonov_weight = wf_init; + } + else if (key == "WFTOL") pest_utils::convert_ip(value, wftol); else if (key == "WFFAC") @@ -140,6 +143,7 @@ void DynamicRegularization::set_defaults() wffac = 0; wftol = 1000; wf_init = 1.0; + tikhonov_weight = 1.0; max_reg_iter = 20; } From 50332861c7c469888dd5693b7a771de94b53aa64 Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 29 Jul 2022 13:36:35 -0500 Subject: [PATCH 18/19] version --- src/libs/common/config_os.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/common/config_os.h b/src/libs/common/config_os.h index 9aa0fdb39..9e318fb2d 100644 --- a/src/libs/common/config_os.h +++ b/src/libs/common/config_os.h @@ -2,7 +2,7 @@ #define CONFIG_OS_H_ -#define PESTPP_VERSION "5.1.17"; +#define PESTPP_VERSION "5.1.18"; #if defined(_WIN32) || defined(_WIN64) #define OS_WIN From 848eaf2385943dc6ffd398b96b4390730cde9042 Mon Sep 17 00:00:00 2001 From: jdub Date: Fri, 29 Jul 2022 16:33:31 -0500 Subject: [PATCH 19/19] doc --- documentation/pestpp_users_guide_v5.1.17.docx | Bin 1903196 -> 0 bytes documentation/pestpp_users_manual.md | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 documentation/pestpp_users_guide_v5.1.17.docx diff --git a/documentation/pestpp_users_guide_v5.1.17.docx b/documentation/pestpp_users_guide_v5.1.17.docx deleted file mode 100644 index 6cde4adc941611da0963fab3c198a2550c6f2e4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1903196 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≀jLxhG=IoeqDMxNnj=j+%xE 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�jPIpd98dJuA9Y)d( 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%0D1G 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 xEuF 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