<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tsp | Dr. Goulu</title><link>https://drgoulu.com/tags/tsp/</link><atom:link href="https://drgoulu.com/tags/tsp/index.xml" rel="self" type="application/rss+xml"/><description>Tsp</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Fri, 22 Nov 2013 00:00:00 +0000</lastBuildDate><image><url>https://drgoulu.com/media/icon_hu_eee4a95885829ab2.png</url><title>Tsp</title><link>https://drgoulu.com/tags/tsp/</link></image><item><title>Le postier chinois de Königsberg</title><link>https://drgoulu.com/2013/11/22/le-postier-chinois-de-konigsberg/</link><pubDate>Fri, 22 Nov 2013 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2013/11/22/le-postier-chinois-de-konigsberg/</guid><description>&lt;h3 id="les-ponts-de-königsberg"&gt;Les ponts de Königsberg&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;(Ce paragraphe d&amp;rsquo;introduction est une traduction de l&amp;rsquo;article &amp;ldquo;
&amp;rdquo; paru sur Plus Maths)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Au 18ème siècle, la ville que nous connaissons sous le nom de Kaliningrad s&amp;rsquo;appelait Königsberg et se trouvait en Prusse. Comme beaucoup d&amp;rsquo;autres grandes villes, Königsberg se trouve sur une rivière, la Pregel. Elle comportait deux îles et il y avait sept ponts reliant les différentes terres. Un fameux casse-tête de l&amp;rsquo;époque était de trouver un chemin à travers la ville qui passait une seule fois par chaque pont. Plusieurs personnes disaient avoir trouver un tel chemin, mais lorsqu&amp;rsquo;on leur demandait de le reproduire, personne n&amp;rsquo;y arrivait. En 1735 le mathématicien suisse 
 expliqua pourquoi : il démontra qu&amp;rsquo;un tel chemin n&amp;rsquo;existait pas.&lt;/p&gt;
&lt;p&gt;La solution d&amp;rsquo;Euler est étonnamment simple, une fois que vous considérez le problème sous le bon angle. Le truc est d&amp;rsquo;éliminer toute information inutile. Le chemin parcouru sur terre n&amp;rsquo;a pas d&amp;rsquo;importance. La forme de ces terres n&amp;rsquo;a pas d’importance, ni le trajet de la rivière ou la forme des ponts. Donc vous pouvez simplement représenter chaque terre par un point et chaque pont par une ligne liant deux points. Vous n&amp;rsquo;avez pas du tout besoin de respecter la géographie : aussi longtemps que vous ne modifiez pas la connectivité des points, lequel est connecté auxquels, vous pouvez déformer votre dessin autant que vous voulez sans changer le problème.&lt;/p&gt;
&lt;figure class="aligncenter" style="max-width: 677px; width: 100%;"&gt;&lt;a href="https://fr.wikipedia.org/wiki/Probl%C3%A8me_des_sept_ponts_de_K%C3%B6nigsberg" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2013/images/ed585263c3bf0d48232cff6a3fd994f1_hu_fdec267c6b269e63.webp" srcset="https://drgoulu.com/posts/2013/images/ed585263c3bf0d48232cff6a3fd994f1_hu_fdec267c6b269e63.webp 320w, https://drgoulu.com/posts/2013/images/ed585263c3bf0d48232cff6a3fd994f1_hu_90ba7eb01d921104.webp 480w, https://drgoulu.com/posts/2013/images/ed585263c3bf0d48232cff6a3fd994f1_hu_3f5596c9107fb13c.webp 677w" sizes="(max-width: 640px) 100vw, 677px" alt="Transformation du problème (source : Wikipédia)" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;/a&gt;&lt;figcaption&gt;Transformation du problème (source : Wikipédia)&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Une fois que vous avez représenté le problème de cette façon, ses caractéristiques sont bien plus simples à voir. Après avoir un peu joué avec, vous constaterez ceci : en arrivant sur un point, et à moins que ce soit la dernière étape de votre chemin, vous devrez repartir par une ligne différente de celle d&amp;rsquo;arrivée puisque c&amp;rsquo;est la règle du jeu. Ca signifie que chaque point à l&amp;rsquo;exception du départ et de l&amp;rsquo;arrivée de votre chemin doit avoir un nombre pair de lignes le connectant aux autres : pour chaque lien entrant il doit y en avoir un pour en repartir.&lt;/p&gt;
&lt;p&gt;Donc pour qu&amp;rsquo;un chemin qui passe une et une seule fois par chaque ligne existe, il ne doit pas y avoir plus de deux points avec un nombre impair de lignes connectées. En fait il ne peut y avoir que deux points impairs ou pas du tout. Dans le premier cas les deux points impairs sont forcément les points de départ et d&amp;rsquo;arrivée, alors que dans le second, le chemin est un circuit fermé. Or dans le problème de Königsberg, tous les points ont un nombre impair de connexions, donc un chemin ne passant qu&amp;rsquo;une seule fois par chaque pont est impossible.&lt;/p&gt;
&lt;p&gt;Ce résultat d&amp;rsquo;Euler marque le début de la 
, l&amp;rsquo;étude de réseaux de points connectés par des liens. Euler a d&amp;rsquo;ailleurs aussi démontré que si la condition mentionnée plus haut est respectée, à savoir que le nombre de points avec un nombre impairs de liens est soit deux soit zéro, alors il existe toujours un chemin qui passe par chaque lien exactement une fois.&lt;/p&gt;
&lt;h3 id="voyageur-de-commerce-et-postier-chinois"&gt;Voyageur de commerce et postier chinois&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;(à partir de là c&amp;rsquo;est du pur Dr. Goulu)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A part dans les casse-tête, on trouve très souvent en pratique des problèmes pouvant être résolus grâce à la théorie des graphes. Par exemple, 
 avec le 
 (TSP), j&amp;rsquo;avais eu l&amp;rsquo;occasion de le rencontrer dans l&amp;rsquo;optimisation des mouvements d&amp;rsquo;une machine à percer les circuits électroniques.&lt;/p&gt;
&lt;p&gt;Dans le TSP, le but est de trouver le circuit (fermé) dit &amp;ldquo;
&amp;rdquo; passant par tous les points d&amp;rsquo;un graphe, et dont le coût soit minimum, en pratique celui dans lequel la distance totale à parcourir (ou mieux encore le temps nécessaire) est minimum. A Königsberg, un voyageur de commerce aurait l&amp;rsquo;embarras du choix d&amp;rsquo;un circuit lui permettant de visiter ses clients sur les 4 terres, mais s&amp;rsquo;il devait s&amp;rsquo;acquitter de péages différents selon les ponts, un petit calcul lui serait nécessaire. Pour des problèmes de taille réelle, trouver le minimum absolu est horriblement difficile voire impossible, mais il existe des méthodes itératives qui convergent assez rapidement vers des solutions raisonnablement proches de l&amp;rsquo;optimum.&lt;/p&gt;
&lt;p&gt;&lt;figure class="aligncenter" style="max-width: 640px; width: 100%;"&gt;&lt;a href="http://www.sciencedirect.com/science/article/pii/S0924013604006727" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2013/images/d7f65bac716c02c91473d8bc005d8224_hu_aa4022c7ff6d0ead.webp" srcset="https://drgoulu.com/posts/2013/images/d7f65bac716c02c91473d8bc005d8224_hu_aa4022c7ff6d0ead.webp 320w, https://drgoulu.com/posts/2013/images/d7f65bac716c02c91473d8bc005d8224_hu_ed143e875e988ae4.webp 480w, https://drgoulu.com/posts/2013/images/d7f65bac716c02c91473d8bc005d8224_hu_78dd70128190f388.webp 640w" sizes="(max-width: 640px) 100vw, 640px" alt="Etapes de l&amp;#39;optimisation TSP du trajets d&amp;#39;une perceuse de circuits imprimés [[1]](#ref-1)" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;/a&gt;&lt;figcaption&gt;Etapes de l&amp;rsquo;optimisation TSP du trajets d&amp;rsquo;une perceuse de circuits imprimés&lt;/figcaption&gt;&lt;/figure&gt;
Plus récemment j&amp;rsquo;ai rencontré le 
, ainsi nommé parce qu&amp;rsquo;il s&amp;rsquo;agit d&amp;rsquo;un problème que connaissent tous les postiers, mais qui a été étudié mathématiquement par un chinois, Mei-Ko Kwan en 1962. Il s&amp;rsquo;agit de trouver le plus court circuit qui permette à un postier de parcourir toutes les rues de sa zone au moins une fois. Il est clair que s&amp;rsquo;il existe un
 permettant de ne passer qu&amp;rsquo;une et une seule fois par chaque ligne, ce circuit serait en même temps la solution du postier chinois. Mais quand ce n&amp;rsquo;est pas le cas, il faut forcément parcourir plusieurs fois certaines rues.&lt;/p&gt;
&lt;p&gt;Si le postier doit desservir des échoppes situées sur chacun des ponts de Königsberg, combien de traversées de ponts au total sont nécessaires à sa tournée? Arrive-t-on à réduire ce nombre en employant deux postiers? Et si on construisait un nouveau pont? (Pas deux, ce serait trop facile.)&lt;/p&gt;
&lt;p&gt;En gros j&amp;rsquo;ai ce problème avec environ 200 rues dispersées dans plusieurs villages, plusieurs postiers, et pour couronner le tout il y a du vent : il est plus facile de parcourir les rues dans un sens que dans l&amp;rsquo;autre. Mais avec Python,
 et un peu de lecture
, je devrais m&amp;rsquo;en sortir&amp;hellip;&lt;/p&gt;
&lt;h3 id="références"&gt;Références&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;E. Aoyama, T. Hirogaki, T. Katayama, and N. Hashimoto, &amp;ldquo;Optimizing drilling conditions in printed circuit board by considering hole quality&amp;rdquo; J. Mater. Process. Technol., vol. 155, pp. 1544–1550, 2004.&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;E. Benavent, A. Corberan, I. Plana, and J. M. Sanchis, &amp;ldquo;Min-Max k-vehicles windy rural postman problem&amp;rdquo; Networks, vol. 54, no. 4, pp. 216–226, Dec. 2009
\[[pdf](http://www.uv.es/sestio/TechRep/tr09-07.pdf)\]&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-3"&gt;&lt;/span&gt;Grötschel, M., &amp;amp; Yuan, Y.&amp;ldquo;Euler, Mei-Ko Kwan, Königsberg, and a Chinese Postman&amp;rdquo;, 2012 
\[[pdf](http://www.math.uiuc.edu/documenta/vol-ismp/16_groetschel-martin-yuan-ya-xiang.pdf)\]&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-4"&gt;&lt;/span&gt;Grötschel, M. (Ed.) &amp;ldquo;Optimization Stories (Extra Volume)&amp;rdquo;, 2012, 21st International Symposium on Mathematical Programmng (p. 460). Berlin: Documenta Mathematica: Journal der Deutschen Mathematiker-Vereinigung.  ISBN 3936609586 / 978-3936609585 (Excellent recueil d&amp;rsquo;articles sur l&amp;rsquo;histoire de la théorie des graphes) 
\[[pdf](https://www.zib.de/groetschel/publications/OptimizationStories.pdf)\]&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Optimisation de la Joconde</title><link>https://drgoulu.com/2010/06/14/optimisation-de-la-joconde/</link><pubDate>Mon, 14 Jun 2010 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2010/06/14/optimisation-de-la-joconde/</guid><description>&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://drgoulu.com/posts/2010/images/10c3a606506bb2299f7b51b61b0ea16f_hu_8bcd780715f0223d.webp 320w, https://drgoulu.com/posts/2010/images/10c3a606506bb2299f7b51b61b0ea16f_hu_315b0c3a1d12812b.webp 400w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2010/images/10c3a606506bb2299f7b51b61b0ea16f_hu_8bcd780715f0223d.webp"
width="400"
height="400"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
Voici enfin l&amp;rsquo;occasion de consacrer un article marrant au célèbre mais barbant &amp;ldquo;
&amp;rdquo;. J&amp;rsquo;ai réalisé une applet en processing qui dessine Mona Lisa avec une seule ligne brisée zig-zaguant entre 100'000 points sans jamais s&amp;rsquo;entrecouper. De plus la ligne n&amp;rsquo;a ni début ni fin, elle forme un cycle. Autrement dit, on peut dessiner la Joconde comme un cercle déformé, sans lever le crayon&amp;hellip; Voici ce que ça donne ( c&amp;rsquo;est publié aussi 
:&lt;/p&gt;
\[processing\]&lt;p&gt;TSPart.pde&lt;/p&gt;
\[/processing\]&lt;p&gt;Le dessin a initialement été produit par 
, un prof de maths allemand qui étudie l&amp;rsquo; &amp;ldquo;Opt Art&amp;rdquo;, l&amp;rsquo;utilisation de techniques d&amp;rsquo;optimisation dans l&amp;rsquo;art. La
est assez simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;on prend une image en &amp;ldquo;niveaux de gris&amp;rdquo;&lt;/li&gt;
&lt;li&gt;on dispose un grand nombre N de points sur l&amp;rsquo;image, resserrés dans les zones sombres, plus espacés dans les zones claires. 
a eu l&amp;rsquo;idée d&amp;rsquo;utiliser l&amp;rsquo;algorithme &amp;ldquo;
&amp;rdquo;
qui fait ça de manière remarquable.&lt;/li&gt;
&lt;li&gt;Ensuite, il suffit de résoudre le problème du voyageur de commerce à N villes pour obtenir le circuit le plus court entre les N points, donc sans intersection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Quand vous lisez &amp;ldquo;il suffit de..&amp;rdquo;  , il faut vous méfier. C&amp;rsquo;est souvent sous cette formule lapidaire qu&amp;rsquo;on cache l&amp;rsquo;os. En réalité, le problème du voyageur de commerce (&amp;ldquo;Travelling Salesman Problem&amp;rdquo; en anglais, TSP dans la suite) est un problème &amp;ldquo;NP-complet&amp;rdquo;, un de ceux qui nécessite un nombre &amp;ldquo;non polynomial&amp;rdquo; d&amp;rsquo;opérations pour sa résolution, &amp;ldquo;non polynomial&amp;rdquo; étant un euphémisme. En l&amp;rsquo;occurence, il faut en principe mesurer la longueur des N! (N
&amp;hellip;)
possibles passant par les N points pour déterminer lequel est le plus court. Au delà de N=20, on oublie.&lt;/p&gt;
&lt;p&gt;Mais le TSP a un intérêt certain pour beaucoup d&amp;rsquo;applications pratiques dans lesquelles N est bien plus grand, ce qui justifie la recherche d&amp;rsquo;algorithmes efficaces mêmes s&amp;rsquo;ils ne fournissent pas la solution absolument optimale. Le site
est une mine d&amp;rsquo;exemples et d&amp;rsquo;infos sur les progrès de la résolution du TSP. On y trouve également
, un solveur de TSP open source très performant basé sur la
. Il détient le record du plus gros TSP résolu, pour N=85'500 calculé en  135 années de CPU, mais résout des problèmes raisonnables en un temps qui l&amp;rsquo;est aussi. J&amp;rsquo;ai eu l&amp;rsquo;occasion de m&amp;rsquo;en servir pour optimiser le parcours d&amp;rsquo;une perceuse de circuits imprimés où N valait autour de 1000: quelques minutes de calcul permettent d&amp;rsquo;économiser des secondes de travail par circuit. Il existe d&amp;rsquo;ailleurs un
pour résoudre vos (pas trop gros) problèmes de TSP.&lt;/p&gt;
&lt;p&gt;Pour revenir à la Joconde, elle fait l&amp;rsquo;objet d&amp;rsquo;un petit
car il n&amp;rsquo;est pas sur que le chemin affiché dans l&amp;rsquo;image soit le plus court possible entre les 100'000 points définis par R. Bosch. Ce chemin, calculé par Yuichi Nagata avec Concorde a une longueur de 5'757'191 unités, alors qu&amp;rsquo;on a pu déterminer que le chemin ne peut pas être plus court que 5'757'044 unités. Il est donc possible qu&amp;rsquo;il existe un chemin encore plus court de 0.0026% ! Tout ce qu&amp;rsquo;il vous faut pour le trouver, c&amp;rsquo;est le fichier 
, et touiller un peu le code de Concorde ou de son concurrent 
. Ah, et un superordinateur peut être utile aussi.  Si vous trouvez le chemin le plus court, vous gagnerez la somme mirobolante de $100 !&lt;/p&gt;
&lt;p&gt;&lt;em&gt;edit du 20/9/13&lt;/em&gt; : l&amp;rsquo;applet utilise maintenant Processing.js, mais le chargement des données est très lent&amp;hellip;&lt;/p&gt;
&lt;h3 id="références"&gt;Références:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;Robert Bosch, &amp;ldquo;
&amp;quot;, Math Horizons, February 2006, pages 6&amp;ndash;9.&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;Adrian Secord, &amp;ldquo;
&amp;rdquo;, 2002, Proceedings of 2nd
, Annecy, p 37-43&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>