def adv_minimize_plot(name, optimizer, fun, bounds, value_limit = math.inf, num_retries = 1024, logger=logger(), statistic_num = 0): time0 = time.perf_counter() # optimization start time name += '_smart_' + optimizer.name logger.info('smart optimize ' + name) store = advretry.Store(lambda x:fun(x)[0], bounds, capacity=5000, logger=logger, num_retries=num_retries, statistic_num = statistic_num) advretry.retry(store, optimizer.minimize, value_limit) xs = np.array(store.get_xs()) ys = np.array([fun(x) for x in xs]) retry.plot(ys, '_all_' + name + '.png', interp=False) np.savez_compressed(name , xs=xs, ys=ys) xs, front = pareto(xs, ys) logger.info(name+ ' time ' + str(dtime(time0))) retry.plot(front, '_front_' + name + '.png')
def _test_optimizer(opt_name, problem, num_retries = 4000, num = 20, value_limit = 20.0, log = logger()): log.info(problem.name + ' ' + opt_name) for i in range(num): store = Store(problem.bounds, logger = log) optimizer = Optimizer(store, 0) method = getattr(optimizer, opt_name) ret = retry(problem.fun, store, method, num_retries, value_limit = value_limit)
def optimize(): name = 'tsin3000.60' # 60 trajectories to choose from # name = 'tsin3000.10' # 10 fixed trajectories transfers = pd.read_csv('data/' + name + '.xz', sep=' ', usecols=[1, 2, 3, 4, 5, 6, 7], compression='xz', names=[ 'asteroid', 'station', 'trajectory', 'mass', 'dv', 'transfer_start', 'transfer_time' ]) # uncomment to write a clear text csv # transfers.to_csv('data/' + name + '.txt', sep=' ', header=False) global TRAJECTORY_NUM, ASTEROID_NUM # adjust number of asteroids / trajectories TRAJECTORY_NUM = int(np.amax(transfers["trajectory"]) + 1) ASTEROID_NUM = int(np.amax(transfers["asteroid"]) + 1) # bounds for the objective function dim = 10 + 2 * STATION_NUM - 1 lower_bound = np.zeros(dim) # lower_bound[10+STATION_NUM:dim] = 0.00001 upper_bound = np.zeros(dim) lower_bound[:] = 0.0000001 upper_bound[10:] = 0.9999999 upper_bound[:10] = TRAJECTORY_NUM - 0.00001 # trajectory indices bounds = Bounds(lower_bound, upper_bound) # smart boundary management (SMB) with DE->CMA store = advretry.Store(fitness(transfers), bounds, num_retries=10000, max_eval_fac=5.0, logger=logger()) advretry.retry(store, de_cma(10000).minimize) # smart boundary management (SMB) with CMA-ES # store = advretry.Store(fitness(transfers), bounds, num_retries=10000, max_eval_fac=5.0, logger=logger()) # advretry.retry(store, Cma_cpp(10000).minimize) # BiteOpt algorithm multi threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, Bite_cpp(1000000, M=1).minimize, num_retries=3200) # CMA-ES multi threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, Cma_cpp(1000000).minimize, num_retries=3200) # scipy minimize algorithm multi threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, Minimize(1000000).minimize, num_retries=3200) # fcmaes differential evolution multi threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, De_cpp(1000000).minimize, num_retries=3200) # scipy differential evolution multi threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, Differential_evolution(1000000).minimize, num_retries=3200) # scipy dual annealing multi threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, Dual_annealing(1000000).minimize, num_retries=3200) # scipy differential evolution single threaded # store = retry.Store(fitness(transfers), bounds, logger=logger()) # retry.retry(store, Differential_evolution(1000000).minimize, num_retries=320, workers=1) return store.get_xs(), store.get_ys()
def retry(self, optimizer): retries = self.retries + self.num_retries self.ret = advretry.retry(self.fun, self.store, optimizer.minimize, retries) self.retries = retries self.value = self.store.get_y_best()