assert minconv > 1.95

if optimise:
    # Optimise the control for minimal functional (i.e. maximum profit)
    # with a gradient based optimisation algorithm using the reduced functional
    # to replay the model, and computing its derivative via the adjoint
    # By default scipy's implementation of L-BFGS-B is used, see
    #   https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html
    # options, such as maxiter and pgtol can be passed on.
    if optimise_angle_only:
        lb = [0] * len(farm_options.turbine_axis)
        ub = [360] * len(farm_options.turbine_axis)
        td_opt = minimize(rf,
                          method='SLSQP',
                          bounds=[lb, ub],
                          options={
                              'maxiter': 100,
                              'ftol': 1e-9
                          })
    else:
        r = farm_options.turbine_options.diameter / 2.

        lb = np.array([[site_x1 + r, site_y1 + r]
                       for _ in farm_options.turbine_coordinates]).flatten()
        ub = np.array([[site_x2 - r, site_y2 - r]
                       for _ in farm_options.turbine_coordinates]).flatten()

        if farm_options.considering_yaw:
            lb = list(lb) + [0] * len(farm_options.turbine_axis)
            ub = list(ub) + [360] * len(farm_options.turbine_axis)
    # to replay the model, and computing its derivative via the adjoint
    # By default scipy's implementation of L-BFGS-B is used, see
    #   https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html
    # options, such as maxiter and pgtol can be passed on.
    optimise_layout_only = False
    d = farm_options.turbine_options.diameter

    lb = [90] * int(len(farm_options.turbine_axis) / 2) + [270] * int(
        len(farm_options.turbine_axis) / 2)
    ub = [270] * int(len(farm_options.turbine_axis) / 2) + [450] * int(
        len(farm_options.turbine_axis) / 2)

    td_opt = minimize(rf,
                      method='SLSQP',
                      bounds=[lb, ub],
                      options={
                          'maxiter': 200,
                          'ptol': 1e-3
                      })

t_end = time.time()
print('time cost: {0:.2f}min'.format((t_end - t_start) / 60))

if 1:
    comm = MPI.COMM_WORLD
    rank = comm.Get_rank()
    if rank == 0:
        yag = yagmail.SMTP(user='******',
                           password='******',
                           host='smtp.qq.com')
        yag.send(to=['*****@*****.**'],
Example #3
0
    #   https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_l_bfgs_b.html
    # options, such as maxiter and pgtol can be passed on.

    r = farm_options.turbine_options.diameter / 2.

    lb = np.array([[site_x1 + r, site_y1 + r]
                   for _ in farm_options.turbine_coordinates]).flatten()
    ub = np.array([[site_x2 - r, site_y2 - r]
                   for _ in farm_options.turbine_coordinates]).flatten()

    if farm_options.considering_yaw:
        lb = list(lb) + [0] * len(farm_options.turbine_coordinates)
        ub = list(ub) + [360] * len(farm_options.turbine_coordinates)

    mdc = turbines.MinimumDistanceConstraints(farm_options.turbine_coordinates,
                                              farm_options.turbine_axis,
                                              r * 3.)

    td_opt, res = minimize(rf,
                           method='SLSQP',
                           bounds=[lb, ub],
                           constraints=mdc,
                           options={
                               'maxiter': 1000,
                               'ftol': 1e-6,
                               'disp': True
                           })
    print(res)

t_end = time.time()
print('time cost:', (t_end - t_start) / 60, 'min')