
2/6
Étape 1 : Analyse du problème
Question A :
Déterminez l’architecture qui permet de faire évoluer les trois phases fonctionnelles
(acquisition, algorithmique et affichage) indépendamment les unes des autres.
Question B :
En pensant aux états dans lequel se trouve votre système (avant l’acquisition des données,
après l’acquisition et avant la résolution, après la résolution sachant que l’affichage ne
modifie pas le système), définissez l’interface exportée par chaque partie du système pour
effectuer les trois phases fonctionnelles.
Pour la question B, une des personnes du projet peut travailler à l’aide de diagrammes UML
(c’est simplement une option parmi d’autres), pendant que les autres réfléchissent à ce qui
peut bouger entre les différentes phases et comment ce sera exploité.
Il faut voir que lors de l’évolution de votre projet, l’acquisition des données pourra être
partiellement découplée de la recherche du meilleur trajet, et qu’il est assez dur d’anticiper sur
le couplage acquisition/résolution. Certaines structures de données correspondant au résultat
de l’acquisition des n villes dans le plan sont plus adéquates que d’autres pour
l’algorithmique. Ce couplage n’est pas forcément visible au niveau de l’interface que vous
définirez.
L’analyse architecturale du projet étant terminée, voici une présentation succincte
d’algorithmes de type Branch & Bound permettant une résolution exacte du problème du
voyageur de commerce. Cette présentation peut être sautée par le lecteur dans un premier
temps. Vous pouvez y revenir lorsque vous implanterez les algorithmes. Nous présentons
deux algorithmes différents. Noter que pour l’étape 2, vous pouvez implanter un algorithme
de recherche de type Branch & Bound, comme un algorithme plus approché que vous aurez
fait ou trouvé sur le Web. Dans ce dernier cas, vous pouvez consacrer l’étape 3 à remplacer
l’algorithme approché par un algorithme de recherche assez poussé parmi les deux que nous
vous présentons.
Représentation des villes
Nous représentons l’ensemble des villes placées sur un plan par une matrice de coût. Cette
matrice stocke la distance entre deux points.
matrice de
coût
A
BCD
E
F
G
H
I
J
A
B
C
D
...
I
J
ABCD ... I J
247 76
2
4
7
7
6
26 77
2
6
7
7
455
4
5
5
... ... ... ... ... ...
...
...
...
...
...
...
35
3
52
2
La matrice de coût peut être symétrique ou non : Si elle est symétrique, cela signifie que
d(x,y) = d(y,x) quelles que soient les villes concernées.
La matrice de coût peut représenter une distance euclidienne, reflétant la propriété
d(x,y)+d(y,z)
≥
d(x,z).