def f3_economy(*args) -> float: pid = str(os.getpid()) ep_tbl_path = os.path.join(os.path.abspath("temp"), pid, EP_TBL) print("running f3 ... in {}".format(os.getpid())) wall_id = interval_to_list_idx(args[0]) roof_id = interval_to_list_idx(args[1]) win_id = interval_to_list_idx(args[2]) window_area: float = 0 with open(ep_tbl_path, "r") as f: data = f.readlines() for i, _ in enumerate(data): if "Window-Wall Ratio" in data[i]: for line in data[i:]: if "Window Opening Area [m2]" in line: s = line.split(",") window_area = float(s[2]) C_i_wall = wall_and_roof_specs[wall_id][0] C_i_roof = wall_and_roof_specs[roof_id][0] C_i_win = window_specs[win_id] delta_wall = wall_and_roof_specs[wall_id][1] delta_roof = wall_and_roof_specs[roof_id][1] divident = (C_i_wall * delta_wall + C_e_wall) * wall_area + \ (C_i_win + C_e_win) * window_area + \ (C_i_roof * delta_roof + C_e_roof) * roof_area price = divident / total_AC_area return price
def f1_energy_consumption(*args) -> float: # Energy consumption. pid = str(os.getpid()) ep_tbl_path = os.path.join(os.path.abspath("temp"), pid, EP_TBL) print("running f1 ... in {}".format(os.getpid())) cop = (lambda l: lambda x: l[x])([2.0, 2.5, 3.0, 3.5])( interval_to_list_idx(int(args[9]))) building_area: float = 0 energy_consumption: float = 0 summer_consumption: float = 0 winter_consumption: float = 0 with open(ep_tbl_path, "rb") as f: data = [d.decode('utf-8') for d in f.readlines()] break_word = False building_area_found = False for i, _ in enumerate(data): if break_word: break if re.match(r"^Building Area", data[i]) and not building_area_found: building_area_found = True for line in data[i:]: if re.match(r",Net Conditioned Building Area", line): s = line.split(",") building_area = float(s[2]) if re.match(r"^End Uses", data[i]): print("2 End Uses found: ", data[i]) for line in data[i:i + 5]: print("Under", line) if re.match(r",Heating,\d+.*", line): s = line.split(",") winter_consumption = float(s[2]) for line in data[i:i + 5]: if re.match(r",Cooling,\d+.*", line): s = line.split(",") summer_consumption = float(s[2]) break_word = True energy_consumption = (winter_consumption / cop + summer_consumption / cop) / building_area print("log: cop", cop) print("log: energy_consumption", energy_consumption) print("log: winter_consumption", winter_consumption, os.getpid()) print("log: summer_consumption", winter_consumption, os.getpid()) return energy_consumption
def f1_energy_consumption(*args) -> float: # Energy consumption. pid = str(os.getpid()) ep_tbl_path = os.path.join(os.path.abspath("temp"), pid, EP_TBL) print("running f1 ... in {}".format(os.getpid())) # Get the value of cop directly. # cop is handled the same way as infiltration that the input is a # discrete interval, and we map the input integer into the specific # value. # Why? because the algorithm generates random value only in a # continuous manner, # and we cannot just specify a set of random values it generated for # just one parameter # without making algorithm lose its generiality. cop = (lambda l: lambda x: l[x])([2.0, 2.5, 3.0, 3.5])(interval_to_list_idx(int(args[9]))) energy_consumption: float = 0 summer_consumption: float = 0 winter_consumption: float = 0 with open(ep_tbl_path, "r") as f: data = f.readlines() break_word = False for i, _ in enumerate(data): if break_word: break if "Utility Use Per Conditioned Floor Area" in data[i]: for line in data[i:]: if "HVAC" in line: s = line.split(",") winter_consumption = float(s[5]) summer_consumption = float(s[6]) break_word = True break energy_consumption = (winter_consumption / cop + summer_consumption / cop) print("energy_consumption", energy_consumption) print("log: winter_consumption", winter_consumption, os.getpid()) print("log: summer_consumption", winter_consumption, os.getpid()) return energy_consumption
def f3_economy(*args) -> float: pid = str(os.getpid()) ep_tbl_path = os.path.join(os.path.abspath("temp"), pid, EP_TBL) print("running f3 ... in {}".format(os.getpid())) wall_id = interval_to_list_idx(args[0]) roof_id = interval_to_list_idx( args[1]) # there was a + 1 before. 2019-06-20 win_id = interval_to_list_idx(args[2]) infiltration_id = interval_to_list_idx(args[14]) cop_id = interval_to_list_idx(int(args[9])) local_electircity_fee = 0.53 window_area: float = 0 shading_win_area_with_direction: Dict = { "east_win_area": 0, "west_win_area": 0, "south_win_area": 0, "north_win_area": 0, } # grap total area of windows with shaing. with open(ep_tbl_path, "r") as f: data = f.readlines() for i, _ in enumerate(data): if "Yes" in data[i] and "EASTWINDOW" in data[i]: shading_win_area_with_direction["east_win_area"] += float( data[i].split(",")[3]) if "Yes" in data[i] and "WESTWINDOW" in data[i]: shading_win_area_with_direction["west_win_area"] += float( data[i].split(",")[3]) if "Yes" in data[i] and "SOUTHWINDOW" in data[i]: shading_win_area_with_direction["south_win_area"] += float( data[i].split(",")[3]) if "Yes" in data[i] and "NORTHWINDOW" in data[i]: shading_win_area_with_direction["north_win_area"] += float( data[i].split(",")[3]) if re.match(r"Window-Wall Ratio", data[i]): for line in data[i:i + 6]: if "Window Opening Area [m2]" in line: s = line.split(",") window_area = float(s[2]) print("log: shading win areas", shading_win_area_with_direction) print("log: totoal win area", window_area) # # Calculating the final cost. # wall_area = surface_area - window_area C_i_wall = wall_and_roof_specs[wall_id][0] C_i_roof = wall_and_roof_specs[roof_id][0] # NOTE economic C_i_win = window_specs[win_id] delta_wall = wall_and_roof_specs[wall_id][1] delta_roof = wall_and_roof_specs[roof_id][1] divident = sum([(C_i_wall * delta_wall + C_e_wall) * wall_area, (C_i_win + C_e_win) * window_area, (C_i_roof * delta_roof + C_e_roof) * roof_area, (lambda d: sum(d.values()) * C_i_shading )(shading_win_area_with_direction)]) # initial cost. C_in = divident / total_ac_area + infiltration_specs[ infiltration_id] + ac_specs[cop_id] # operation cost. C_o = f1_energy_consumption( *args) * local_electircity_fee * (1 - (1 + 0.049)**-20) / 0.049 LCC = C_in + C_o return LCC
def _operator(self, idf: IdfModel, lines: List[str], idx: int): direction = self._args[7] # map infiltration id to actual value. now id is 1 - 3. infiltration_air_change = (lambda l: lambda x: l[x])([1, 0.8, 0.5])( interval_to_list_idx(int(self._args[14]))) # change Exterior Wall wall_str = r"(.*)Exterior Wall" + str(int(self._args[0])) # re.sub roof_str = r"(.*)Exterior Roof" + str(int(self._args[1])) win_str = r"(.*)Exterior Window" + str(int(self._args[2])) coord_str = [r"[\s]+(-?(?:[\d+]|\d+\.[\de-]+))[,;].*Vertex .*"] * 3 idf.sub([wall_str], r"\1Exterior Wall", lines, idx) idf.sub([roof_str], r"\1Exterior Roof", lines, idx) idf.sub([win_str], r"\1Exterior Window", lines, idx) # grap wall coordinates idf.grap(self.east_list, [ r"[\s]+eastwall(.*\..*),", *coord_str, *coord_str, *coord_str, *coord_str ], lines, idx, grouping=(1, 3, 3, 3, 3)) idf.grap(self.west_list, [ r"[\s]+westwall(.*\..*),", *coord_str, *coord_str, *coord_str, *coord_str ], lines, idx, grouping=(1, 3, 3, 3, 3)) idf.grap(self.south_list, [ r"[\s]+southwall(.*\..*),", *coord_str, *coord_str, *coord_str, *coord_str ], lines, idx, grouping=(1, 3, 3, 3, 3)) idf.grap(self.north_list, [ r"[\s]+northwall(.*\..*),", *coord_str, *coord_str, *coord_str, *coord_str ], lines, idx, grouping=(1, 3, 3, 3, 3)) idf.sub([SubAnchor.numeric_value(r"North Axis")], r"\g<1>{}\g<2>".format(direction), lines, idx) idf.sub([ SearchAnchor.bypass_anchor(r"ZoneInfiltration:DesignFlowRate"), SubAnchor.numeric_value(r" Air Changes per Hour \{1/hr\}") ], r"\g<1>{}\g<2>".format(infiltration_air_change), lines, idx) # set the a heating setpoint. idf.sub([ SearchAnchor.bypass_anchor("Heating setpoint"), SubAnchor.numeric_value("Field 4") ], r"\g<1>{}\g<2>".format(self._constants["HEATING_SETPOINT"]), lines, idx) idf.sub([ SearchAnchor.bypass_anchor("Heating setpoint"), SubAnchor.numeric_value("Field 6") ], r"\g<1>{}\g<2>".format(self._constants["HEATING_SETPOINT"]), lines, idx) idf.sub([ SearchAnchor.bypass_anchor("Heating setpoint"), SubAnchor.numeric_value("Field 14") ], r"\g<1>{}\g<2>".format(self._constants["HEATING_SETPOINT"]), lines, idx) idf.sub([ SearchAnchor.bypass_anchor("Heating setpoint"), SubAnchor.numeric_value("Field 16") ], r"\g<1>{}\g<2>".format(self._constants["HEATING_SETPOINT"]), lines, idx) # set the cooling set point. idf.sub([ SearchAnchor.bypass_anchor("Cooling setpoint"), SubAnchor.numeric_value("Field 4") ], r"\g<1>{}\g<2>".format(self._constants["COOLING_SETPOINT"]), lines, idx) idf.sub([ SearchAnchor.bypass_anchor("Cooling setpoint"), SubAnchor.numeric_value("Field 8") ], r"\g<1>{}\g<2>".format(self._constants["COOLING_SETPOINT"]), lines, idx) idf.sub([ SearchAnchor.bypass_anchor("Cooling setpoint"), SubAnchor.numeric_value("Field 12") ], r"\g<1>{}\g<2>".format(self._constants["COOLING_SETPOINT"]), lines, idx)