Skip to content

Commit 34530fb

Browse files
committed
more work to handle fixed pars with a nondefault scale and/or offset
1 parent 9c33193 commit 34530fb

File tree

3 files changed

+33
-23
lines changed

3 files changed

+33
-23
lines changed

benchmarks/mou_tests_2.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2156,7 +2156,27 @@ def zdt1_fixed_scaleoffset_test():
21562156

21572157
print(df.loc[others,:])
21582158
assert np.all(df.loc[others,"val"].values <= 0)
2159+
dv0 = pd.read_csv(os.path.join(t_d,"zdt1.0.dv_pop.csv"),index_col=0)
2160+
assert dv0.shape == pe.shape
2161+
diff = np.abs(dv0.values - pe._df.loc[dv0.index,dv0.columns].values)
2162+
print(diff)
2163+
print(diff.sum())
2164+
assert diff.max() < 1e-10
2165+
pst.control_data.noptmax = 1
2166+
pst.write(os.path.join(t_d,"zdt1.pst"))
21592167

2168+
pyemu.os_utils.run("{0} {1}".format(exe_path,"zdt1.pst"),cwd=t_d)
2169+
dv1 = pd.read_csv(os.path.join(t_d,"zdt1.1.dv_pop.csv"),index_col=0)
2170+
for other in others:
2171+
#print(dv1.loc[:,other])
2172+
assert np.all(dv1.loc[:,other].values > 0)
2173+
#make sure that the values in the fixed columns are also in the initial pe
2174+
min_diff = 1e10
2175+
for val in dv1.loc[:,other].values:
2176+
min_diff = min(min_diff,np.abs((pe.loc[:,others] - val).values).min())
2177+
print(min_diff)
2178+
assert min_diff < 1e-10
2179+
21602180

21612181
def zdt1_fixedtied_stack_test():
21622182
t_d = mou_suite_helper.setup_problem("zdt1",True,True)
@@ -2695,7 +2715,7 @@ def mou_bound_handling_test():
26952715

26962716

26972717
if __name__ == "__main__":
2698-
mou_bound_handling_test()
2718+
#mou_bound_handling_test()
26992719
#basic_pso_test()
27002720
#test_restart_all()
27012721
#chance_consistency_test()
@@ -2709,7 +2729,7 @@ def mou_bound_handling_test():
27092729
#plot_hosaki(m_d=os.path.join("mou_tests","hosaki_empcov_master_risk"))
27102730
#basic_pso_test()
27112731
#zdt1_fixedtied_stack_test()
2712-
#zdt1_fixed_scaleoffset_test()
2732+
zdt1_fixed_scaleoffset_test()
27132733
#shutil.copy2(os.path.join("..","exe","windows","x64","Debug","pestpp-mou.exe"),os.path.join("..","bin","pestpp-mou.exe"))
27142734
#invest()
27152735
#plot()
@@ -2777,4 +2797,4 @@ def mou_bound_handling_test():
27772797

27782798
#pop_sched_test()
27792799
#simplex_invest_1()
2780-
pi_output_test()
2800+
#pi_output_test()

src/libs/pestpp_common/Ensemble.cpp

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2229,7 +2229,7 @@ map<int,int> ParameterEnsemble::add_runs(RunManagerAbstract *run_mgr_ptr,const v
22292229
par_transform.active_ctl2model_ip(pars_real);
22302230
else if (tstat == ParameterEnsemble::transStatus::NUM)
22312231
par_transform.numeric2model_ip(pars_real);
2232-
replace_fixed(rname, pars_real);
2232+
replace_fixed(rname, pars_real, true);
22332233
nn = pars_real.get_notnormal_keys();
22342234
if (nn.size() > 0) {
22352235
stringstream ss;
@@ -2433,19 +2433,7 @@ void ParameterEnsemble::prep_par_ensemble_after_read(map<string, int>& header_in
24332433
tied_names.push_back(name);
24342434
}
24352435
}
2436-
// vector<string> problems;
2437-
// for (auto& name : fixed_names)
2438-
// {
2439-
// if ((pi.get_parameter_rec_ptr(name)->scale != 1.0) ||
2440-
// (pi.get_parameter_rec_ptr(name)->offset != 0.0))
2441-
// {
2442-
// problems.push_back(name);
2443-
// }
2444-
// }
2445-
// if (problems.size())
2446-
// {
2447-
// throw_ensemble_error("the following fixed parameters have been passed values but have non-trivial scale/offset, which is not supported",problems);
2448-
// }
2436+
24492437
pfinfo.set_fixed_names(fixed_names);
24502438
fill_fixed(header_info, fixed_names);
24512439
save_fixed(fixed_names);
@@ -3417,7 +3405,7 @@ void ParameterEnsemble::to_csv_by_reals(ofstream &csv, bool write_header)
34173405
}
34183406
}
34193407

3420-
void ParameterEnsemble::replace_fixed(string real_name,Parameters &pars)
3408+
void ParameterEnsemble::replace_fixed(string real_name,Parameters &pars, bool to_model)
34213409
{
34223410

34233411
map<string, double> rmap = pfinfo.get_real_fixed_values(real_name);
@@ -3426,10 +3414,12 @@ void ParameterEnsemble::replace_fixed(string real_name,Parameters &pars)
34263414
for (auto& r : rmap)
34273415
{
34283416
val = r.second;
3429-
scale = pest_scenario_ptr->get_ctl_parameter_info_ptr_4_mod()->get_parameter_rec_ptr(r.first)->scale;
3430-
offset = pest_scenario_ptr->get_ctl_parameter_info_ptr_4_mod()->get_parameter_rec_ptr(r.first)->offset;
3431-
val -= offset;
3432-
val /= scale;
3417+
if (!to_model) {
3418+
scale = pest_scenario_ptr->get_ctl_parameter_info_ptr_4_mod()->get_parameter_rec_ptr(r.first)->scale;
3419+
offset = pest_scenario_ptr->get_ctl_parameter_info_ptr_4_mod()->get_parameter_rec_ptr(r.first)->offset;
3420+
val -= offset;
3421+
val /= scale;
3422+
}
34333423
pars.update_rec(r.first, val);
34343424
}
34353425

src/libs/pestpp_common/Ensemble.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ class ParameterEnsemble : public Ensemble
208208
transStatus tstat;
209209
void save_fixed(vector<string>& fixed_names);
210210
void fill_fixed(const map<string, int> &header_info, vector<string>& fixed_names);
211-
void replace_fixed(string real_name,Parameters &pars);
211+
void replace_fixed(string real_name,Parameters &pars,bool to_model=false);
212212
void prep_par_ensemble_after_read(map<string,int>& header_info);
213213
FixedParInfo pfinfo;
214214
};

0 commit comments

Comments
 (0)