def get_correction_heurs(of, maxeval, FSA=True, GO=True): overview_heurs = [] if FSA: for T0 in [1e-10, 1e-2, 1, np.inf]: for mutation in get_correction_mutation(of): for n0 in [1, 2, 5]: overview_heurs.append( FastSimulatedAnnealing(of, maxeval=maxeval, T0=T0, n0=n0, alpha=2, mutation=mutation)) if GO: for mutation in get_correction_mutation(of): for crossover in [UniformMultipoint(1)]: for N in [100, 150, 200]: for Tsel1 in [0.5]: overview_heurs.append( GeneticOptimization(of, maxeval, N=N, M=N * 3, Tsel1=Tsel1, Tsel2=0.1, mutation=mutation, crossover=crossover)) return overview_heurs
def get_overview_heurs(of, maxeval, RD=True, FSA=True, DE=True, GO=True): overview_heurs = [] if RD: for hmax in [0, 5, 10, 50, np.inf]: for RD in [False, True]: overview_heurs.append( ShootAndGo(of, maxeval=maxeval, hmax=hmax, random_descent=RD)) if FSA: for T0 in [1e-10, 1e-2, 1, np.inf]: for mutation in get_overview_mutation(of): for n0 in [1, 2, 5]: overview_heurs.append( FastSimulatedAnnealing(of, maxeval=maxeval, T0=T0, n0=n0, alpha=2, mutation=mutation)) if DE: for N in [4, 10, 20]: for CR in [0.2, 0.5, 0.8]: for F in [0.5, 1, 2]: overview_heurs.append( DifferentialEvolution(of, maxeval=maxeval, N=N, CR=CR, F=F)) if GO: for mutation in get_overview_mutation(of): for crossover in [ Crossover(), UniformMultipoint(1), RandomCombination() ]: for N in [1, 2, 5, 10, 30, 100]: for Tsel1 in [0.5, 1]: overview_heurs.append( GeneticOptimization(of, maxeval, N=N, M=N * 3, Tsel1=Tsel1, Tsel2=0.1, mutation=mutation, crossover=crossover)) return overview_heurs
# # * correction options are: vanilla correction Correction(of), MirrorCorrection(of) and ExtensionCorrection(of), # # * mutations options are: CauchyMutation($\gamma$) and LevyMutation($\gamma$), where parameter $\gamma > 0$ is set by user. # # In the current settings there are 5 crossover, 3 correction and 2 mutation options. # In[7]: multipoints = [1, 2, 3] crossovers = [ {'crossover': Crossover(), 'name': 'mix'}, {'crossover': RandomCombination(), 'name': 'rnd'}] for multipoint in multipoints: crossover = {'crossover': UniformMultipoint(multipoint), 'name': 'uni{}'.format(multipoint)} crossovers.append(crossover) corrections = [ {'correction': Correction(tsp), 'name': 'vanilla'}, {'correction': MirrorCorrection(tsp), 'name': 'mirror'}, {'correction': ExtensionCorrection(tsp), 'name': 'extension'}] parameters = [1, 3, 5] mutations = [] for parameter in parameters: for correction in corrections: mutation = {'mutation': CauchyMutation(r=parameter, correction = correction['correction']), 'name': 'cauchy{}_' .format(parameter)+correction['name']} mutations.append(mutation) mutation = {'mutation': LevyMutation(scale=parameter, correction = correction['correction']), 'name': 'levy{}_'
for i in tqdm(range(num_runs), 'Testing {}'.format(heur_name)): result = GeneticOptimization(of, maxeval, N=N, M=M, Tsel1=Tsel1, Tsel2=Tsel2, mutation=mutation, crossover=crossover).search() result['run'] = i result['heur'] = heur_name result['N'] = N results.append(result) return pd.DataFrame(results, columns=['heur', 'run', 'N', 'best_x', 'best_y', 'neval']) # In[16]: results = pd.DataFrame() mutation = CauchyMutation(r=0.75, correction=Correction(tsp)) crossover = UniformMultipoint(1) for N in [1, 2, 3, 5, 10, 20, 30, 100]: res = experiment_go(of=tsp, maxeval=maxeval, num_runs=NUM_RUNS, N=N, M=N*3, Tsel1=0.1, Tsel2=1, mutation=mutation, crossover=crossover) results = pd.concat([results, res], axis=0) # In[17]: # (well-known performance criteria from previous classes) def rel(x): return len([n for n in x if n < np.inf])/len(x) def mne(x): return np.mean([n for n in x if n < np.inf]) def feo(x):
y # ## 1. Random mix (baseline class) # In[6]: from heur_go import Crossover co_rnd = Crossover() co_rnd.crossover(x, y) # ## 2. Uniform n-point crossover # In[7]: from heur_go import UniformMultipoint co_uni = UniformMultipoint(4) co_uni.crossover(x, y) # ## 3. Random combination # In[8]: from heur_go import RandomCombination co_comb = RandomCombination() co_comb.crossover(x, y) # # Demonstration # In[9]: from heur_go import GeneticOptimization
from heur_go import Crossover, UniformMultipoint, RandomCombination # In[26]: x = dj.generate_point() y = dj.generate_point() print(x) print(y) # In[27]: Crossover().crossover(x, y) # In[28]: UniformMultipoint(1).crossover(x, y) # In[29]: RandomCombination().crossover(x, y) # They work as expected. # Finally, let's run GO: # In[30]: from heur_go import GeneticOptimization # In[31]:
# ## 1. Random mix (baseline class) # In[6]: from heur_go import Crossover co_rnd = Crossover() co_rnd.crossover(x, y) # ## 2. Uniform n-point crossover # In[7]: from heur_go import UniformMultipoint co_uni = UniformMultipoint(4) co_uni.crossover(x, y) # ## 3. Random combination # In[8]: from heur_go import RandomCombination co_comb = RandomCombination() co_comb.crossover(x, y) # # Demonstration # In[9]: