Exemplo n.º 1
0
def test_spanning_tree():
    x9, y9 = np.array([[50, 90],
                       [100, 150],
                       [200, 150],
                       [300, 140],
                       [340, 110],
                       [300, 55],
                       [200, 50],
                       [100, 50],
                       [160, 110]]).T

    for x, y, ref in [(x9, y9, 561.0566071630595), (wt_x, wt_y, 44232.604068779656)]:
        x = np.asarray(x)
        y = np.asarray(y)
        sp1 = mst(x, y)
        sp2 = spanning_tree(x, y)
        if 0:
            for sp in [sp1, sp2]:
                plt.figure()
                plt.plot(x, y, '.')
                s = []
                for i in sp.keys():
                    if i[0] < i[1] and i[::-1] in sp:
                        continue
                    plt.plot(x[np.array(i)], y[np.array(i)], 'k-')
                    s.append(np.hypot(np.diff(x[np.array(i)]), np.diff(y[np.array(i)])))
                plt.title("%s, %s" % (sum(sp.values()), np.sum(s)))

            plt.show()
        npt.assert_almost_equal(sum(sp1.values()), ref)
        npt.assert_almost_equal(sum([v for k, v in sp2.items() if k[::-1] not in sp2 or k[0] < k[1]]), ref)
Exemplo n.º 2
0
def test_dtu_cm_npv():
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")

        distance_from_shore = 10  # [km]
        energy_price = 0.2  # [Euro/kWh]
        project_duration = 20  # [years]
        discount_rate = 0.062860816  # [-]

        eco_eval = economic_evaluation(distance_from_shore, energy_price,
                                       project_duration, discount_rate)

        number_of_turbines = 10
        rated_rpm_vector = [10.0] * number_of_turbines  # [RPM]
        rotor_diameter_vector = [100.0] * number_of_turbines  # [m]
        rated_power_vector = [10.0] * number_of_turbines  # [MW]
        hub_height_vector = [100.0] * number_of_turbines  # [m]
        water_depth_vector = [15.0] * number_of_turbines  # [m]
        aep_vector = [8.0e6] * number_of_turbines  # [kWh]

        eco_eval.calculate_npv(rated_rpm_vector, rotor_diameter_vector,
                               rated_power_vector, hub_height_vector,
                               water_depth_vector, aep_vector)

        npt.assert_almost_equal(eco_eval.NPV, 0.0724087)  # [Euro]
Exemplo n.º 3
0
def test_turbine_Type_multistart_XYZ_optimization():
    plot_comp = DummyCostPlotComp(optimal, delay=.5)
    plot_comp = NoPlot()
    xyz = [(0, 0, 0), (1, 1, 1)]

    p1 = DummyCost(optimal_state=optimal,
                   inputs=['x', 'y', 'z', 'type'])

    p2 = TurbineXYZOptimizationProblem(
        cost_comp=p1,
        turbineXYZ=xyz,
        min_spacing=2,
        boundary_comp=get_boundary_comp(),
        plot_comp=plot_comp,
        driver=EasyScipyOptimizeDriver(disp=True, optimizer='COBYLA', maxiter=10))
    p3 = InitialXYZOptimizationProblem(
        cost_comp=p2,
        turbineXYZ=xyz, min_spacing=2,
        boundary_comp=get_boundary_comp(),
        driver=DOEDriver(ListGenerator([[('x', [0, 4]), ('y', [2, 2]), ('z', [4, 1])]])))
    tf = TurbineTypeOptimizationProblem(
        cost_comp=p3,
        turbineTypes=[0, 0], lower=0, upper=1,
        driver=DOEDriver(FullFactorialGenerator(1)))

    case_gen = tf.driver.options['generator']
    cost, state, recorder = tf.optimize()
    print(cost)
    # print (state)
    print(recorder.get('type'))
    print(recorder.get('cost'))
    best_index = np.argmin(recorder.get('cost'))
    initial_xyz_recorder = recorder['recorder'][best_index]
    xyz_recorder = initial_xyz_recorder.get('recorder')[0]
    npt.assert_almost_equal(xyz_recorder['cost'][-1], cost)
Exemplo n.º 4
0
def test_3level_type_multistart_XYZ_optimization():
    design_vars = {k: v for k, v in zip('xy', optimal.T)}
    design_vars['z'] = (optimal[:, 2], 0, 4)
    xyz_problem = TopFarmProblem(design_vars,
                                 cost_comp=DummyCost(optimal,
                                                     ['x', 'y', 'z', 'type']),
                                 constraints=[
                                     SpacingConstraint(2),
                                     XYBoundaryConstraint([(0, 0), (4, 4)],
                                                          'square')
                                 ],
                                 driver=EasyScipyOptimizeDriver(disp=False))

    initial_xyz_problem = TopFarmProblem(
        design_vars={k: v
                     for k, v in zip('xyz', optimal.T)},
        cost_comp=xyz_problem,
        driver=DOEDriver(
            ListGenerator([[('x', [0, 4]), ('y', [2, 2]), ('z', [4, 1])]])))

    tf = TopFarmProblem({'type': ([0, 0], 0, 1)},
                        cost_comp=initial_xyz_problem,
                        driver=DOEDriver(FullFactorialGenerator(2)))

    cost, _, recorder = tf.optimize()
    best_index = np.argmin(recorder.get('cost'))
    initial_xyz_recorder = recorder['recorder'][best_index]
    xyz_recorder = initial_xyz_recorder.get('recorder')[0]
    npt.assert_almost_equal(xyz_recorder['cost'][-1], cost)
Exemplo n.º 5
0
def test_TopFarmProblem():
    tf = xy3tb.get_tf(design_vars={'x': [3, 7, 4], 'y': [-3, -7, -3]},
                      constraints=[])

    cost, state, _ = tf.optimize()
    npt.assert_almost_equal(cost, 0)
    npt.assert_array_almost_equal(state['x'], xy3tb.desired[:, 0])
    npt.assert_array_almost_equal(state['y'], xy3tb.desired[:, 1])
Exemplo n.º 6
0
def test_smart_start_aep_map_PyWakeAEP():
    site = IEA37Site(16)
    n_wt = 4

    x, y = site.initial_position[:n_wt].T
    wd_lst = np.arange(0, 360, 45)
    ws_lst = [10]
    turbines = hornsrev1.HornsrevV80()
    site = UniformSite([1], .75)
    site.default_ws = ws_lst
    site.default_wd = wd_lst

    aep = PyWakeAEP(wake_model=NOJ(site, turbines))
    aep_1wt = aep.calculate_AEP([0], [0]).sum()

    tf = TopFarmProblem(design_vars={
        'x': x,
        'y': y
    },
                        cost_comp=aep.get_TopFarm_cost_component(n_wt),
                        driver=EasyScipyOptimizeDriver(),
                        constraints=[
                            SpacingConstraint(160),
                            CircleBoundaryConstraint((0, 0), 500)
                        ])
    x = np.arange(-500, 500, 10)
    y = np.arange(-500, 500, 10)
    XX, YY = np.meshgrid(x, y)

    tf.smart_start(XX,
                   YY,
                   aep.get_aep4smart_start(wd=wd_lst, ws=ws_lst),
                   radius=40,
                   seed=1)
    tf.evaluate()

    if 0:
        wt_x, wt_y = tf['x'], tf['y']
        for i, _ in enumerate(wt_x, 1):
            print(aep.calculate_AEP(wt_x[:i], wt_y[:i]).sum((1, 2)))
        X_j, Y_j, aep_map = aep.aep_map(x,
                                        y,
                                        0,
                                        wt_x,
                                        wt_y,
                                        ws=ws_lst,
                                        wd=wd_lst)
        print(tf.evaluate())
        import matplotlib.pyplot as plt
        c = plt.contourf(X_j, Y_j, aep_map, 100)
        plt.colorbar(c)
        plt.plot(wt_x, wt_y, '2r')
        for c in tf.model.constraint_components:
            c.plot()
        plt.axis('equal')
        plt.show()
    npt.assert_almost_equal(aep_1wt * n_wt, tf['AEP'], 5)
Exemplo n.º 7
0
def test_AEPCalculator():
    f = [1, 0, 0, 0]
    A = [9.176929, 10, 10, 10]
    k = [2.392578, 2, 2, 2]
    wr = WindResource(np.array(f), A, k, ti=np.zeros_like(f) + .1)
    wf_3tb = testfilepath + "wind_farms/3tb.yml"
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")
        wm = FusedWakeGCLWakeModel(wf_3tb)
        aep_calc = AEPCalculator(wr, wm)
        npt.assert_almost_equal(aep_calc([-1600, 0, 1600], [0, 0, 0]),
                                22.3178800761)
Exemplo n.º 8
0
def test_smart_start_aep_map(seed, radius, resolution, tol):
    site = IEA37Site(16)
    n_wt = 4
    x, y = site.initial_position[:n_wt].T
    wd_lst = np.arange(0, 360, 45)
    ws_lst = [10]
    turbines = hornsrev1.HornsrevV80()
    site = UniformSite([1], .75)
    site.default_ws = ws_lst
    site.default_wd = wd_lst
    wfm = NOJ(site, turbines)
    aep_comp = PyWakeAEPCostModelComponent(wfm, n_wt=n_wt)
    aep_1wt = wfm([0], [0]).aep().sum()

    tf = TopFarmProblem(design_vars={
        'x': x,
        'y': y
    },
                        cost_comp=aep_comp,
                        driver=EasyScipyOptimizeDriver(),
                        constraints=[
                            SpacingConstraint(160),
                            CircleBoundaryConstraint((0, 0), radius)
                        ])
    x = np.arange(-radius, radius, resolution)
    y = np.arange(-radius, radius, resolution)
    XX, YY = np.meshgrid(x, y)

    tf.smart_start(XX,
                   YY,
                   aep_comp.get_aep4smart_start(wd=wd_lst, ws=ws_lst),
                   radius=40,
                   plot=0,
                   seed=seed)
    tf.evaluate()

    if 0:
        wt_x, wt_y = tf['x'], tf['y']
        for i, _ in enumerate(wt_x, 1):
            print(wfm(wt_x[:i], wt_y[:i]).aep().sum(['wd', 'ws']))
        aep_comp.windFarmModel(wt_x, wt_y, ws=ws_lst,
                               wd=wd_lst).flow_map().aep_xy().plot()
        print(tf.evaluate())
        import matplotlib.pyplot as plt
        plt.plot(wt_x, wt_y, '2r')
        for c in tf.model.constraint_components:
            c.plot()
        plt.axis('equal')
        plt.show()
    npt.assert_almost_equal(aep_1wt * n_wt, tf['AEP'], tol)
Exemplo n.º 9
0
def test_dtu_cm_opex():
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")

        distance_from_shore = 10          # [km]
        energy_price = 0.2                # [Euro/kWh]
        project_duration = 20             # [years]

        eco_eval = economic_evaluation(distance_from_shore, energy_price, project_duration)

        number_of_turbines = 10
        rated_power_vector = [10.0] * number_of_turbines  # [MW]

        eco_eval.calculate_opex(rated_power_vector)

        npt.assert_almost_equal(eco_eval.project_costs_sums['OPEX'] * 1.0E-6, 6.465)  # [M Euro / year]
Exemplo n.º 10
0
def test_turbineType_and_XYZ_optimization():
    plot_comp = DummyCostPlotComp(optimal)
    plot_comp = NoPlot()
    cost_comp = DummyCost(
        optimal_state=optimal,
        inputs=['x', 'y', 'z', 'type'])
    xyz_opt_problem = TurbineXYZOptimizationProblem(
        cost_comp,
        turbineXYZ=[(0, 0, 0), (1, 1, 1)],
        min_spacing=2,
        boundary_comp=get_boundary_comp(),
        plot_comp=plot_comp,
        driver=EasyScipyOptimizeDriver(disp=False))
    tf = TurbineTypeOptimizationProblem(
        cost_comp=xyz_opt_problem,
        turbineTypes=[0, 0], lower=0, upper=1,
        driver=DOEDriver(FullFactorialGenerator(2)))
    cost = tf.optimize()[0]
    npt.assert_almost_equal(cost, 0)
Exemplo n.º 11
0
def test_dtu_cm_capex():
    with warnings.catch_warnings():
        warnings.simplefilter("ignore")

        distance_from_shore = 10          # [km]
        energy_price = 0.2                # [Euro/kWh]
        project_duration = 20             # [years]

        eco_eval = economic_evaluation(distance_from_shore, energy_price, project_duration)

        number_of_turbines = 10
        rated_rpm_vector = [10.0] * number_of_turbines        # [RPM]
        rotor_diameter_vector = [100.0] * number_of_turbines  # [m]
        rated_power_vector = [10.0] * number_of_turbines      # [MW]
        hub_height_vector = [100.0] * number_of_turbines      # [m]
        water_depth_vector = [15.0] * number_of_turbines      # [m]

        eco_eval.calculate_capex(rated_rpm_vector, rotor_diameter_vector, rated_power_vector,
                                 hub_height_vector, water_depth_vector)

        npt.assert_almost_equal(eco_eval.project_costs_sums['CAPEX'] * 1.0E-6, 93.6938301)  # [M Euro]
Exemplo n.º 12
0
def testCostModelComponentDiffShapeInput():
    def aep_cost(x, y, h):
        opt_x, opt_y = optimal.T
        return -np.sum((x - opt_x)**2 + (y - opt_y)**2) + h, {
            'add_out': sum(x)
        }

    cost_comp = AEPCostModelComponent(['x', 'y', ('h', 0)],
                                      4,
                                      aep_cost,
                                      additional_output=[('add_out', 0)])
    tf = TopFarmProblem(dict(zip('xy', initial.T)),
                        cost_comp=cost_comp,
                        constraints=[
                            SpacingConstraint(min_spacing),
                            XYBoundaryConstraint(boundary)
                        ],
                        driver=EasyScipyOptimizeDriver(disp=False),
                        ext_vars={'h': 0})
    cost0, _, _ = tf.optimize(state={'h': 0})
    cost10, _, _ = tf.optimize(state={'h': 10})
    npt.assert_almost_equal(cost10, cost0 - 10)