J'enseigne un cours sur la méta-heuristique et j'ai besoin de générer des exemples intéressants de problèmes combinatoires classiques pour le terme projet. Concentrons-nous sur le TSP. Nous nous attaquons aux graphiques de dimension et plus. J'ai bien sûr essayé de générer un graphique avec une matrice de coûts avec des valeurs prises à partir d'un U aléatoire ( 0 , 1 ) , et j'ai découvert que (comme prévu) l'histogramme du coût du chemin (dessiné en échantillonnant un grand nombre de chemins aléatoires) a une distribution normale très étroite ( μ est 100 mais σ est d'environ 4). Cela signifie, à mon avis, que le problème est très facile, car la plupart des chemins aléatoires seront inférieurs à la moyenne et le chemin de coût minimum est très proche d'un chemin aléatoire.
J'ai donc essayé l'approche suivante: Après avoir généré la faites une longue marche aléatoire autour du graphique et au hasard (Bernoulli avec p = 0,5 ) doublez ou divisez par deux la valeur du bord. Cela tend à abaisser toutes les valeurs, pour finalement atteindre zéro, mais si je fais juste le bon nombre d'étapes, je peux obtenir une distribution avec μ autour de 2 et σ autour de 1 .
Ma question est, d'abord, est-ce même une bonne définition d'un problème intéressant ? Idéalement, je voudrais une instance qui soit hautement multimodale (pour les fonctions de voisinage les plus courantes), et qui a très peu de chemins près de la valeur minimale, de sorte que la plupart des solutions aléatoires seront très loin de l'optimum. La deuxième question est, étant donné cette description, comment puis-je générer des instances avec de telles caractéristiques?
la source
Réponses:
Une approche générale pour générer des instances plus difficiles est la suivante:
Cette approche est dérivée des idées générales en cryptographie, où nous voulons créer des problèmes à sens unique de trappe: où le problème est difficile à résoudre sans la connaissance de la trappe secrète, mais avec la connaissance de la trappe secrète, le problème devient très facile. Il y a eu de nombreuses tentatives pour intégrer des trappes secrètes dans une variété de problèmes difficiles (tout en préservant la dureté du problème même après l'ajout de la trappe), avec des degrés de succès mitigés. Mais cette approche générale semble pouvoir fonctionner, à vos fins.
Les exemples de problèmes qui en résultent peuvent être difficiles , mais seront-ils intéressants , d'un point de vue pratique? Je ne sais pas. Me bat. Ils me semblent assez artificiels, mais que sais-je?
Si votre objectif principal est de sélectionner des instances problématiques qui sont pratiquement pertinentes et représentatives des applications réelles du TSP, ma suggestion serait d'adopter une approche totalement différente. Au lieu de cela, commencez par étudier les applications du TSP dans le monde réel, puis recherchez des instances représentatives de ces problèmes et convertissez-les en leur instance de problème TSP correspondante - de sorte que vous travaillez avec des instances de problème dérivées d'un problème du monde réel.
la source
une approche qui vous donne souvent un contrôle élevé sur la nature des solutions est la conversion d'un problème NP complet à un autre. vous définissez maintenant «intéressant» dans votre question de manière statistique, mais une autre approche intéressante consiste à utiliser des problèmes classiques sur le terrain. mon préféré est l'affacturage / SAT. il est trivial de trouver soit des nombres "lisses" avec beaucoup de facteurs, soit des nombres premiers avec seulement deux "facteurs" (un et le premier). créer l'instance SAT pour résoudre l'affacturage, et les solutions sont les facteurs (en fait permutations de facteurs, mais aussi qui n'est pas difficile à compter à l'avance).
selon cette approche, il existe une définition naturelle des cas «intéressants» - durs qui ne peuvent pas être résolus en temps P. et cette approche est garantie de produire des instances dures pour la factorisation de nombres non lisses, sinon elle résoudrait une question primordiale en théorie de la complexité, à savoir la dureté de la factorisation .
puis, éventuellement convertir à votre problème, dans ce cas TSP. pour remplir cette réponse, il serait bien d'avoir une conversion directe SAT vers TSP, pensez qu'ils sont là-bas, mais je ne les connais pas. cependant, voici quelques références sur la factorisation vers SAT dans cette question: réduire le problème de factorisation d'entier en un problème NP complet
si vous n'aimez pas l'affacturage, il peut être préférable de créer d'abord les instances dans SAT pour diverses raisons. vous pouvez commencer avec des instances SAT aléatoires réglées pour se centrer sur le point de transition facile-difficile-facile, etc. ou vous pouvez travailler à partir d' instances matérielles DIMACS , générées par la communauté. ou créer d'autres "programmes" logiques dans SAT.
la source