예제 #1
0
 def setUp(self):
     self.start_time = '1/1/2017'
     self.final_time = '1/2/2017'
     # Set .mo path
     self.mopath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                'model', 'Simple.mo')
     # Gather inputs
     control_csv_filepath = utility.get_MPCPy_path(
     ) + os.sep + 'resources' + os.sep + 'model' + os.sep + 'SimpleRC_Input.csv'
     control_variable_map = {
         'q_flow_csv': ('q_flow', units.W)
     }
     self.controls = exodata.ControlFromCSV(control_csv_filepath,
                                            control_variable_map)
     self.controls.collect_data(self.start_time, self.final_time)
     # Set measurements
     self.measurements = {}
     self.measurements['T_db'] = {
         'Sample': variables.Static('T_db_sample', 1800, units.s)
     }
     self.measurements['q_flow'] = {
         'Sample': variables.Static('q_flow_sample', 1800, units.s)
     }
     # Gather constraints
     constraint_csv_filepath = utility.get_MPCPy_path(
     ) + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'SimpleRC_Constraints.csv'
     constraint_variable_map = {'q_flow_min' : ('q_flow', 'GTE', units.W), \
                                'T_db_min' : ('T_db', 'GTE', units.K), \
                                'T_db_max' : ('T_db', 'LTE', units.K)}
     self.constraints = exodata.ConstraintFromCSV(constraint_csv_filepath,
                                                  constraint_variable_map)
     self.constraints.collect_data(self.start_time, self.final_time)
     self.constraints.data['T_db']['Initial'] = variables.Static(
         'T_db_start', 295, units.K)
예제 #2
0
 def setUp(self):
     # Time
     start_time_occupancy = '3/1/2012'
     final_time_occupancy = '3/7/2012 23:55:00'
     # Load occupancy models
     with open(os.path.join(utility.get_MPCPy_path(), 'unittests', 'references', 'test_models',\
                            'OccupancyFromQueueing', 'occupancy_model_estimated.txt'), 'r') as f:
         occupancy_model = pickle.load(f)
     # Define state variables and values
     state_variable_list = [
         'wesTdb', 'wesTdb', 'easTdb', 'easTdb', 'halTdb', 'halTdb'
     ]
     values_list = [[25, 30], [20, 15], [25 + 273.15, 30 + 273.15],
                    [20 + 273.15, 15 + 273.15], [25, 30], [20, 15]]
     constraint_type_list = ['LTE', 'GTE', 'LTE', 'GTE', 'LTE', 'GTE']
     unit_list = [
         units.degC, units.degC, units.K, units.K, units.degC, units.degC
     ]
     # Simulate occupancy model
     simulate_options = occupancy_model.get_simulate_options()
     simulate_options['iter_num'] = 5
     np.random.seed(1)
     # start with same seed for random number generation
     occupancy_model.simulate(start_time_occupancy, final_time_occupancy)
     # Instantiate constraint object
     self.constraints = exodata.ConstraintFromOccupancyModel(
         state_variable_list, values_list, constraint_type_list, unit_list,
         occupancy_model)
예제 #3
0
 def setUp(self):
     self.parameter_data = {}
     self.parameter_data['par'] = {}
     self.parameter_data['par']['Value'] = 1
     # instantiate building fmu v1.0
     self.building_1 = systems.EmulationFromFMU(
         {},
         fmupath=utility.get_MPCPy_path() + os.sep + 'resources' + os.sep +
         'building' + os.sep + 'LBNL71T_Emulation_JModelica_v1.fmu',
         parameter_data=self.parameter_data)
     # instantiate building fmu v2.0
     self.building_2 = systems.EmulationFromFMU(
         {},
         fmupath=utility.get_MPCPy_path() + os.sep + 'resources' + os.sep +
         'building' + os.sep + 'LBNL71T_Emulation_JModelica_v2.fmu',
         parameter_data=self.parameter_data)
예제 #4
0
    def get_ref_path(self):
        ref_path = os.path.join(utility.get_MPCPy_path(), 'unittests',
                                'references',
                                self.__module__.split('.')[-1],
                                self.__class__.__name__)

        return ref_path
예제 #5
0
 def setUp(self):
     # Time
     start_time_occupancy = '4/1/2013'
     final_time_occupancy = '4/7/2013 23:55:00'
     # Load occupancy models
     with open(os.path.join(utility.get_MPCPy_path(), 'unittests', 'references', \
                            'test_models', 'OccupancyFromQueueing', \
                            'occupancy_model_estimated.txt'), 'r') as f:
         occupancy_model = pickle.load(f)
     # Define zones and loads
     zone_list = ['wes', 'hal', 'eas']
     load_list = [[0.4, 0.4, 0.2], [0.4, 0.4, 0.2], [0.4, 0.4, 0.2]]
     # Simulate occupancy models for each zone
     occupancy_model_list = []
     np.random.seed(1)
     # start with same seed for random number generation
     for zone in zone_list:
         simulate_options = occupancy_model.get_simulate_options()
         simulate_options['iter_num'] = 5
         occupancy_model.simulate(start_time_occupancy,
                                  final_time_occupancy)
         occupancy_model_list.append(copy.deepcopy(occupancy_model))
     # Instantiate internal object
     self.internal = exodata.InternalFromOccupancyModel(
         zone_list, load_list, units.W_m2, occupancy_model_list)
예제 #6
0
파일: test_models.py 프로젝트: rchml/MPCPy
 def setUp(self):
     # Testing time
     self.start_time = '3/8/2013'
     self.final_time = '3/15/2013 23:59'
     # Set path variable(s)
     self.MPCPyPath = utility.get_MPCPy_path()
     # Setup building measurement collection from csv
     self.csv_filepath = self.MPCPyPath + os.sep + 'resources' + os.sep + 'building' + os.sep + 'OccData.csv'
     # Measurements
     self.measurements = {}
     self.measurements['occupancy'] = {
         'Sample': variables.Static('occupancy_sample', 300, units.s)
     }
     self.measurement_variable_map = {
         'Total People Count for the whole building (+)':
         ('occupancy', units.unit1)
     }
     # Instantiate building measurement source
     self.building = systems.RealFromCSV(self.csv_filepath, \
                                         self.measurements,
                                         self.measurement_variable_map,
                                         time_header = 'Date')
     # Where to save ref occupancy model
     self.occupancy_model_file = self.get_ref_path(
     ) + os.sep + 'occupancy_model_estimated.txt'
예제 #7
0
 def get_unittest_path(self):
     '''Returns the path to the unittest directory.
     
     '''
     
     unittest_path = os.path.join(utility.get_MPCPy_path(), 'unittests');
     
     return unittest_path;
예제 #8
0
 def get_ref_path(self):
     '''Returns the path to the test data reference file.
     
     '''
     
     ref_path = os.path.join(utility.get_MPCPy_path(), 'unittests', 'references', self.__module__.split('.')[-1], self.__class__.__name__);
     
     return ref_path;
예제 #9
0
 def setUp(self):
     self.csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                      'weather', 'BerkeleyCSV.csv')
     self.geography = [37.8716, -122.2727]
     self.variable_map = {'TemperatureF' : ('weaTDryBul', units.degF), \
                          'Dew PointF' : ('weaTDewPoi', units.degF), \
                          'Humidity' : ('weaRelHum', units.percent), \
                          'Sea Level PressureIn' : ('weaPAtm', units.inHg), \
                          'WindDirDegrees' : ('weaWinDir', units.deg)}
예제 #10
0
 def setUp(self):
     csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                 'weather', 'Tamb.csv')
     variable_map = {
         'T': ('Tamb', units.degC)
     }
     # Instantiate other input object
     self.otherinput = exodata.OtherInputFromCSV(csv_filepath, \
                                                 variable_map)
예제 #11
0
 def setUp(self):
     csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                 'building', 'ControlCSV_0.csv')
     variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \
                     'conHeat_hal' : ('conHeat_hal', units.unit1), \
                     'conHeat_eas' : ('conHeat_eas', units.unit1)}
     # Instantiate control object
     self.control = exodata.ControlFromCSV(csv_filepath, \
                                           variable_map)
예제 #12
0
파일: test_models.py 프로젝트: rchml/MPCPy
 def setUp(self):
     self.start_time = '1/1/2017'
     self.final_time = '1/2/2017'
     self.MPCPyPath = utility.get_MPCPy_path()
     # Set measurements
     self.measurements = {}
     self.measurements['T_db'] = {
         'Sample': variables.Static('T_db_sample', 1800, units.s)
     }
예제 #13
0
 def setUp(self):
     csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                 'optimization', 'PriceCSV.csv')
     variable_map = {
         'pi_e': ('pi_e', units.unit1)
     }
     # Instantiate weather object
     self.prices = exodata.PriceFromCSV(csv_filepath, \
                                        variable_map)
예제 #14
0
 def setUp(self):
     self.MPCPyPath = utility.get_MPCPy_path();
     ## Setup building fmu emulation
     self.building_source_file_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'building' + os.sep + 'LBNL71T_Emulation_JModelica_v2.fmu';
     self.zone_names = ['wes', 'hal', 'eas'];
     self.weather_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'weather' + os.sep + 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw';
     self.internal_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'internal' + os.sep + 'sampleCSV.csv';
     self.internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \
                                   'intCon_wes' : ('wes', 'intCon', units.W_m2), \
                                   'intLat_wes' : ('wes', 'intLat', units.W_m2), \
                                   'intRad_hal' : ('hal', 'intRad', units.W_m2), \
                                   'intCon_hal' : ('hal', 'intCon', units.W_m2), \
                                   'intLat_hal' : ('hal', 'intLat', units.W_m2), \
                                   'intRad_eas' : ('eas', 'intRad', units.W_m2), \
                                   'intCon_eas' : ('eas', 'intCon', units.W_m2), \
                                   'intLat_eas' : ('eas', 'intLat', units.W_m2)};        
     self.control_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'building' + os.sep + 'ControlCSV_0.csv';
     self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \
                                  'conHeat_hal' : ('conHeat_hal', units.unit1), \
                                  'conHeat_eas' : ('conHeat_eas', units.unit1)};        
     # Measurements
     self.measurements = {};
     self.measurements['wesTdb'] = {'Sample' : variables.Static('wesTdb_sample', 1800, units.s)};
     self.measurements['halTdb'] = {'Sample' : variables.Static('halTdb_sample', 1800, units.s)};
     self.measurements['easTdb'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)};
     self.measurements['wesPhvac'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)};
     self.measurements['halPhvac'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)};     
     self.measurements['easPhvac'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)};
     self.measurements['Ptot'] = {'Sample' : variables.Static('easTdb_sample', 1800, units.s)};
     ## Setup model
     self.mopath = self.MPCPyPath + os.sep + 'resources' + os.sep + 'model' + os.sep + 'LBNL71T_MPC.mo';
     self.modelpath = 'LBNL71T_MPC.MPC';
     self.libraries = os.environ.get('MODELICAPATH');
     self.estimate_method = models.JModelica; 
     self.validation_method = models.RMSE;
     # Instantiate exo data sources
     self.weather = exodata.WeatherFromEPW(self.weather_path);
     self.internal = exodata.InternalFromCSV(self.internal_path, self.internal_variable_map, tz_name = self.weather.tz_name);
     self.control = exodata.ControlFromCSV(self.control_path, self.control_variable_map, tz_name = self.weather.tz_name);   
     # Parameters        
     self.parameters = exodata.ParameterFromCSV(self.MPCPyPath + os.sep + 'resources' + os.sep + 'model' + os.sep + 'LBNL71T_Parameters.csv');
     self.parameters.collect_data();
     self.parameters.data['lat'] = {};
     self.parameters.data['lat']['Value'] = self.weather.lat;    
     # Instantiate building
     building_parameters_data = {};
     building_parameters_data['lat'] = {};
     building_parameters_data['lat']['Value'] = self.weather.lat;  
     self.building = systems.EmulationFromFMU(self.measurements, \
                                              fmupath = self.building_source_file_path, \
                                              zone_names = self.zone_names, \
                                              parameter_data = building_parameters_data);
예제 #15
0
    def test_set_problem_type(self):
        '''Test the dynamic setting of a problem type.

        '''

        modelpath = 'Simple.RC'
        # Instantiate model
        parameter_data = {}
        parameter_data['heatCapacitor.C'] = {}
        parameter_data['heatCapacitor.C']['Free'] = variables.Static(
            'C_free', False, units.boolean)
        parameter_data['heatCapacitor.C']['Value'] = variables.Static(
            'C_value', 3e6, units.boolean)
        model = models.Modelica(models.JModelica, \
                                models.RMSE, \
                                self.measurements, \
                                moinfo = (self.mopath, modelpath, {}), \
                                control_data = self.controls.data, \
                                parameter_data = parameter_data)
        # Instantiate optimization problem
        opt_problem = optimization.Optimization(model, \
                                                optimization.EnergyMin, \
                                                optimization.JModelica, \
                                                'q_flow', \
                                                constraint_data = self.constraints.data)
        # Solve optimization problem
        opt_problem.optimize(self.start_time, self.final_time)
        # Update model
        model = opt_problem.Model
        # Check references
        df_test = model.display_measurements('Simulated')
        self.check_df_timeseries(df_test, 'optimize_energy.csv')
        # Set new problem type
        opt_problem.set_problem_type(optimization.EnergyCostMin)
        # Gather prices
        price_csv_filepath = os.path.join(utility.get_MPCPy_path(),
                                          'resources', 'optimization',
                                          'SimpleRC_Prices.csv')
        price_variable_map = {
            'energy': ('pi_e', units.unit1)
        }
        price = exodata.PriceFromCSV(price_csv_filepath, price_variable_map)
        price.collect_data(self.start_time, self.final_time)
        opt_problem.optimize(self.start_time,
                             self.final_time,
                             price_data=price.data)
        # Update model
        model = opt_problem.Model
        # Check references
        df_test = model.display_measurements('Simulated')
        self.check_df_timeseries(df_test, 'optimize_energycost.csv')
예제 #16
0
 def setUp(self):
     # Set path variable(s)
     MPCPyPath = utility.get_MPCPy_path();
     # Setup building measurement collection from csv
     self.csv_filepath = os.path.join(MPCPyPath, 'resources', 'building', 'OccData.csv');
     # Measurements
     self.measurements = {};
     self.measurements['occupancy'] = {'Sample' : variables.Static('occupancy_sample', 300, units.s)};
     self.measurement_variable_map = {'Total People Count for the whole building (+)' : ('occupancy', units.unit1)};                        
     # Instantiate building measurement source
     self.building = systems.RealFromCSV(self.csv_filepath, \
                                         self.measurements, 
                                         self.measurement_variable_map,
                                         time_header = 'Date');
예제 #17
0
 def setUp(self):
     self.csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                      'internal', 'sampleCSV.csv')
     self.variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \
                          'intCon_wes' : ('wes', 'intCon', units.W_m2), \
                          'intLat_wes' : ('wes', 'intLat', units.W_m2), \
                          'intRad_hal' : ('hal', 'intRad', units.W_m2), \
                          'intCon_hal' : ('hal', 'intCon', units.W_m2), \
                          'intLat_hal' : ('hal', 'intLat', units.W_m2), \
                          'intRad_eas' : ('eas', 'intRad', units.W_m2), \
                          'intCon_eas' : ('eas', 'intCon', units.W_m2), \
                          'intLat_eas' : ('eas', 'intLat', units.W_m2)}
     # Instantiate internal object
     self.internal = exodata.InternalFromCSV(self.csv_filepath, \
                                             self.variable_map)
예제 #18
0
 def setUp(self):
     csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                 'optimization',
                                 'sampleConstraintCSV_Setback.csv')
     variable_map = {'wesTdb_min' : ('wesTdb', 'GTE', units.degC), \
                          'wesTdb_max' : ('wesTdb', 'LTE', units.degC), \
                          'easTdb_min' : ('easTdb', 'GTE', units.degC), \
                          'easTdb_max' : ('easTdb', 'LTE', units.degC), \
                          'halTdb_min' : ('halTdb', 'GTE', units.degC), \
                          'halTdb_max' : ('halTdb', 'LTE', units.degC), \
                          'conHeat_wes_min' : ('conHeat_wes', 'GTE', units.unit1), \
                          'conHeat_wes_max' : ('conHeat_wes', 'LTE', units.unit1), \
                          'conHeat_hal_min' : ('conHeat_hal', 'GTE', units.unit1), \
                          'conHeat_hal_max' : ('conHeat_hal', 'LTE', units.unit1), \
                          'conHeat_eas_min' : ('conHeat_eas', 'GTE', units.unit1), \
                          'conHeat_eas_max' : ('conHeat_eas', 'LTE', units.unit1)}
     # Instantiate weather object
     self.constraints = exodata.ConstraintFromCSV(csv_filepath, \
                                                  variable_map)
예제 #19
0
 def setUp(self):
     self.start_time = '1/1/2017';
     self.final_time = '1/2/2017';
     MPCPyPath = utility.get_MPCPy_path();
     # Set model paths
     mopath = os.path.join(MPCPyPath, 'resources', 'model', 'Simple.mo');
     modelpath = 'Simple.RC';
     # Gather control inputs
     control_csv_filepath = os.path.join(MPCPyPath, 'resources', 'model', 'SimpleRC_Input.csv');
     variable_map = {'q_flow_csv' : ('q_flow', units.W)};
     controls = exodata.ControlFromCSV(control_csv_filepath, variable_map);
     controls.collect_data(self.start_time, self.final_time);
     # Set measurements
     measurements = {};
     measurements['T_db'] = {'Sample' : variables.Static('T_db_sample', 1800, units.s)};
     # Instantiate model
     self.model = models.Modelica(models.JModelica, \
                                  models.RMSE, \
                                  measurements, \
                                  moinfo = (mopath, modelpath, {}), \
                                  control_data = controls.data);
예제 #20
0
 def setUp(self):
     # Set path variable(s)
     MPCPyPath = utility.get_MPCPy_path();
     # Setup building
     self.building_source_file_path = os.path.join(MPCPyPath, 'resources', 'building', \
                                                   'LBNL71T_Emulation_JModelica_v2.fmu');   
     self.zone_names = ['wes', 'hal', 'eas'];
     weather_path = os.path.join(MPCPyPath, 'resources', 'weather', \
                                 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw');
     internal_path = os.path.join(MPCPyPath, 'resources', 'internal', 'sampleCSV.csv');
     internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \
                              'intCon_wes' : ('wes', 'intCon', units.W_m2), \
                              'intLat_wes' : ('wes', 'intLat', units.W_m2), \
                              'intRad_hal' : ('hal', 'intRad', units.W_m2), \
                              'intCon_hal' : ('hal', 'intCon', units.W_m2), \
                              'intLat_hal' : ('hal', 'intLat', units.W_m2), \
                              'intRad_eas' : ('eas', 'intRad', units.W_m2), \
                              'intCon_eas' : ('eas', 'intCon', units.W_m2), \
                              'intLat_eas' : ('eas', 'intLat', units.W_m2)};        
     control_path = os.path.join(MPCPyPath, 'resources', 'building', 'ControlCSV_0.csv');
     control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \
                                  'conHeat_hal' : ('conHeat_hal', units.unit1), \
                                  'conHeat_eas' : ('conHeat_eas', units.unit1)};        
     # Measurements
     self.measurements = {};
     self.measurements['wesTdb'] = {'Sample' : variables.Static('wesTdb_sample', 600, units.s)};
     self.measurements['halTdb'] = {'Sample' : variables.Static('halTdb_sample', 1200, units.s)};
     self.measurements['easTdb'] = {'Sample' : variables.Static('easTdb_sample', 1200, units.s)};           
     # Exodata
     self.weather = exodata.WeatherFromEPW(weather_path);
     self.internal = exodata.InternalFromCSV(internal_path, internal_variable_map, tz_name = self.weather.tz_name);
     self.control = exodata.ControlFromCSV(control_path, control_variable_map, tz_name = self.weather.tz_name);
     # Parameters
     self.parameter_data = {};
     self.parameter_data['lat'] = {};
     self.parameter_data['lat']['Value'] = self.weather.lat;
예제 #21
0
    def setUp(self):
        self.MPCPyPath = utility.get_MPCPy_path()
        ## Setup model
        self.mopath = self.MPCPyPath + os.sep + 'resources' + os.sep + 'model' + os.sep + 'LBNL71T_MPC.mo'
        self.modelpath = 'LBNL71T_MPC.MPC'
        self.libraries = os.environ.get('MODELICAPATH')
        self.estimate_method = models.JModelica
        self.validation_method = models.RMSE
        self.zone_names = ['wes', 'hal', 'eas']
        # Measurements
        self.measurements = {}
        self.measurements['wesTdb'] = {
            'Sample': variables.Static('wesTdb_sample', 1800, units.s)
        }
        self.measurements['halTdb'] = {
            'Sample': variables.Static('halTdb_sample', 1800, units.s)
        }
        self.measurements['easTdb'] = {
            'Sample': variables.Static('easTdb_sample', 1800, units.s)
        }
        self.measurements['wesPhvac'] = {
            'Sample': variables.Static('easTdb_sample', 1800, units.s)
        }
        self.measurements['halPhvac'] = {
            'Sample': variables.Static('easTdb_sample', 1800, units.s)
        }
        self.measurements['easPhvac'] = {
            'Sample': variables.Static('easTdb_sample', 1800, units.s)
        }
        self.measurements['Ptot'] = {
            'Sample': variables.Static('easTdb_sample', 1800, units.s)
        }

        ## Exodata
        # Exogenous collection time
        self.start_time_exodata = '1/1/2015'
        self.final_time_exodata = '1/30/2015'
        # Optimization time
        self.start_time_optimization = '1/2/2015'
        self.final_time_optimization = '1/3/2015'
        # Weather
        self.weather_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'weather' + os.sep + 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'
        self.weather = exodata.WeatherFromEPW(self.weather_path)
        self.weather.collect_data(self.start_time_exodata,
                                  self.final_time_exodata)
        # Internal
        self.internal_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'internal' + os.sep + 'sampleCSV.csv'
        self.internal_variable_map = {'intRad_wes' : ('wes', 'intRad', units.W_m2), \
                                      'intCon_wes' : ('wes', 'intCon', units.W_m2), \
                                      'intLat_wes' : ('wes', 'intLat', units.W_m2), \
                                      'intRad_hal' : ('hal', 'intRad', units.W_m2), \
                                      'intCon_hal' : ('hal', 'intCon', units.W_m2), \
                                      'intLat_hal' : ('hal', 'intLat', units.W_m2), \
                                      'intRad_eas' : ('eas', 'intRad', units.W_m2), \
                                      'intCon_eas' : ('eas', 'intCon', units.W_m2), \
                                      'intLat_eas' : ('eas', 'intLat', units.W_m2)}
        self.internal = exodata.InternalFromCSV(self.internal_path,
                                                self.internal_variable_map,
                                                tz_name=self.weather.tz_name)
        self.internal.collect_data(self.start_time_exodata,
                                   self.final_time_exodata)
        # Control (as initialization)
        self.control_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'ControlCSV.csv'
        self.control_variable_map = {'conHeat_wes' : ('conHeat_wes', units.unit1), \
                                     'conHeat_hal' : ('conHeat_hal', units.unit1), \
                                     'conHeat_eas' : ('conHeat_eas', units.unit1)}
        self.control = exodata.ControlFromCSV(self.control_path,
                                              self.control_variable_map,
                                              tz_name=self.weather.tz_name)
        self.control.collect_data(self.start_time_exodata,
                                  self.final_time_exodata)
        # Parameters
        self.parameters_path = self.MPCPyPath + os.sep + 'unittests' + os.sep + 'resources' + os.sep + 'model_parameters.txt'
        self.parameters = exodata.ParameterFromCSV(self.parameters_path)
        self.parameters.collect_data()
        # Constraints
        self.constraints_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'sampleConstraintCSV_Constant.csv'
        self.constraints_variable_map = {'wesTdb_min' : ('wesTdb', 'GTE', units.degC), \
                                         'wesTdb_max' : ('wesTdb', 'LTE', units.degC), \
                                         'easTdb_min' : ('easTdb', 'GTE', units.degC), \
                                         'easTdb_max' : ('easTdb', 'LTE', units.degC), \
                                         'halTdb_min' : ('halTdb', 'GTE', units.degC), \
                                         'halTdb_max' : ('halTdb', 'LTE', units.degC), \
                                         'der_wesTdb_min' : ('wesTdb', 'dGTE', units.K), \
                                         'der_wesTdb_max' : ('wesTdb', 'dLTE', units.K), \
                                         'der_easTdb_min' : ('easTdb', 'dGTE', units.K), \
                                         'der_easTdb_max' : ('easTdb', 'dLTE', units.K), \
                                         'der_halTdb_min' : ('halTdb', 'dGTE', units.K), \
                                         'der_halTdb_max' : ('halTdb', 'dLTE', units.K), \
                                         'conHeat_wes_min' : ('conHeat_wes', 'GTE', units.unit1), \
                                         'conHeat_wes_max' : ('conHeat_wes', 'LTE', units.unit1), \
                                         'conHeat_hal_min' : ('conHeat_hal', 'GTE', units.unit1), \
                                         'conHeat_hal_max' : ('conHeat_hal', 'LTE', units.unit1), \
                                         'conHeat_eas_min' : ('conHeat_eas', 'GTE', units.unit1), \
                                         'conHeat_eas_max' : ('conHeat_eas', 'LTE', units.unit1)}
        self.constraints = exodata.ConstraintFromCSV(
            self.constraints_path,
            self.constraints_variable_map,
            tz_name=self.weather.tz_name)
        self.constraints.collect_data(self.start_time_exodata,
                                      self.final_time_exodata)
        self.constraints.data['wesTdb']['Cyclic'] = variables.Static(
            'wesTdb_cyclic', 1, units.boolean_integer)
        self.constraints.data['easTdb']['Cyclic'] = variables.Static(
            'easTdb_cyclic', 1, units.boolean_integer)
        self.constraints.data['halTdb']['Cyclic'] = variables.Static(
            'halTdb_cyclic', 1, units.boolean_integer)
        # Prices
        self.prices_path = self.MPCPyPath + os.sep + 'resources' + os.sep + 'optimization' + os.sep + 'PriceCSV.csv'
        self.price_variable_map = {
            'pi_e': ('pi_e', units.unit1)
        }
        self.prices = exodata.PriceFromCSV(self.prices_path,
                                           self.price_variable_map,
                                           tz_name=self.weather.tz_name)
        self.prices.collect_data(self.start_time_exodata,
                                 self.final_time_exodata)

        ## Parameters
        self.parameters.data['lat'] = {}
        self.parameters.data['lat']['Value'] = self.weather.lat
        ## Instantiate model
        self.model = models.Modelica(self.estimate_method, \
                                     self.validation_method, \
                                     self.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)
예제 #22
0
        print(name + ' tests not run.')

    return None


# Main program
# ============

# Setup
# -----
# Change working directory to temporary
cwd = os.getcwd()
tempdir = tempfile.mkdtemp()
os.chdir(tempdir)
# Configure the log
logpath = os.path.join(utility.get_MPCPy_path(), 'unittests', 'outputs',
                       'unittests.log')
# Configure the argument parser
parser = argparse.ArgumentParser(description='Run the unit tests for mpcpy.')
unit_test_group = parser.add_argument_group("arguments to run unit tests")
unit_test_group.add_argument('-s', '--specify_test', \
                             metavar='module.class', \
                             help='test only the module and class specified')
args = parser.parse_args()
# Define test modules and classes, if any
modules = []
classes = []
if args.specify_test:
    modules.append(args.specify_test.split('.')[0])
    try:
        classes.append(args.specify_test.split('.')[1])
예제 #23
0
 def setUp(self):
     self.epw_filepath = os.path.join(utility.get_MPCPy_path(), 'resources', 'weather', \
                                      'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw')
     self.weather = exodata.WeatherFromEPW(self.epw_filepath)
예제 #24
0
 def setUp(self):
     self.mopath = utility.get_MPCPy_path(
     ) + os.sep + 'resources' + os.sep + 'model' + os.sep + 'Simple.mo'
     self.modelpath = 'Simple.RC'
예제 #25
0
 def setUp(self):
     csv_filepath = os.path.join(utility.get_MPCPy_path(), 'resources',
                                 'model', 'LBNL71T_Parameters.csv')
     # Instantiate weather object
     self.parameters = exodata.ParameterFromCSV(csv_filepath)
예제 #26
0
 def setUp(self):
     self.epw_filepath = utility.get_MPCPy_path(
     ) + os.sep + 'resources' + os.sep + 'weather' + os.sep + 'USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.epw'
     self.weather = exodata.WeatherFromEPW(self.epw_filepath)