Package: genopt
Genopt: A genetic algorithm powered hyperparameter optimization frameworkGenopt is a high level framework that helps optimizing functions using the power of genetic algorithms.1. InstallationGenopt is available atPyPI$ pip install genopt2. Quickstart2.1. Define Search Space2.1.1. Fixed Search Space#defining a fixed set of Parameters for 4 variablesparams={'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 Spacefromgenopt.parametersimportParameters#defining a 4 variable search space of float values from -100.0 to 100.0params={'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 functiondefobjective(individual):x=individual['x']y=individual['y']z=individual['z']k=individual['k']return(x**2-4*y**3/z**4)*k**32.3. Define Multi-Objective Function#defining an objective functiondefobjective(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)returnobjective_1,objective_22.4. Start Optimization for Single-Objective Function and Default Parametersfromgenopt.environmentimportEnvironmentif__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 reproducibilityenvironment=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 Parametersfromgenopt.environmentimportEnvironmentif__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 reproducibilityenvironment=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 Parametersfromgenopt.environmentimportEnvironmentif__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 reproducibilityenvironment=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 dataframeresults=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  Resultsprint(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)