Racing¶
Overview¶
Two types of racing are supported in PyGMO, namely the racing between individuals in a population, and racing between algorithms.
Racing of individuals in a population can be done as the following. Note that in PyGMO.population, there is also a race method which can be conveniently called. However, in order to utilize the caching mechanism in racing, one has to invoke racing explicitly via PyGMO.util.race_pop.
from PyGMO import *
prob = problem.noisy(problem.ackley(2))
pop = population(prob,20)
racer = util.race_pop(population=pop,seed=0)
winners, fevals = racer.run(1) # Extract the single best winner
Illustration of the effects of caching:
from PyGMO import *
pop = population(problem.noisy(), 10, 0)
# Race overlapping individuals without caching
winners, fevalsA = pop.race(1, racers_idx=range(0,5))
winners, fevalsB = pop.race(1, racers_idx=range(3,8))
# Race overlapping individuals with caching via race_pop
racer = util.race_pop(pop)
winners, fevalsA_cache = racer.run(1, racers_idx=range(0,5))
winners, fevalsB_cache = racer.run(1, racers_idx=range(3,8))
print 'Consumed fevals', fevalsA + fevalsB # 39
print 'Consumed fevals [caching]', fevalsA_cache + fevalsB_cache # 26
Racing of algorithms can be done as follows:
from PyGMO import *
algos = [algorithm.de(), algorithm.cmaes(), algorithm.pso()]
prob = problem.ackley() # To race over a single problem
racer1 = util.race_algo(algos, prob)
winners1, fevals1 = racer1.run(1)
probs = [problem.ackley(), problem.griewank()] # To race over multiple problems
racer2 = util.race_algo(algos, probs)
winners2, fevals2 = racer2.run(1)
Detailed documentation¶
- class PyGMO.util.race_pop(pop=None, seed=0)¶
- __init__()¶
Constructs a racing object responsible for racing individuals in a population
USAGE: race_pop(pop, seed=0)
- pop: The pop containing the individuals to be raced
- seed: Seed of the racing object
- get_mean_fitness(ind_list=[])¶
Returns the average fitness value of the individuals based on the evaluation history
- ind_list: The indices of the individuals whose mean fitness vectors are to be extracted. If this is empty, mean data of all the individuals will be returned.
- inherit_memory(race_pop_src)¶
Transfer compatible evaluation history from another race_pop object.
The source race_pop object and the current race_pop object must have the same seed. Upon calling, the current race_pop object will inherit evaluation history of individuals who also happen to reside in source.
USAGE: race_pop.inherit_memory(race_pop_src)
- race_pop_src: The source race_pop object from which compatible evaluation history will be transferred to current object
- register_pop(pop)¶
Load a population into the race environment.
This step is required before the calling to run(), if during construction no population was supplied.
- pop Population to be registered. Racing will operate over this population.
- reset_cache()¶
Clears the cached fitness and constraint vectors.
- run(n_final, min_trials=0, max_count=500, delta=0.05, racers_idx=, []term_cond=PyGMO.util._util._termination_condition.MAX_BUDGET, race_best=True, screen_output=False)¶
Start a race among the individuals
Returns a tuple of winning indices and consumed objective function evaluation.
USAGE: race_pop.run(n_final, min_trials=0, max_count=500, delta=0.05, racers_idx=[], term_cond=util.race_pop.termination_condition.MAX_BUDGET, race_best=True, screen_output=False):
- n_final: The desired number of winners when race ends
- min_trials: Each individuals be evaluated at least this number of times before being dropped
- max_count: The allow number of function evaluations (MAX_BUDGET), or the maximum number of data points to be considered for each individual (MAX_DATA_COUNT)
- delta: Confidence level of the statistical test
- racers_idx: Indices of the individuals to be raced, empty means to race all individuals
- term_cond: Can be util.race_pop.termination_condition.MAX_BUDGET or util.race_pop.termination_condition.MAX_DATA_COUNT
- race_best: When True winners are the best, otherwise winners are the worst
- screen_output: Log racing stats at each iteration onto the screen
- set_seed(seed)¶
Reset the seed for racing.
- seed: The new seed to be set. This automatically clears the evaluation cache.
- size()¶
Returns the number of individuals contained in the underlying population
USAGE: race_pop.size()
- class PyGMO.util.race_algo(algo_list, probs, pop_size=100, seed=0)¶
Similar to race_pop, this class contains the mechanisms to race different algorithms. The race among the algorithms can be performed over a single problem, or over a multiple of them.
- __init__()¶
Construct the racing object responsible for racing algorithms
- algo_list: The algorithms to be raced
- probs: Can be a single PyGMO problem or a list of them
- pop_size: All the algorithms will be evolving internally some random population of this size
- seed: Seed of the race
- run(n_final, min_trials=0, max_count=500, delta=0.05, racers_idx=, []race_best=True, screen_output=False)¶
Start a race among several algorithms
Returns a tuple of winning indices and the total number of evolve() made.
USAGE: race_algo.run(n_final, min_trials=0, max_count=500, delta=0.05, racers_idx=[], race_best=True, screen_output=False):
- n_final: The desired number of winners when race ends
- min_trials: Each algorithms be evaluated at least this number of times before being dropped
- max_count: The allow number of algorithm performance evaluation (i.e. number of calls to evolve)
- delta: Confidence level of the statistical test
- racers_idx: Indices of the algorithms to be raced, empty means to race all algorithms
- race_best: When True winners are the best, otherwise winners are the worst
- screen_output: Log racing stats at each iteration onto the screen