Nous définissons ici le nombre d'ile à utiliser ainsi que le niveau de lissage des courbes.
In [1]:
N=3
A=1000
OPS=['1swap (0)','1swap (1)','1swap (2)','1swap (3)']
Puis quelques routines…
In [2]:
import pandas as pd
In [3]:
import matplotlib as mpl
mpl.rc('figure', figsize=(10, 8))
In [7]:
%%script /Dev/dim/release/application/TSP/tsp -h
Nous lançons le test suivant: DIM auquel s'applique le problème du TSP avec les paramétres:
Nous lançons ici l'algorithme DIM utilisant le problème du TSP avec le jeu de paramètres définis ci-dessus.
In [8]:
%%script /Dev/dim/release/application/TSP/tsp --monitorPrefix=/tmp/tsp_uniform_test_result --operator0=1swap --operator1=1swap --operator2=1swap --operator3=1swap -G=10000 --tspInstance=/Dev/dim/release/application/TSP/benchs/ali535.tsp --nislands=4
In [9]:
!head /tmp/tsp_uniform_test_result_monitor_*
Nous récupérons l'ensemble des résultats générés par l'exécution de l'algorithme dont chaque ligne est indexé par une pair « DateTime » correspondant à la date de l'enregistrement de la ligne dans le fichier de résultat et « migration » correspondant au numéro de migration. Nous créeons également la variable « mig_set » qui correspond à l'ensemble des résultats utilisant uniquement comme indice « migration ».
In [18]:
data_set = [pd.read_csv('/home/candan/Dev/dim/release/application/TSP/result_monitor_%d' % i, index_col=['DateTime','migration'], parse_dates='DateTime') for i in range(N)]
mig_set = [data_set[i].reset_index(0) for i in range(N)]
Nous illustrons ci-dessous l'actractivité sans et avec le cumul des valeurs.
In [19]:
attractiveness = pd.concat([pd.concat([mig_set[j]['P%dto%d' % (j,i)] for j in range(N)],axis=1).sum(axis=1) for i in range(N)],axis=1)
attractiveness.rename(columns=dict(zip(attractiveness.columns,OPS)), inplace=True)
fig, axes = subplots(nrows=2,ncols=2)
for affinity, ax in [(1,axes[0,0]), (10,axes[0,1]), (100,axes[1,0]), (1000,axes[1,1])]:
attractiveness[::affinity].plot(ax=ax, title="smoothing = %d" % affinity).set_ylabel('nb individuals')
attractiveness.cumsum().plot(title='sum of cumul').set_ylabel('cumul')
Out[19]:
In [20]:
nbindis = pd.concat([mig_set[i]['nb_individual_isl%d' % i] for i in range(N)], axis=1)
nbindis.rename(columns=dict(zip(nbindis.columns,OPS)), inplace=True)
nbindis_max = nbindis.max(axis=1); nbindis_max.name = 'nbindis max'
nbindis_avg = nbindis.mean(axis=1); nbindis_avg.name = 'nbindis avg'
#nbindis = nbindis.join(nbindis_max).join(nbindis_avg)
fig, axes = subplots(nrows=2,ncols=2)
for affinity, ax in [(1,axes[0,0]), (10,axes[0,1]), (100,axes[1,0]), (1000,axes[1,1])]:
nbindis[::affinity].plot(ax=ax, title="smoothing = %d" % affinity).set_ylabel('nb individuals')
[ax.set_ylabel('nb individuals') for ax in nbindis[::A].plot(subplots=True, title="smoothing = %d" % A)]
nbindis.cumsum().plot(title='sum of cumul').set_ylabel('cumul of nb individuals')
Out[20]:
In [21]:
fig, ax = subplots()
ax.set_ylabel('nb individuals')
nbindis.boxplot(ax=ax)
Out[21]:
In [22]:
nbindis.describe()
Out[22]:
In [23]:
bests = pd.concat([mig_set[i]['best_value_isl%d' % i] for i in range(N)], axis=1)
bests.rename(columns=dict(zip(bests.columns,OPS)), inplace=True)
bests_max = bests.max(axis=1); bests_max.name = 'bests max'
bests_avg = bests.mean(axis=1); bests_avg.name = 'bests avg'
#bests = bests.join(bests_max).join(bests_avg)
bests[::].plot().set_ylabel('fitness')
Out[23]:
In [17]:
nbindis_bests_max = nbindis.join(bests_max).set_index('bests max')
fig, axes = subplots(nrows=2,ncols=2)
for affinity, ax in [(1,axes[0,0]), (10,axes[0,1]), (100,axes[1,0]), (1000,axes[1,1])]:
ax = nbindis_bests_max[::affinity].plot(ax=ax, title='smoothing = %d' % affinity)
ax.set_ylabel('nb individuals')
ax.set_xlabel('fitness')
ax = nbindis_bests_max.cumsum().plot()
ax.set_ylabel('cumul of nb individuals')
ax.set_xlabel('fitness')
Out[17]:
In [17]: