Skip to content

Commit

Permalink
Merge pull request #103 from lbl-srg/issue94_fixTestModels
Browse files Browse the repository at this point in the history
Issue94 fix test models
  • Loading branch information
dhblum authored Dec 18, 2017
2 parents 1df4d00 + cf0a9fe commit dc61f79
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 80 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
,Ptot,easPhvac,easTdb,halPhvac,halTdb,wesPhvac,wesTdb
Value,0.0,0.0,0.428763102055,0.0,0.317555743449,0.0,0.338011330858
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
,Ptot,easPhvac,easTdb,halPhvac,halTdb,wesPhvac,wesTdb
Value,0.0,0.0,0.428766084627,0.0,0.317555034536,0.0,0.338015352604
116 changes: 36 additions & 80 deletions unittests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,45 +200,13 @@ def setUp(self):
self.measurements,
self.measurement_variable_map,
tz_name = self.weather.tz_name);

def test_simulate_initial_parameters(self):
'''Test the simulation of the model.'''
plt.close('all');
# Simulation time
self.start_time = '1/1/2015';
self.final_time = '1/4/2015';
# Exodata
self.weather.collect_data(self.start_time, self.final_time);
self.internal.collect_data(self.start_time, self.final_time);
self.control.collect_data(self.start_time, self.final_time);
# Collect emulation measurements for comparison
self.building_est.collect_measurements(self.start_time, self.final_time);
# Instantiate model
self.model = models.Modelica(self.estimate_method, \
self.validation_method, \
self.building_est.measurements, \
moinfo = (self.mopath, self.modelpath, self.libraries), \
zone_names = self.zone_names, \
weather_data = self.weather.data, \
internal_data = self.internal.data, \
control_data = self.control.data, \
parameter_data = self.parameters.data, \
tz_name = self.weather.tz_name);
# Simulate model with current guess of parameters
self.model.simulate(self.start_time, self.final_time);
# Check references
df_test = self.model.display_measurements('Simulated');
self.check_df(df_test, 'simulate_initial_parameters.csv');

def test_estimate_and_validate(self):
'''Test the estimation of a model's coefficients based on measured data.'''
plt.close('all');
# Exogenous collection time
self.start_time_exodata = '1/1/2015';
self.final_time_exodata = '1/30/2015';
# Emulation time
self.start_time_emulation = '1/1/2015';
self.final_time_emulation = '1/4/2015';
self.final_time_exodata = '1/30/2015';
# Estimation time
self.start_time_estimation = '1/1/2015';
self.final_time_estimation = '1/4/2015';
Expand All @@ -257,7 +225,7 @@ def test_estimate_and_validate(self):
self.building_est.control_data = self.control.data;
self.building_est.tz_name = self.weather.tz_name;
# Collect measurement data
self.building_est.collect_measurements(self.start_time_emulation, self.final_time_emulation);
self.building_est.collect_measurements(self.start_time_estimation, self.final_time_estimation);
# Instantiate model
self.model = models.Modelica(self.estimate_method, \
self.validation_method, \
Expand All @@ -269,16 +237,28 @@ def test_estimate_and_validate(self):
control_data = self.control.data, \
parameter_data = self.parameters.data, \
tz_name = self.weather.tz_name);
# Simulate model with initial guess
self.model.simulate(self.start_time_estimation, self.final_time_estimation)
# Check references
df_test = self.model.display_measurements('Simulated');
self.check_df(df_test, 'simulate_initial_parameters.csv');
# Estimate model based on emulated data
self.model.estimate(self.start_time_estimation, self.final_time_estimation, self.measurement_variable_list);
# Validate model based on estimation data
self.model.validate(self.start_time_estimation, self.final_time_estimation, \
os.path.join(self.get_unittest_path(), 'outputs', 'model_estimation_csv'), plot=0)
# Check references
df_test = self.model.display_measurements('Simulated');
self.check_df(df_test, 'simulate_estimated_parameters.csv');
RMSE = {};
for key in self.model.RMSE.keys():
RMSE[key] = {};
RMSE[key]['Value'] = self.model.RMSE[key].display_data();
df_test = pd.DataFrame(data = RMSE);
self.check_df(df_test, 'estimate_RMSE.csv', timeseries=False);
# Validate on validation data
self.building_val.collect_measurements(self.start_time_validation, self.final_time_validation);
self.model.measurements = self.building_val.measurements;
self.model.validate(self.start_time_validation, self.final_time_validation, \
os.path.join(self.get_unittest_path(), 'outputs', 'model_validation'));
os.path.join(self.get_unittest_path(), 'outputs', 'model_validation_csv'), plot=0);
# Check references
RMSE = {};
for key in self.model.RMSE.keys():
Expand Down Expand Up @@ -343,49 +323,13 @@ def setUp(self):
fmupath = self.building_source_file_path, \
zone_names = self.zone_names, \
parameter_data = building_parameters_data);

def test_simulate_initial_parameters(self):
'''Test the simulation of the model.'''
plt.close('all');
# Simulation time
self.start_time = '1/1/2015';
self.final_time = '1/4/2015';
# Exodata
self.weather.collect_data(self.start_time, self.final_time);
self.internal.collect_data(self.start_time, self.final_time);
self.control.collect_data(self.start_time, self.final_time);
# Collect emulation measurements for comparison
self.building.weather_data = self.weather.data;
self.building.internal_data = self.internal.data;
self.building.control_data = self.control.data;
self.building.tz_name = self.weather.tz_name;
self.building.collect_measurements(self.start_time, self.final_time);
# Instantiate model
self.model = models.Modelica(self.estimate_method, \
self.validation_method, \
self.building.measurements, \
moinfo = (self.mopath, self.modelpath, self.libraries), \
zone_names = self.zone_names, \
weather_data = self.weather.data, \
internal_data = self.internal.data, \
control_data = self.control.data, \
parameter_data = self.parameters.data, \
tz_name = self.weather.tz_name);
# Simulate model with current guess of parameters
self.model.simulate(self.start_time, self.final_time);
# Check references
df_test = self.model.display_measurements('Simulated');
self.check_df(df_test, 'simulate_initial_parameters.csv');

def test_estimate_and_validate(self):
'''Test the estimation of a model's coefficients based on measured data.'''
plt.close('all');
# Exogenous collection time
self.start_time_exodata = '1/1/2015';
self.final_time_exodata = '1/30/2015';
# Emulation time
self.start_time_emulation = '1/1/2015';
self.final_time_emulation = '1/4/2015';
self.final_time_exodata = '1/30/2015';
# Estimation time
self.start_time_estimation = '1/1/2015';
self.final_time_estimation = '1/4/2015';
Expand All @@ -404,7 +348,7 @@ def test_estimate_and_validate(self):
self.building.control_data = self.control.data;
self.building.tz_name = self.weather.tz_name;
# Collect measurement data
self.building.collect_measurements(self.start_time_emulation, self.final_time_emulation);
self.building.collect_measurements(self.start_time_estimation, self.final_time_estimation);
# Instantiate model
self.model = models.Modelica(self.estimate_method, \
self.validation_method, \
Expand All @@ -415,17 +359,29 @@ def test_estimate_and_validate(self):
internal_data = self.internal.data, \
control_data = self.control.data, \
parameter_data = self.parameters.data, \
tz_name = self.weather.tz_name);
tz_name = self.weather.tz_name);
# Simulate model with initial guess
self.model.simulate(self.start_time_estimation, self.final_time_estimation)
# Check references
df_test = self.model.display_measurements('Simulated');
self.check_df(df_test, 'simulate_initial_parameters.csv');
# Estimate model based on emulated data
self.model.estimate(self.start_time_estimation, self.final_time_estimation, self.measurement_variable_list);
# Validate model based on estimation data
self.model.validate(self.start_time_estimation, self.final_time_estimation, \
os.path.join(self.get_unittest_path(), 'outputs', 'model_estimation'), plot=0)
# Check references
df_test = self.model.display_measurements('Simulated');
self.check_df(df_test, 'simulate_estimated_parameters.csv');
RMSE = {};
for key in self.model.RMSE.keys():
RMSE[key] = {};
RMSE[key]['Value'] = self.model.RMSE[key].display_data();
df_test = pd.DataFrame(data = RMSE);
self.check_df(df_test, 'estimate_RMSE.csv', timeseries=False);
# Validate on validation data
self.building.collect_measurements(self.start_time_validation, self.final_time_validation);
self.model.measurements = self.building.measurements;
self.model.validate(self.start_time_validation, self.final_time_validation, \
os.path.join(self.get_unittest_path(), 'outputs', 'model_validation'));
os.path.join(self.get_unittest_path(), 'outputs', 'model_validation'), plot=0);
# Check references
RMSE = {};
for key in self.model.RMSE.keys():
Expand Down Expand Up @@ -465,7 +421,7 @@ def test_estimate_error_continue(self):
tz_name = self.weather.tz_name);
# Error when estimate model
with self.assertRaises(ValueError):
self.model.estimate(start_time_estimation, final_time_estimation, self.measurement_variable_list);
self.model.estimate(start_time_estimation, final_time_estimation, self.measurement_variable_list);

#%%
class EstimateFromUKF(TestCaseMPCPy):
Expand Down

0 comments on commit dc61f79

Please sign in to comment.