Esempio n. 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)
 def get_constraints(self,start,end, **kwargs):  
     self.constraints = exodata.ConstraintFromCSV(self.constraint_csv, self.optcon_varmap)
     index = pd.date_range(start, end, freq = str(self.meas_sampl) +'S')
     # Set points based on UCL paper on set points!!! High variability? Commercial?
     mor_start = np.random.randint(7,8)
     mor_end = np.random.randint(7,8)
     eve_start =  np.random.randint(17,18)
     eve_end = np.random.randint(19,23)
     dem_temp = np.random.randint(19,21)
     t_min = pd.Series(16+273.15,index=index) # Contracted?
     t_max = pd.Series(24+273.15,index=index) # Contracted?
     
     ppl_nr = np.random.randint(1,5)
     radgain = pd.Series(np.random.rand(len(index))*100,index=index)
     zero_signal = pd.Series(np.zeros(len(index)),index=index)
     control_signal1 = pd.Series(np.random.rand(len(index))*0,index=index)
     
     for i in index:
         if i.hour >= mor_start and i.hour <= mor_end:
             t_min[i] = dem_temp-1+273.15
             t_max[i] = dem_temp+1+273.15
             radgain[i] = np.random.uniform(0,1)*50*np.random.randint(0,ppl_nr)
             control_signal1[i] = np.random.uniform(0.2,0.6)
         if i.hour >= eve_start and i.hour <= eve_end:
             t_min[i] = dem_temp-1+273.15
             t_max[i] = dem_temp+1+273.15
             radgain[i] = np.random.uniform(0,1)*50*np.random.randint(0,ppl_nr)
             control_signal1[i] = np.random.uniform(0.2,0.6)
     pheat_min = pd.Series(0,index=index)
     pheat_max = pd.Series(1,index=index)
     
     if 'set_change' in kwargs.keys():
         set_change = kwargs['set_change']
     else:
         set_change = 1
     #print(t_min)
     
     
     self.constraints.data = {
             'HPPower': 
             {'GTE': variables.Timeseries('HPPower_GTE', pheat_min, units.W, tz_name=self.weather.tz_name), 
             'LTE': variables.Timeseries('HPPower_LTE', pheat_max, units.W,tz_name=self.weather.tz_name)},
             'TAir': 
             {'Slack_GTE': variables.Timeseries('TAir_Slack_GTE', t_min, units.K, tz_name=self.weather.tz_name),
             'Slack_LTE': variables.Timeseries('TAir_Slack_LTE', t_max, units.K, tz_name=self.weather.tz_name)}
             }
     
     self.constraints_reg = self.constraints # Regular constraints
    
     self.other_input.data = {"ConvGain1": variables.Timeseries('ConvGain1', zero_signal,units.W,tz_name=self.weather.tz_name),
         "RadGain": variables.Timeseries('RadGain', radgain,units.W,tz_name=self.weather.tz_name)
         }
     
     if "upd_control" in kwargs.keys():
         self.control.data = {"HPPower": variables.Timeseries('HPPower', control_signal1,units.W,tz_name=self.weather.tz_name)}
         store_namespace('control_'+self.building,self.control)
     
     store_namespace('constraints_'+self.building,self.constraints)
     store_namespace('other_input_'+self.building,self.other_input)
Esempio n. 3
0
 def get_constraints(self, start, end):
     self.constraints = exodata.ConstraintFromCSV(self.constraint_csv,
                                                  self.optcon_varmap)
     #print("%%%% constraint data %%%%")
     #print(self.constraints)
     #print(self.constraints.data)
     index = pd.date_range(start, end, freq=str(self.meas_sampl) + 'S')
     # Set points based on UCL paper on set points!!! High variability? Commercial?
     mor_start = np.random.randint(5, 9)
     mor_end = np.random.randint(9, 12)
     eve_start = np.random.randint(15, 19)
     eve_end = np.random.randint(19, 23)
     dem_temp = np.random.randint(18, 23)
     t_min = pd.Series(14 + 273.15, index=index)  # Contracted?
     t_max = pd.Series(28 + 273.15, index=index)  # Contracted?
     for i in index:
         if i.hour >= mor_start and i.hour <= mor_end:
             t_min[i] = dem_temp - 1 + 273.15
             t_max[i] = dem_temp + 1 + 273.15
         if i.hour >= eve_start and i.hour <= eve_end:
             t_min[i] = dem_temp - 1 + 273.15
             t_max[i] = dem_temp + 1 + 273.15
     pheat_min = pd.Series(0, index=index)
     pheat_max = pd.Series(10000, index=index)
     #print(t_min)
     self.constraints.data = {
         'TAir': {
             'GTE':
             variables.Timeseries('TAir_GTE',
                                  t_min,
                                  units.K,
                                  tz_name=self.weather.tz_name),
             'LTE':
             variables.Timeseries('TAir_LTE',
                                  t_max,
                                  units.K,
                                  tz_name=self.weather.tz_name)
         },
         'ConvGain2': {
             'GTE':
             variables.Timeseries('ConvGain2_GTE',
                                  pheat_min,
                                  units.W,
                                  tz_name=self.weather.tz_name),
             'LTE':
             variables.Timeseries('ConvGain2_LTE',
                                  pheat_max,
                                  units.W,
                                  tz_name=self.weather.tz_name)
         }
     }
     store_namespace('constraints_' + self.building, self.constraints)
Esempio n. 4
0
 def setUp(self):
     csv_filepath = os.path.join(self.get_unittest_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', 'sGTE', units.unit1, 100), \
                     'conHeat_eas_max' : ('conHeat_eas', 'sLTE', units.unit1, 200)};
     # Instantiate weather object
     self.constraints = exodata.ConstraintFromCSV(csv_filepath, \
                                                  variable_map);
Esempio n. 5
0
 def setUp(self):
     self.start_time = '1/1/2017';
     self.final_time = '1/2/2017';
     # Set .mo path
     self.mopath = os.path.join(self.get_unittest_path(), 'resources', 'model', 'Simple.mo');
     # Gather inputs
     start_time_exo = '1/1/2017';
     final_time_exo = '1/10/2017';
     control_csv_filepath = os.path.join(self.get_unittest_path(), 'resources', 'model', '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(start_time_exo, final_time_exo);
     # 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 = os.path.join(self.get_unittest_path(), 'resources', 'optimization', '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(start_time_exo, final_time_exo);
Esempio n. 6
0
    def setUp(self):
        ## Setup model
        self.mopath = os.path.join(self.get_unittest_path(), 'resources',
                                   'model', '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 = os.path.join(
            self.get_unittest_path(), 'resources', 'weather',
            '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 = os.path.join(self.get_unittest_path(),
                                          'resources', 'internal',
                                          '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 = os.path.join(self.get_unittest_path(), 'resources',
                                         'optimization', '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 = os.path.join(self.get_unittest_path(),
                                            'outputs', 'model_parameters.txt')
        self.parameters = exodata.ParameterFromCSV(self.parameters_path)
        self.parameters.collect_data()
        # Constraints
        self.constraints_path = os.path.join(
            self.get_unittest_path(), 'resources', 'optimization',
            '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 = os.path.join(self.get_unittest_path(), 'resources',
                                        'optimization', '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)