Nous définissons ici le nombre d'ile à utiliser ainsi que le niveau de lissage des courbes.
In [150]:
N=4
A=1000
OPS=['1swap','2swap','shift','2-opt']
Puis quelques routines…
In [4]:
import pandas as pd
In [5]:
import matplotlib as mpl
mpl.rc('figure', figsize=(10, 8))
In [11]:
%%script ./tsp -h
Nous lançons le test suivant: DIM auquel s'applique le problème du TSP avec les paramétres:
In [12]:
%%script /Dev/dim/release/application/TSP/tsp --monitorPrefix=/tmp/tsp_test_result --operator0=1swap --operator1=2swap --operator2=shift --operator3=2opt -G=10000 --tspInstance=/Dev/dim/release/application/TSP/benchs/ali535.tsp --nislands=4
In [13]:
!head /tmp/tsp_test_result_monitor_*
In [8]:
data_set = [pd.read_csv('/tmp/tsp_test_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 [159]:
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[159]:
In [168]:
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[168]:
In [149]:
fig, ax = subplots()
ax.set_ylabel('nb individuals')
nbindis.boxplot(ax=ax)
Out[149]:
In [166]:
nbindis.describe()
Out[166]:
In [155]:
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[::A].plot().set_ylabel('fitness')
Out[155]:
In [167]:
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[167]: