コード例 #1
0
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')
コード例 #2
0
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)
コード例 #3
0
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()
コード例 #4
0
 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()