Exemplo n.º 1
0
def csv_fat_cross_time(arrival_enum: ArrivalEnum,
                       list_number_servers: List[int],
                       perform_param: PerformParameter, opt_method: OptMethod,
                       mc_dist: MonteCarloDist, target_util: float) -> dict:
    """Chooses parameters by Monte Carlo type random choice."""
    total_iterations = 10**5

    time_ratio = {"Number_of_servers": "Ratio"}

    for number_servers in list_number_servers:
        print(f"number of servers = {number_servers}")
        # 1 Parameter for service

        param_array = mc_enum_to_dist(arrival_enum=arrival_enum,
                                      mc_dist=mc_dist,
                                      number_flows=number_servers,
                                      number_servers=number_servers,
                                      total_iterations=total_iterations)

        time_array = np.empty([total_iterations, 2])

        for i in tqdm(range(total_iterations)):
            if arrival_enum == ArrivalEnum.DM1:
                arrive_list = [
                    DM1(lamb=param_array[i, j]) for j in range(number_servers)
                ]
            elif arrival_enum == ArrivalEnum.MMOOFluid:
                arrive_list = [
                    MMOOCont(mu=param_array[i, j],
                             lamb=param_array[i, number_servers + j],
                             peak_rate=param_array[i, 2 * number_servers + j])
                    for j in range(number_servers)
                ]

            else:
                raise NotImplementedError(f"Arrival parameter "
                                          f"{arrival_enum.name} is infeasible")

            service_list = [
                ConstantRateServer(
                    rate=param_array[i,
                                     arrival_enum.number_parameters() *
                                     number_servers + j])
                for j in range(number_servers)
            ]

            fat_cross_setting = FatCrossPerform(arr_list=arrive_list,
                                                ser_list=service_list,
                                                perform_param=perform_param)

            computation_necessary = True

            # print(res_array[i, ])
            if target_util > 0.0:
                util = fat_cross_setting.approximate_utilization()
                if util < target_util or util > 1:
                    time_array[i, ] = np.nan
                    computation_necessary = False

            if computation_necessary:
                # time_standard, time_lyapunov = compare_time()
                time_array[i, 0], time_array[i, 1] = compare_time(
                    setting=fat_cross_setting,
                    opt_method=opt_method,
                    number_l=number_servers - 1)

        print(
            time_array_to_results(arrival_enum=arrival_enum,
                                  time_array=time_array,
                                  number_servers=number_servers,
                                  time_ratio=time_ratio))

    filename = (f"time_{perform_param.to_name()}_{arrival_enum.name}"
                f"_{opt_method.name}.csv")

    with open(filename, 'w') as csv_file:
        writer = csv.writer(csv_file)
        for key, value in time_ratio.items():
            writer.writerow([key, value])

    return time_ratio
def csv_msob_fp_time(name: str, number_flows: int, number_servers: int,
                     arrival_enum: ArrivalEnum,
                     perform_param: PerformParameter, opt_method: OptMethod,
                     mc_dist: MonteCarloDist, comparator: callable,
                     total_iterations: int, target_util: float) -> dict:
    """Chooses parameters by Monte Carlo type random choice."""

    param_array = mc_enum_to_dist(arrival_enum=arrival_enum,
                                  mc_dist=mc_dist,
                                  number_flows=number_flows,
                                  number_servers=number_servers,
                                  total_iterations=total_iterations)

    time_array = np.empty([total_iterations, 3])
    # 3 approaches to compare

    for i in tqdm(range(total_iterations), total=total_iterations):
        if arrival_enum == ArrivalEnum.DM1:
            arr_list = [
                DM1(lamb=param_array[i, j]) for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MD1:
            arr_list = [
                MD1(lamb=param_array[i, j], mu=1.0)
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MMOODisc:
            arr_list = [
                MMOODisc(stay_on=param_array[i, j],
                         stay_off=param_array[i, number_flows + j],
                         peak_rate=param_array[i, 2 * number_flows + j])
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MMOOFluid:
            arr_list = [
                MMOOCont(mu=param_array[i, j],
                         lamb=param_array[i, number_flows + j],
                         peak_rate=param_array[i, 2 * number_flows + j])
                for j in range(number_flows)
            ]

        else:
            raise NotImplementedError(f"Arrival parameter {arrival_enum.name} "
                                      f"is infeasible")

        ser_list = [
            ConstantRateServer(
                rate=param_array[i,
                                 arrival_enum.number_parameters() *
                                 number_flows + j])
            for j in range(number_servers)
        ]

        if name == "overlapping_tandem":
            setting = OverlappingTandemPerform(arr_list=arr_list,
                                               ser_list=ser_list,
                                               perform_param=perform_param)
        elif name == "square":
            setting = SquarePerform(arr_list=arr_list,
                                    ser_list=ser_list,
                                    perform_param=perform_param)
        else:
            raise NotImplementedError("this topology is not implemented")

        computation_necessary = True

        if target_util > 0.0:
            util = setting.approximate_utilization()
            if util < target_util or util > 1:
                time_array[i, ] = np.nan
                computation_necessary = False

        if computation_necessary:
            # standard_bound, server_bound, fp_bound = compare_avoid_dep()
            time_array[i, 0], time_array[i, 1], time_array[i, 2] = comparator(
                setting=setting)

            if (perform_param.perform_metric == PerformEnum.DELAY_PROB
                    and np.nanmin(time_array[i, ]) > 1.0):
                # np.nanmin(time_array[i, ]) is the smallest value
                time_array[i, ] = np.nan

    time_dict = time_array_to_results(title=name, time_array=time_array)

    time_dict.update({
        "iterations": total_iterations,
        "T": perform_param.value,
        "optimization": opt_method.name,
        "MCDistribution": mc_dist.to_name(),
        "MCParam": mc_dist.param_to_string()
    })

    filename = name
    filename += f"_time_{perform_param.to_name()}_{arrival_enum.name}" \
        f"_MC{mc_dist.to_name()}_{opt_method.name}_util_{target_util}"

    with open(filename + ".csv", 'w') as csv_file:
        writer = csv.writer(csv_file)
        for key, value in time_dict.items():
            writer.writerow([key, value])

    return time_dict
    #                         DM1(lamb=4.5),
    #                         DM1(lamb=0.28)]],
    #         ser_list=[
    #             ConstantRateServer(rate=1.2),
    #             ConstantRateServer(rate=6.2),
    #             ConstantRateServer(rate=7.3)
    #         ],
    #         server_index=1,
    #         perform_param=DELAY3))

    print(
        arrival_list_to_csv(
            prefix="overlapping_tandem_",
            data_frame_creator=overlapping_tandem_adjust_arr_df,
            list_arr_list=[[
                MMOOCont(mu=0.8, lamb=7.0, peak_rate=2.0),
                MMOOCont(mu=4.0, lamb=8.5, peak_rate=5.3),
                MMOOCont(mu=0.5, lamb=6.0, peak_rate=9.0)
            ],
                           [
                               MMOOCont(mu=0.8, lamb=7.0, peak_rate=2.0),
                               MMOOCont(mu=4.0, lamb=8.5, peak_rate=5.3),
                               MMOOCont(mu=0.5, lamb=5.0, peak_rate=9.0)
                           ],
                           [
                               MMOOCont(mu=0.8, lamb=7.0, peak_rate=2.0),
                               MMOOCont(mu=4.0, lamb=8.5, peak_rate=5.3),
                               MMOOCont(mu=0.5, lamb=4.0, peak_rate=9.0)
                           ],
                           [
                               MMOOCont(mu=0.8, lamb=7.0, peak_rate=2.0),
Exemplo n.º 4
0
            data_frame_creator=overlapping_tandem_df,
            arr_list=[DM1(lamb=2.0),
                      DM1(lamb=2.4),
                      DM1(lamb=5.3)],
            ser_list=[
                ConstantRateServer(rate=4.3),
                ConstantRateServer(rate=2.1),
                ConstantRateServer(rate=5.8)
            ],
            perform_param_list=DELAY_LIST))

    print(
        perform_param_list_to_csv(prefix="overlapping_tandem_",
                                  data_frame_creator=overlapping_tandem_df,
                                  arr_list=[
                                      MMOOCont(mu=7.3, lamb=3.4,
                                               peak_rate=1.2),
                                      MMOOCont(mu=1.5, lamb=3.6,
                                               peak_rate=8.2),
                                      MMOOCont(mu=1.3, lamb=1.1, peak_rate=0.4)
                                  ],
                                  ser_list=[
                                      ConstantRateServer(rate=9.0),
                                      ConstantRateServer(rate=4.1),
                                      ConstantRateServer(rate=4.7)
                                  ],
                                  perform_param_list=DELAY_LIST))

    print(
        perform_param_list_to_csv(prefix="overlapping_tandem_",
                                  data_frame_creator=overlapping_tandem_df,
                                  arr_list=[
Exemplo n.º 5
0
def csv_msob_fp_param(name: str,
                      number_flows: int,
                      number_servers: int,
                      arrival_enum: ArrivalEnum,
                      perform_param: PerformParameter,
                      opt_method: OptMethod,
                      mc_dist: MonteCarloDist,
                      comparator: callable,
                      compare_metric: ChangeEnum,
                      total_iterations: int,
                      target_util: float,
                      filter_standard_inf=False) -> dict:
    """Chooses parameters by Monte Carlo type random choice."""
    param_array = mc_enum_to_dist(arrival_enum=arrival_enum,
                                  mc_dist=mc_dist,
                                  number_flows=number_flows,
                                  number_servers=number_servers,
                                  total_iterations=total_iterations)

    res_array = np.empty([total_iterations, 3])
    # 3 approaches to compare

    for i in tqdm(range(total_iterations), total=total_iterations):
        if arrival_enum == ArrivalEnum.DM1:
            arr_list = [
                DM1(lamb=param_array[i, j]) for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.DGamma1:
            arr_list = [
                DGamma1(alpha_shape=param_array[i, j],
                        beta_rate=param_array[i, number_flows + j])
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.DWeibull1:
            arr_list = [
                DWeibull1(lamb=param_array[i, j]) for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MD1:
            arr_list = [
                MD1(lamb=param_array[i, j], mu=1.0)
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MMOODisc:
            arr_list = [
                MMOODisc(stay_on=param_array[i, j],
                         stay_off=param_array[i, number_flows + j],
                         peak_rate=param_array[i, 2 * number_flows + j])
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MMOOFluid:
            arr_list = [
                MMOOCont(mu=param_array[i, j],
                         lamb=param_array[i, number_flows + j],
                         peak_rate=param_array[i, 2 * number_flows + j])
                for j in range(number_flows)
            ]

        else:
            raise NotImplementedError(f"Arrival parameter {arrival_enum.name} "
                                      f"is infeasible")

        ser_list = [
            ConstantRateServer(
                rate=param_array[i,
                                 arrival_enum.number_parameters() *
                                 number_flows + j])
            for j in range(number_servers)
        ]

        if name == "overlapping_tandem":
            setting = OverlappingTandemPerform(arr_list=arr_list,
                                               ser_list=ser_list,
                                               perform_param=perform_param)

        elif name == "square":
            setting = SquarePerform(arr_list=arr_list,
                                    ser_list=ser_list,
                                    perform_param=perform_param)
        else:
            raise NotImplementedError("this topology is not implemented")

        computation_necessary = True

        if target_util > 0.0:
            util = setting.approximate_utilization()
            if util < target_util or util > 1:
                res_array[i, ] = np.nan
                computation_necessary = False

        if computation_necessary:
            # standard_bound, server_bound, fp_bound = compare_avoid_dep()
            res_array[i, 0], res_array[i, 1], res_array[i, 2] = comparator(
                setting=setting)

            if (perform_param.perform_metric == PerformEnum.DELAY_PROB
                    and np.nanmin(res_array[i, ]) > 1.0):
                # np.nanmin(res_array[i, ]) is the smallest value
                res_array[i, ] = np.nan
            elif np.nanmin(res_array[i, ]) == inf:
                res_array[i, ] = np.nan

            if filter_standard_inf and res_array[i, 0] == inf:
                res_array[i, ] = np.nan

    res_array_no_full_nan = remove_full_nan_rows(full_array=res_array)
    valid_iterations = res_array_no_full_nan.shape[0]

    if valid_iterations < total_iterations * 0.2:
        warn(f"Many nan's: {total_iterations - valid_iterations} nans "
             f"out of {total_iterations}!")

        if valid_iterations < 100:
            raise NotEnoughResults("result is useless")

    res_name = name
    res_name += f"_res_array_{perform_param.to_name()}_" \
        f"{arrival_enum.name}_validiter_{valid_iterations}"

    if filter_standard_inf:
        res_name += "_filter_standard_inf"

    np.savetxt(fname=res_name + ".csv", X=res_array_no_full_nan, delimiter=",")

    res_dict = msob_fp_array_to_results(title=name,
                                        arrival_enum=arrival_enum,
                                        perform_param=perform_param,
                                        opt_method=opt_method,
                                        mc_dist=mc_dist,
                                        param_array=param_array,
                                        res_array=res_array,
                                        number_flows=number_flows,
                                        number_servers=number_servers,
                                        compare_metric=compare_metric)

    res_dict.update({
        "iterations": total_iterations,
        "target_util": target_util,
        "T": perform_param.value,
        "optimization": opt_method.name,
        "compare_metric": compare_metric.name,
        "MCDistribution": mc_dist.to_name(),
        "MCParam": mc_dist.param_to_string()
    })

    filename = name
    filename += f"_results_{perform_param.to_name()}_{arrival_enum.name}_" \
        f"MC{mc_dist.to_name()}_{opt_method.name}_" \
                f"{compare_metric.name}_util_{target_util}"

    if filter_standard_inf:
        filename += "_filter_standard_inf"

    with open(filename + ".csv", 'w') as csv_file:
        writer = csv.writer(csv_file)
        for key, value in res_dict.items():
            writer.writerow([key, value])

    return res_dict
    #                                             lamb=1.3,
    #                                             peak_rate=0.7)
    #                               ],
    #                               ser_list=[
    #                                   ConstantRateServer(rate=5.0),
    #                                   ConstantRateServer(rate=6.5),
    #                                   ConstantRateServer(rate=9.1),
    #                                   ConstantRateServer(rate=9.9)
    #                               ],
    #                               perform_param_list=DELAY_LIST))

    print(
        perform_param_list_to_csv(prefix="square_",
                                  data_frame_creator=square_df,
                                  arr_list=[
                                      MMOOCont(mu=7.2, lamb=4.8,
                                               peak_rate=4.9),
                                      MMOOCont(mu=2.5, lamb=2.1,
                                               peak_rate=3.7),
                                      MMOOCont(mu=4.1, lamb=3.1,
                                               peak_rate=1.3),
                                      MMOOCont(mu=3.3, lamb=3.3, peak_rate=1.7)
                                  ],
                                  ser_list=[
                                      ConstantRateServer(rate=5.2),
                                      ConstantRateServer(rate=6.5),
                                      ConstantRateServer(rate=9.9),
                                      ConstantRateServer(rate=3.0)
                                  ],
                                  perform_param_list=DELAY_LIST))
Exemplo n.º 7
0
def csv_fat_cross_param_power(name: str, arrival_enum: ArrivalEnum,
                              number_flows: int, number_servers: int,
                              perform_param: PerformParameter,
                              opt_method: OptMethod, mc_dist: MonteCarloDist,
                              compare_metric: ChangeEnum,
                              total_iterations: int,
                              target_util: float) -> dict:
    """Chooses parameters by Monte Carlo type random choice."""
    param_array = mc_enum_to_dist(arrival_enum=arrival_enum,
                                  mc_dist=mc_dist,
                                  number_flows=number_flows,
                                  number_servers=number_servers,
                                  total_iterations=total_iterations)

    res_array = np.empty([total_iterations, 2])

    # print(res_array)

    for i in tqdm(range(total_iterations), total=total_iterations):
        if arrival_enum == ArrivalEnum.DM1:
            arr_list = [
                DM1(lamb=param_array[i, j]) for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.DGamma1:
            arr_list = [
                DGamma1(alpha_shape=param_array[i, j],
                        beta_rate=param_array[i, number_flows + j])
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.DWeibull1:
            arr_list = [
                DWeibull1(lamb=param_array[i, j]) for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MD1:
            arr_list = [
                MD1(lamb=param_array[i, j], mu=1.0)
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MMOODisc:
            arr_list = [
                MMOODisc(stay_on=param_array[i, j],
                         stay_off=param_array[i, number_flows + j],
                         peak_rate=param_array[i, 2 * number_flows + j])
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.MMOOFluid:
            arr_list = [
                MMOOCont(mu=param_array[i, j],
                         lamb=param_array[i, number_flows + j],
                         peak_rate=param_array[i, 2 * number_flows + j])
                for j in range(number_flows)
            ]

        elif arrival_enum == ArrivalEnum.Massoulie:
            arr_list = [
                LeakyBucketMassoulie(sigma_single=param_array[i, j],
                                     rho_single=param_array[i,
                                                            number_flows + j],
                                     m=20) for j in range(number_flows)
            ]
            # NOTE: n is fixed

        elif arrival_enum == ArrivalEnum.TBConst:
            arr_list = [
                DetermTokenBucket(sigma_single=param_array[i, j],
                                  rho_single=param_array[i, number_flows + j],
                                  m=1) for j in range(number_flows)
            ]

        else:
            raise NotImplementedError(f"Arrival parameter {arrival_enum.name} "
                                      f"is infeasible")

        ser_list = [
            ConstantRateServer(
                rate=param_array[i,
                                 arrival_enum.number_parameters() *
                                 number_flows + j])
            for j in range(number_servers)
        ]

        fat_cross_setting = FatCrossPerform(arr_list=arr_list,
                                            ser_list=ser_list,
                                            perform_param=perform_param)

        computation_necessary = True

        if target_util > 0.0:
            util = fat_cross_setting.approximate_utilization()
            if util < target_util or util > 1:
                res_array[i, ] = np.nan
                computation_necessary = False

        if computation_necessary:
            # standard_bound, h_mit_bound = compare_mitigator()
            res_array[i, 0], res_array[i, 1] = compare_mitigator(
                setting=fat_cross_setting,
                opt_method=opt_method,
                number_l=number_servers - 1)

            if (perform_param.perform_metric == PerformEnum.DELAY_PROB
                    and res_array[i, 1] > 1.0):
                # write as nan if second (in particular both) value(s) are > 1.0
                res_array[i, ] = np.nan

        if np.isnan(res_array[i, 0]) or np.isnan(res_array[i, 1]):
            res_array[i, ] = np.nan

    res_array_no_full_nan = remove_full_nan_rows(full_array=res_array)
    valid_iterations = res_array_no_full_nan.shape[0]

    if valid_iterations < total_iterations * 0.2:
        warn(f"Many nan's: {total_iterations - valid_iterations} nans "
             f"out of {total_iterations}!")

        if valid_iterations < 100:
            raise NotEnoughResults("result is useless")

    res_dict = two_col_array_to_results(arrival_enum=arrival_enum,
                                        param_array=param_array,
                                        res_array=res_array,
                                        number_servers=number_servers,
                                        compare_metric=compare_metric)

    res_dict.update({
        "iterations": total_iterations,
        "PerformParamValue": perform_param.value,
        "optimization": opt_method.name,
        "compare_metric": compare_metric.name,
        "MCDistribution": mc_dist.to_name(),
        "MCParam": mc_dist.param_to_string(),
        "number_servers": number_servers
    })

    filename = name
    filename += f"_results_{perform_param.to_name()}_{arrival_enum.name}_" \
                f"MC{mc_dist.to_name()}_{opt_method.name}_" \
                f"{compare_metric.name}_util_{target_util}"

    with open(filename + ".csv", 'w') as csv_file:
        writer = csv.writer(csv_file)
        for key, value in res_dict.items():
            writer.writerow([key, value])

    return res_dict
if __name__ == '__main__':
    OUTPUT_LIST = PerformParamList(perform_metric=PerformEnum.OUTPUT,
                                   values_list=list(range(4, 15)))

    print(
        perform_param_list_to_csv(prefix="single_",
                                  data_frame_creator=single_server_df,
                                  arr_list=[DM1(lamb=3.8, m=1)],
                                  ser_list=[ConstantRateServer(rate=3.0)],
                                  perform_param_list=OUTPUT_LIST,
                                  opt_method=OptMethod.GRID_SEARCH))

    print(
        perform_param_list_to_csv(
            prefix="single_",
            data_frame_creator=single_server_df,
            arr_list=[MMOOCont(mu=8.0, lamb=12.0, peak_rate=3.0, m=1)],
            ser_list=[ConstantRateServer(rate=1.5)],
            perform_param_list=OUTPUT_LIST,
            opt_method=OptMethod.GRID_SEARCH))

    RATE_1 = ConstantRateServer(rate=1.0)

    print(
        perform_param_list_to_csv(prefix="single_",
                                  data_frame_creator=single_server_df,
                                  arr_list=[MD1(lamb=0.5, mu=1.0)],
                                  ser_list=[RATE_1],
                                  perform_param_list=OUTPUT_LIST,
                                  opt_method=OptMethod.GRID_SEARCH))
        try:
            return self.setting_h_mit.h_mit_bound(param_l_list=param_list)
        except (ParameterOutOfBounds, OverflowError):
            return inf


if __name__ == '__main__':
    from h_mitigator.fat_cross_perform import FatCrossPerform
    from utils.perform_parameter import PerformParameter
    from nc_operations.perform_enum import PerformEnum
    from nc_server.constant_rate_server import ConstantRateServer
    from nc_arrivals.markov_modulated import MMOOCont

    DELAY_4 = PerformParameter(perform_metric=PerformEnum.DELAY, value=0.0001)

    MMOO_1 = MMOOCont(mu=1.0, lamb=2.2, peak_rate=3.4)
    MMOO_2 = MMOOCont(mu=3.6, lamb=1.6, peak_rate=0.4)
    CONST_RATE_1 = ConstantRateServer(rate=2.0)
    CONST_RATE_2 = ConstantRateServer(rate=0.3)

    SIMPLEX_START = np.array([[0.1], [0.3]])
    # SIMPLEX_START = np.array([[100], [200]])
    SIMPLEX_START_NEW = np.array([[0.1, 2.0], [0.3, 1.2], [0.4, 1.1]])
    SIMPLEX_RAND = InitialSimplex(parameters_to_optimize=1).uniform_dist(
        max_theta=0.6, max_l=2.0)

    NM_PARAM_SET = NelderMeadParameters()

    SETTING = FatCrossPerform(arr_list=[MMOO_1, MMOO_2],
                              ser_list=[CONST_RATE_1, CONST_RATE_2],
                              perform_param=DELAY_4)
Exemplo n.º 10
0
    # np.seterr("raise")
    np.seterr("warn")

    res = scipy.optimize.bisect(helper_function,
                                a=lower_interval,
                                b=upper_interval,
                                full_output=True)
    return res[0]


if __name__ == '__main__':
    print("Single Server Performance Bounds:\n")

    DELAY6 = PerformParameter(perform_metric=PerformEnum.DELAY_PROB, value=6)

    ARR_LIST = [MMOOCont(mu=0.2, lamb=0.5, peak_rate=2.6)]

    SINGLE_SERVER = SingleServerBandwidth(arr_list=ARR_LIST,
                                          s_e2e=ConstantRateServer(rate=2.0),
                                          perform_param=DELAY6)
    RESULTING_DELAY_PROB = Optimize(SINGLE_SERVER,
                                    number_param=1,
                                    print_x=True).grid_search(grid_bounds=[
                                        (0.1, 5.0)
                                    ],
                                                              delta=0.1)
    print(f"delay probability = {RESULTING_DELAY_PROB}")

    REQUIRED_BANDWIDTH = get_bandwidth_from_delay(arr_list=ARR_LIST,
                                                  target_delay=6,
                                                  target_delay_prob=0.034,
Exemplo n.º 11
0
    print("Single Server Performance Bounds:\n")

    DELAY_PROB8 = PerformParameter(perform_metric=PerformEnum.DELAY_PROB,
                                   value=8)

    SINGLE_SERVER = SingleServerPerform(foi=DM1(lamb=1.0),
                                        server=ConstantRateServer(rate=10.0),
                                        perform_param=DELAY_PROB8)

    print(
        Optimize(SINGLE_SERVER, number_param=1,
                 print_x=True).grid_search(grid_bounds=[(0.1, 5.0)],
                                           delta=0.1))

    SINGLE_SERVER2 = SingleServerPerform(foi=MMOOCont(mu=0.7,
                                                      lamb=0.4,
                                                      peak_rate=1.2),
                                         server=ConstantRateServer(rate=1.0),
                                         perform_param=DELAY_PROB8)

    print(
        Optimize(SINGLE_SERVER2, number_param=1,
                 print_x=True).grid_search(grid_bounds=[(0.1, 5.0)],
                                           delta=0.1))

    DELAY_PROB_REV = PerformParameter(perform_metric=PerformEnum.DELAY,
                                      value=0.0183)

    SINGLE_SERVER2 = SingleServerPerform(foi=MMOOCont(mu=0.7,
                                                      lamb=0.4,
                                                      peak_rate=1.2),
        perform_param_list_to_csv(prefix="simple_setting_",
                                  data_frame_creator=fat_cross_perform_df,
                                  arr_list=[DM1(lamb=0.4),
                                            DM1(lamb=3.5)],
                                  ser_list=[
                                      ConstantRateServer(rate=4.5),
                                      ConstantRateServer(rate=0.4)
                                  ],
                                  perform_param_list=DELAY_PROB_LIST,
                                  opt_method=OptMethod.GRID_SEARCH))

    print(
        perform_param_list_to_csv(prefix="simple_setting_",
                                  data_frame_creator=fat_cross_perform_df,
                                  arr_list=[
                                      MMOOCont(mu=1.2, lamb=2.1,
                                               peak_rate=3.5),
                                      MMOOCont(mu=3.7, lamb=1.5, peak_rate=0.4)
                                  ],
                                  ser_list=[
                                      ConstantRateServer(rate=2.0),
                                      ConstantRateServer(rate=0.3)
                                  ],
                                  perform_param_list=DELAY_PROB_LIST,
                                  opt_method=OptMethod.GRID_SEARCH))

    print(
        perform_param_list_to_csv(prefix="simple_setting_",
                                  data_frame_creator=fat_cross_perform_df,
                                  arr_list=[
                                      MMOOCont(mu=1.0, lamb=2.2,
                                               peak_rate=3.4),
    #              MMOOFluid(mu=2.5, lamb=3.3, burst=1.6)]
    #
    #         ],
    #         ser_list=[
    #             ConstantRateServer(rate=5.2),
    #             ConstantRateServer(rate=6.5),
    #             ConstantRateServer(rate=9.9),
    #             ConstantRateServer(rate=3.0)
    #         ],
    #         perform_param=DELAY3))

    print(
        arrival_list_to_csv(prefix="square_",
                            data_frame_creator=square_adjust_arr_df,
                            list_arr_list=[[
                                MMOOCont(mu=7.0, lamb=4.8, peak_rate=4.9),
                                MMOOCont(mu=2.2, lamb=2.1, peak_rate=3.7),
                                MMOOCont(mu=4.1, lamb=1.0, peak_rate=2.0),
                                MMOOCont(mu=2.5, lamb=3.3, peak_rate=0.1)
                            ],
                                           [
                                               MMOOCont(mu=7.0,
                                                        lamb=4.8,
                                                        peak_rate=4.9),
                                               MMOOCont(mu=2.2,
                                                        lamb=2.1,
                                                        peak_rate=3.7),
                                               MMOOCont(mu=4.1,
                                                        lamb=1.0,
                                                        peak_rate=2.0),
                                               MMOOCont(mu=2.5,