Пример #1
0
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
Пример #2
0
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
Пример #3
0
# 
# * 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{}_'
Пример #4
0
    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):
Пример #5
0
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
Пример #6
0
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]:
Пример #7
0
# ## 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]: