Commit a8d5535b authored by Simon de Givry's avatar Simon de Givry
Browse files

update TPs with mark information and extend TP2 with problem decomposition

parent f6a57034
No preview for this file type
......@@ -39,10 +39,9 @@ Les différents solvers utiles à ce TP ainsi que leur documentation dont celle
\texttt{PATH=\$PATH:/tmp/tpgraph1/solvers:/tmp/tpgraph1/solvers/gecode:.}\\
\texttt{LD\_LIBRARY\_PATH=/tmp/tpgraph1/solvers/gecode:.}\\
\texttt{export LD\_LIBRARY\_PATH}\\
Envoyez vos réponses sous forme d'un document LibreOffice et vos codes à \texttt{simon.de-givry@inrae.fr}.
Envoyez vos réponses et vos codes à \texttt{simon.de-givry@inra.fr}.
\section{Tour de France et du monde en concorde}
\section{Construction de tournées d'aéroports (10 pts)}
Allez dans le dossier \texttt{/tmp/tpgraph1/tsp}.
......@@ -51,11 +50,11 @@ Allez dans le dossier \texttt{/tmp/tpgraph1/tsp}.
Le fichier \texttt{france.geo} contient les coordonnées latitude/longitude en degré des principaux aéroports français.
\subsubsection{Obtention d'un minorant à l'aide de l'arbre couvrant}
\subsubsection{Obtention d'un minorant à l'aide de l'arbre couvrant (2 pts)}
Modifier le fichier python \texttt{airports.py} pour calculer un minorant du tour des aéroports français. Pour cela, utiliser la fonction \texttt{minimum\_spanning\_edges} dans {\sf networkx}. Donner la valeur du minorant trouvé.
\subsubsection{Obtention d'un majorant à l'aide de l'heuristique nearest neihbor}
\subsubsection{Obtention d'un majorant à l'aide de l'heuristique nearest neihbor (4 pts)}
Construire un tour approché en utilisant l'heuristique {\em nearest neihbor}. Il s'agit de partir d'un sommet quelconque puis d'ajouter successivement le plus proche voisin non visité jusqu'à inclure tous les sommets. Donner la valeur du majorant trouvé.
......@@ -64,7 +63,7 @@ Commandes pour visualiser la solution~:\\
\texttt{awk -f sol2plot.awk france.geo francenn.sol > francenn.plot}\\
\texttt{gnuplot francenn.plot}
\subsubsection{Comparaison avec des solvers exacts et approchés}
\subsubsection{Comparaison avec des solvers exacts et approchés (2 pts)}
Comparer en terme de coût et de temps de calcul le solver de recherche locale {\sf LKH} contre une méthode exacte utilisant la programmation linéaire {\sf concorde}. Donner les résultats de votre comparaison. Que concluez vous par rapport à la solution trouvée dans la section précédente ?
......@@ -77,7 +76,7 @@ Commandes pour visualiser les solutions~:\\
\texttt{awk -f sol2plot.awk france.geo france.sol > france.plot}\\
\texttt{gnuplot france.plot}
\subsection{Tournée mondiale}
\subsection{Tournée mondiale (2 pts)}
Le fichier \texttt{airports.geo} contient les coordonnées latitude/longitude en degré des principaux aéroports internationaux. Sachant la vitesse de croisière du concorde à 2 158 km/h, en déduire une estimation du temps nécessaire pour survoler tous les aéroports (sans limite de carburant).
......@@ -90,29 +89,29 @@ Commandes pour visualiser les solutions~:\\
\texttt{awk -f sol2geo.awk airports.geo airports.sol > tour.geo}\\
\texttt{gnuplot world.plot}
\section{Construction de routes aériennes directes}
\section{Construction de routes aériennes (10 pts)}
Allez dans le dossier \texttt{/tmp/tpgraph1/coloring}. Les fichiers \texttt{flightsA01.txt} et \texttt{flightsB01.txt} contiennent des listes de vols directs de British Airways. On cherche à attribuer un niveau de vol à chaque route aérienne (correspondant à un ensemble de vols effectuant le même trajet) de manière que si deux routes se croisent alors elles utilisent un niveau différent. Visualiser les routes avec les commandes \texttt{gnuplot flightsA01.plot} et \texttt{gnuplot flightsB01.plot}.
\subsection{Nombre chromatique du graphe d'intersections}
\subsection{Nombre chromatique du graphe d'intersections (6 pts)}
En utilisant le script python2 \texttt{flights.py} et le théorème de Brooks, donner un minorant et un majorant du nombre chromatique. Utiliser les fonctions networkx \texttt{graph\_clique\_number} et \texttt{degree}.
En utilisant le script python2 \texttt{flights.py} et le théorème de Brooks, donner un minorant et un majorant du nombre chromatique pour chaque liste de vols. Utiliser les fonctions networkx \texttt{graph\_clique\_number} et \texttt{degree}.
%%Comparer avec l'heuristique DSATUR (\texttt{greedy\_color}).
Générer ensuite un problème au format {\sf minizinc} de coloration du graphe d'intersections avec $k$ couleurs. Résoudre ce problème à l'aide du solver {\sf gecode}. Trouver le nombre chromatique pour les deux scénarios. Prouver leur optimalité.
Générer ensuite un problème au format {\sf minizinc} de coloration du graphe d'intersections avec $k$ couleurs. Résoudre ce problème à l'aide du solver {\sf gecode}. Trouver le nombre chromatique pour les deux scénarios. Prouver leur optimalité. Expliquer.
Commandes pour excécuter le solver (par ex., avec $k=10$ couleurs)~:\\
\texttt{python2 flights.py airports.geo flightsA01.txt 10}\\
\texttt{../solvers/gecode/mzn-gecode -s flightsA01.mzn}
\subsection{Amélioration des performances de la résolution}
\subsection{Amélioration des performances de la résolution (2 pts)}
Ajouter dans le modèle {\sf minizinc} des contraintes \texttt{alldifferent} pour l'ensemble des cliques du graphe d'intersection (fonction \texttt{nx.find\_cliques}). Est ce que cela permet de réduire le nombre de noeuds de l'arbre de recherche pour la preuve d'optimalité ? le temps de résolution ? Tester sur les deux scénarios et donner vos résultats.
Exemple de code {\sf minizinc} pour une clique sur les sommets $(6,17,19,57,63)$~:\\
\texttt{constraint alldifferent([x6, x17, x19, x57, x63]);}.\\
Comparer avec un modèle n'ajoutant qu'une seule clique maximale par sommet.
\subsection{Minimisation des écarts au niveau de vol optimal}
\subsection{Minimisation des écarts au niveau de vol optimal (2 pts)}
On suppose que les avions préfèrent le niveau 0 ou sinon un niveau proche. Modéliser la somme des écarts au niveau de vol optimal comme une somme sur les variables du problème. Minimiser cette somme. Donner votre meilleur résultat.
......
No preview for this file type
......@@ -41,13 +41,13 @@ Décompactez le dossier \texttt{tpgraph2} dans \texttt{/tmp} puis ouvrez un term
Les différents solvers utiles à ce TP ainsi que leur documentation dont celle de la librairie python {\sc networkx} d'algorithmes sur les graphes se trouvent dans le dossier \texttt{solvers}. Lancer les commandes suivantes pour avoir accès à ces solvers~:\\
\texttt{chmod -R 755 solvers}\\
\texttt{PATH=\$PATH:/tmp/tpgraph2/solvers:.}\\
Envoyez vos réponses sous forme d'un document LibreOffice et vos codes à \texttt{simon.de-givry@inrae.fr}.
Envoyez vos réponses et vos codes à \texttt{simon.de-givry@inra.fr}.
\section{Problème de couverture non-rigide quadratique \label{qap}}
\section{Problème de couverture non-rigide quadratique \label{qap} (5 points)}
\vspace*{-1cm}
\begin{figure}[h]
\center\includegraphics[width=0.5\textwidth]{matchingR}\\
\center\includegraphics[width=0.3\textwidth]{matchingR}\\
\caption{Couverture non-rigide d'un ensemble de points source (ronds verts à gauche) vers un autre ensemble de points destination ayant subits une translation et une légère déformation (carrés rouges à droite).\label{matchingR}}
\end{figure}
......@@ -69,41 +69,41 @@ Ce modèle graphique peut également s'écrire comme un programme linéaire en
&& x_{ik}, y_{ikjl} \in \{0,1\} \quad \forall i,j,k,l, i<j
\end{eqnarray}
Résoudre l'instance \texttt{matching0} du dossier \texttt{tpgraph2} avec les solvers {\sc toulbar2} et {\sc glpk}. Donner vos résultats. Comparer les minorants produits par les deux approches en pré-traitement avant de faire le Branch-and-Bound.\\
\texttt{./solvers/toulbar2 -m=2 -s=3 matching0.cfn}\\
%%%%%Optimum: 1936235 in 874 backtracks and 2053 nodes ( 46 removals by DEE) and 1.18223 seconds.
%%Initial lower and upper bounds: [1045389, 34567989] 96.976%
%%Optimum: 1936293 in 328 backtracks and 808 nodes ( 146 removals by DEE) and 0.462 seconds.
(Q2.1 3pts) Résoudre l'instance \texttt{matching0} du dossier \texttt{tpgraph2} avec les solvers {\sc toulbar2} et {\sc glpk}. Donner vos résultats. Comparer les minorants produits par les deux approches en pré-traitement avant de faire la recherche Branch-and-Bound.\\
\texttt{./solvers/toulbar2 -m=2 -d: -f: -dee: -s=3 matching0.cfn}\\
%%%%%Optimum: 1936293 in 1450 backtracks and 3295 nodes and 1.055 seconds.
%%Initial lower and upper bounds: [1034675, 34567989] 97.007%
\texttt{glpsol --cpxlp matching0\_support.lp}\\
%%* 25285: objval = 1.156334169e+06 infeas = 1.509270139e-13 (113)
%%mip = not found yet >= 1.156277422e+06
Sachant que le problème de couverture quadratique décrit ci-dessus peut inclure le problème d'affectation vu en cours, peut on en conclure que ce problème de couverture non-rigide est polynomial (dans la classe $P$) ?
(Q2.2 1pt) Sachant que le problème de couverture quadratique décrit ci-dessus peut inclure le problème d'affectation vu en cours, peut on en conclure que ce problème de couverture non-rigide est polynomial (dans la classe $P$) ?\\
(Q2.3 1pt) Dans quelle situation les deux modélisations proposées ci-dessus peuvent ne pas avoir de solution ?
%%%lorsque le nombre de cibles est inferieur au nombre de sources
\section{Détection de trajectoires d'avions}
\section{Détection de trajectoires d'avions (15 points)}
A partir du site \url{opensky-network.org}, nous avons collecté une liste de coordonnées longitude/latitude d'avions survolant la Bretagne ($\pm 2\degree$ depuis l'aéroport de Rennes $-1.43\degree$ lat./$48.04\degree$ lon.) à différents instants temporels. On se propose de chercher un couplage optimal (comme décrit en section \ref{qap}) entre instants successifs. Allez dans le dossier \texttt{/tmp/tpgraph2/opensky} et tapez la commande suivante pour voir la position des avions aux temps $t=0$, $t=1$ et $t=3$ minutes~:\\
\texttt{gnuplot opensky.plot}\\
Construire le problème de couplage correspondant à la transition de $t=0$ à $t=1$ à l'aide du script \texttt{opensky.py}. Donner son optimum et analyser le résultat.\\
(Q3.1 3pts) Construire le problème de couplage correspondant à la transition de $t=0$ à $t=1$ à l'aide du script \texttt{opensky.py}. Donner son optimum et analyser son résultat graphiquement.\\
\texttt{python opensky.py 0.dat 1.dat 0to1.cfn}\\
\texttt{../solvers/toulbar2 0to1.cfn -m=2 -s=3 -w=0to1.sol}\\
\texttt{../solvers/toulbar2 0to1.cfn -m=2 -d: -f: -dee: -s=3 -w=0to1.sol}\\
\texttt{awk -f ./sol2plot.awk 0.dat 1.dat 0to1.sol > 0to1.plot}\\
\texttt{gnuplot opensky0to1.plot}\\
%%%%Optimum: 27883 in 23 backtracks and 74 nodes ( 0 removals by DEE) and 0.334858 seconds.
%%Optimum: 28.075 in 22 backtracks and 92 nodes ( 0 removals by DEE) and 0.485 seconds.
Construire le problème de couplage correspondant à la transition de $t=1$ à $t=3$. Quel problème rencontrez vous ? Modifiez le script python pour le résoudre en ajoutant une valeur spéciale dans les domaines traduisant l'absence de couplage. Analyser vos résultats. Note~: voir la contrainte \texttt{wamong} dans la documentation CFNformat.pdf de {\sc toulbar2}.\\
(Q3.2 6pts) Construire le problème de couplage correspondant à la transition de $t=1$ à $t=3$. Quel problème rencontrez vous ? Modifiez le script python pour le résoudre en ajoutant une valeur spéciale dans les domaines traduisant l'absence de couplage. Donner l'optimum trouvé et analyser votre résultat graphiquement. Note~: voir la contrainte \texttt{wamong} dans la documentation CFNformat.pdf de {\sc toulbar2}.\\
\texttt{python opensky.py 1.dat 3.dat 1to3.cfn}\\
\texttt{../solvers/toulbar2 1to3.cfn -m=2 -s=3 -w=1to3.sol}\\
\texttt{../solvers/toulbar2 1to3.cfn -m=2 -d: -f: -dee: -s=3 -w=1to3.sol}\\
\texttt{awk -f ./sol2plot.awk 1.dat 3.dat 1to3.sol > 1to3.plot}\\
\texttt{gnuplot opensky0to1to3.plot}\\
%%%%%Optimum: 50615 in 10649 backtracks and 32150 nodes ( 3948 removals by DEE) and 120.939 seconds.
%%Optimum: 50.769 in 32524 backtracks and 79564 nodes ( 64586 removals by DEE) and 312.759 seconds.
%%Using random restarts -L option:
%%New solution: 50.769 (579 backtracks, 1364 nodes, depth 28)
%%Proving optimality:
%%No solution in 8478 backtracks and 21671 nodes ( 18994 removals by DEE) and 165.926 seconds.
Comparer les résultats avec une approche utilisant un programme linéaire (comme décrit en section \ref{qap}) en le résolvant avec le solver {\sc glpk}.
%%%%%Optimum: 50.769 in 13774 backtracks and 35397 nodes ( 0 removals by DEE) and 91.093 seconds.
(Q3.3 3pts) Dans le cas particulier précédent (transition de $t=1$ à $t=3$), il est possible de décomposer le problème à résoudre en plusieurs sous-problèmes plus simples en fonction de la taille de la liste source. Expliquer comment. Utiliser la commande suivante pour les résoudre en parallèle. Observer la distribution des temps de résolution des sous-problèmes.\\
\texttt{parallel.sh -r "time ../solvers/toulbar2 1to3.cfn -m=2 -d: -f: -dee: -v=-1 -x=,*=JOKERVALUE" 0 1 2 3 ...}\\
(Q3.4 3pts) Comparer les résultats avec une approche utilisant un programme linéaire (comme décrit en section \ref{qap}) en le résolvant avec le solver {\sc glpk}.
\end{document}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment