Génération de problèmes d'optimisation combinatoire intéressants


9

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 4200U(0,1)μ 100σ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 .U(0,1)p=0.5μ2σ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?


3
Rechercher des bibliothèques de références TSP, comme étudiées en salle d'opération (par exemple, rechercher des travaux sur TSP par Applegate et al., Par exemple ici )?
Neal Young

2
Il y a le TSPLIB avec de nombreuses instances.
adrianN

Merci, j'ai vérifié le lien et son utile, mais ma question concerne la génération d'instances non pas parce que je veux résoudre une instance spécifique, mais plutôt parce que je cherche un aperçu de ce qui fait de bons problèmes combinatoires, un aperçu qui peut être étendu plus tard à d'autres problèmes que TSP.
Alejandro Piad


1
@Alejandro, Le problème de la clique cachée pourrait être un exemple de ce que vous recherchez. En outre, vous pouvez rechercher des recherches sur les instances aléatoires de satisfaction considérées comme difficiles.
Neal Young

Réponses:


6

Une approche générale pour générer des instances plus difficiles est la suivante:

  • Commencez avec une instance de problème aléatoire.
  • Incorporer une "porte dérobée cachée": choisissez au hasard une bonne solution (une solution qui sera probablement bien meilleure que toute solution qui existe déjà) et modifiez l'instance de problème pour incorporer de force cette solution dans l'instance de problème.

U(0,1)U(0,c)c<1; réduire le poids existant; ou modifier l'arête existante avec une probabilité fixe). Cette procédure d'ajustement garantit que la solution optimale sera, avec une forte probabilité, la visite spéciale que vous avez sélectionnée. Si vous avez de la chance et que vous sélectionnez une intégration raisonnable, il ne sera pas aussi facile de reconnaître où vous avez caché la solution spéciale.

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.


J'aime beaucoup cette approche, en effet très proche de ce que j'essayais de trouver, et semble à peu près adaptable à différents problèmes. Ma motivation initiale était de créer des problèmes de test pour les étudiants, donc même si je reçois les problèmes réels, mais cela me sert bien pour cette situation plutôt artificielle (essayer de noter les algorithmes des étudiants). Dans tous les cas, je chercherai à l'adapter également à mes besoins de recherche, mais cela nécessitera un examen plus approfondi, comme vous le dites, pour déterminer si les instances ainsi créées sont suffisamment représentatives. Merci beaucoup, vous avez obtenu mon +1 et mon acceptation.
Alejandro Piad du

3

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.


1
J'aime l'approche de conversion, bien que vous ne fournissiez pas d'autres liens spécifiquement liés au TSP, mais de toute façon merci pour l'idée, je vais l'explorer plus en profondeur. Tu as mon +1.
Alejandro Piad

1
@alejandro thx ok voici un lien à ce sujet. voir par exemple à partir de la diapositive 28 ici [cours de premier cycle!], CMSC 451: SAT, coloration, cycle hamiltonien, diapositives TSP Par: Carl Kingsford . conversion SAT → cycle hamiltonien (TSP). il peut y avoir des approches de conversion plus efficaces (moins de frais généraux) ou avec d'autres aspects adaptés dans la littérature si c'est ce qui est souhaité. j'espère en savoir plus sur votre travail, peut-être répondre ici ou sur mon blog si vous le souhaitez
vzn

1
J'ai vérifié le pdf, très haut niveau mais assez compréhensible. Bien que pour l'instant j'ai obtenu ce dont j'ai besoin avec @DW réponse, votre approche me semble très intéressante. Je vais devoir l'essayer par moi-même. J'avais déjà vu la réduction (sur un cours de premier cycle sur la complexité) mais je n'avais pas pensé à une implémentation réelle de celle-ci spécifiquement pour créer des instances dures. J'ai un intérêt à long terme pour l'optimisation et la métaheuristique, et l'un de mes domaines d'intérêt concerne la création de problèmes de référence intéressants. BTW, juste vérifié votre blog, reviendra à coup sûr !!!
Alejandro Piad
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.