示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
    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)