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=['*****@*****.**'],
# 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')