Genopt: optimization with genetic algorithms
Project description
Genopt: A genetic algorithm powered hyperparameter optimization framework
Genopt is a high level framework that helps optimizing functions using the power of genetic algorithms.
1. Installation
Genopt is available at PyPI
$ pip install genopt
2. Quickstart
2.1. Define Search Space
2.1.1. Fixed Search Space
#defining a fixed set of Parameters for 4 variables
params = {
'x': [35, -51, 0, 1, 2, 3, 4, 66, 11, 50, 90],
'y': [-100, -51, 0, 7, 32, 31, 4, 51, 121, 50, 90, 1000, 231]
'z': [-10, -51, 0, 12, 2, 43, 43, 5, 1231, 50, 90],
'k': [-56, -51, 0, 1, 2, 13, 4, 5, 11, 50, 90]
}
2.1.2. Flexible Search Space
from genopt.parameters import Parameters
#defining a 4 variable search space of float values from -100.0 to 100.0
params = {
'x': Parameters.suggest_float(-100, 100),
'y': Parameters.suggest_float(-100, 100),
'z': Parameters.suggest_float(-100, 100),
'k': Parameters.suggest_float(-100, 100)
}
2.2. Define Single-Objective Function
#defining an objective function
def objective(individual):
x = individual['x']
y = individual['y']
z = individual['z']
k = individual['k']
return (x**2 - 4*y**3 / z**4) * k**3
2.3. Define Multi-Objective Function
#defining an objective function
def objective(individual):
x = individual['x']
y = individual['y']
z = individual['z']
k = individual['k']
objective_1 = ((x**2 - 4*y**3 / z**4) * k**3)
objective_2 = (k**3 / x)
return objective_1, objective_2
2.4. Start Optimization for Single-Objective Function and Default Parameters
from genopt.environment import Environment
if __name__ == '__main__':
#defining our Environment instance with a population of 100 individuals,
#roulette selection for 50% of the population, one-point crossover,
#a single gene mutation with 10% probability of mutation,
#10% elite rate, some verbose and without a seed for reproducibility
environment = Environment(
params=params
)
#minimizing the objective function and adding a 60 seconds timeout
#as an stop criteria and a single core execution (n_jobs=1)
results = environment.optimize(
objective=objective,
direction='minimize',
timeout=60
)
2.5. Start Optimization for Single-Objective Function and Custom Parameters
from genopt.environment import Environment
if __name__ == '__main__':
#defining our Environment instance with a population of 100 individuals,
#tournament selection for 80% of the population, one-point crossover,
#a single gene mutation with 25% probability of mutation, some verbose and a seed for reproducibility
environment = Environment(
params=params,
num_population=100,
selection_type='tournament',
selection_rate=0.8,
crossover_type='one-point',
mutation_type='single-gene',
prob_mutation=0.25,
verbose=1,
random_state=42
)
#minimizing the objective function and adding
#3 stop criterias (num_generations, timeout, stop_score)
results = environment.optimize(
objective=objective,
direction='minimize',
num_generations=9999,
timeout=60,
stop_score=-np.inf
)
2.6. Start Optimization for Multi-Objective Function and Custom Parameters
from genopt.environment import Environment
if __name__ == '__main__':
#defining our Environment instance with a population of 100 individuals,
#ranking selection for 70% of the population, one-point crossover,
#a single gene mutation with 25% probability of mutation, some verbose and a seed for reproducibility
environment = Environment(
params=params,
num_population=100,
selection_type='ranking',
selection_rate=0.7,
crossover_type='one-point',
mutation_type='single-gene',
prob_mutation=0.25,
verbose=1,
random_state=42
)
#minimizing the first value and maximazing the second value of the objective function,
#adding 1 stop criterias (timeout), adding 50% weight to each objective and
#assigning a name to each objective score for the final dataframe
results = environment.optimize(
objective=objective,
direction=['minimize', 'maximize'],
weights=[0.5, 0.5],
timeout=60,
score_names=['complex_equation_score', 'simple_equation_score']
)
2.7. Show Optimization Results
print(f'EXECUTION TIME={results.execution_time}')
print(f'BEST SCORE={results.best_score}')
print(f'BEST INDIVIDUAL={results.best_individual}')
print('BEST PER GENERATION:')
print(results.best_per_generation_dataframe)
print('LAST GENERATION INDIVIDUALS:')
print(results.last_generation_individuals_dataframe)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
genopt-0.9.15.tar.gz
(12.6 kB
view hashes)
Built Distribution
Close
Hashes for genopt-0.9.15-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8da92f7f5cba331d098ac17357d44c935a8ca46fc0753a1d76bd600d957160a2 |
|
MD5 | 8fcd86e7aa34bf022404b3edf116154e |
|
BLAKE2b-256 | 85ea16e1ed8adbe2648c8b707d309ac47035b4ea1d9f417c6147ebd6408a3a80 |