Les algorithmes de temps exponentiel à cas générique sont-ils courants dans les logiciels de production?

11

Je sais que les algorithmes de temps exponentiels devraient généralement être évités mais sont parfois nécessaires. Un cas étant le voyageur de commerce. Ces algorithmes sont-ils courants dans les logiciels de production? Ces cas sont-ils généralement nécessaires ou résultent-ils de travaux urgents? Je comprends que beaucoup peuvent être résolus avec une bonne heuristique. Que fait-on généralement avec ceux qui ne le peuvent pas?

Ingénieur du monde
la source
1
Mon impression est que pour des choses comme le problème du voyageur de commerce, on abandonne l'algorithme du temps exponentiel, et va plutôt avec une bien meilleure heuristique (dans le cas du voyageur de commerce, ils sont assez bons)
soandos
Beaucoup de problèmes sont résolus avec des algorithmes "exponentiels". (TSP, CDS, ILP, etc.) C'est juste que les algorithmes exponentiels ont de bonnes heuristiques, ils fonctionnent donc raisonnablement avec beaucoup de données du monde réel. Une meilleure question pourrait peut-être être: "Quelle est la fréquence des algorithmes à temps exponentiel dans les logiciels de production?"
user541686
Ajusté la question
World Engineer
Le vendeur itinérant est n !, pas exponentiel.
user281377
1
@ user281377: C'est aussi en O (n ^ 2 2 ^ n) donc oui, c'est un problème exponentiel. Ceci est également clair car il peut être mappé sur SAT en temps poly qui peut être résolu en 2 ^ n temps - ce qui fonctionne pour tous les problèmes NP.
Raphael

Réponses:

7

Quelque chose qui n'est pas dans le logiciel de production mais fait sur le logiciel de production est une vérification officielle . Il n'est probablement pas adopté pour la plupart des logiciels clients mais gagne du terrain pour les systèmes embarqués et les pilotes, c'est-à-dire pour les logiciels et les logiciels dont l'exactitude est importante (et exploitable).

Ces problèmes de vérification qui sont réellement calculables (barrière # 1) sont souvent EXPTIME- dur, dans les cas les plus chanceux vous obtenez des problèmes PSPACE -complet (barrière # 2). Les deux classes sont (soupçonnées d'être) plus difficiles que les problèmes NP-complets, ce qui est facile en comparaison. Des problèmes doublement exponentiels sont également facilement obtenus.

Dans ces cas, l'heuristique (dans le sens du résultat final) ne suffit pas car vous avez besoin de résultats précis; vous avez donc besoin de grosses machines et de temps. Il existe des heuristiques (dans le sens d'une sélection alternative) qui conduisent souvent à une durée d'exécution plus courte (c'est-à-dire une exploration intelligente de l'espace de recherche lorsque les états d'erreur sont recherchés) mais dans le pire des cas, l'attente est tout ce que vous pouvez faire. Ou vous pouvez faire une épreuve au crayon et sur papier et la faire vérifier par des machines , ce qui est plus simple sur le plan des calculs.

Raphael
la source
5

Un algorithme couramment utilisé avec une complexité exponentielle dans le pire des cas est la méthode simplex utilisée dans la programmation linéaire . Cependant, quelle est la complexité du cas générique de cette méthode est un problème ouvert. Avec certaines hypothèses spécifiques, c'est polynomial.

vartec
la source
5

Les interprètes de langage de programmation sont pires que le temps exponentiel (dans la longueur de leur entrée, c'est-à-dire dans la longueur du programme qu'ils interprètent), et ils sont assez courants. Un autre exemple est la démonstration automatique de théorèmes / résolution de contraintes / résolution sat / programmation linéaire entière. Et encore un autre exemple est la différenciation symbolique implémentée par exemple dans Maple / Mathematica (bien qu'il soit possible de faire une différenciation symbolique en temps linéaire si vous êtes autorisé à partager des sous-expressions entre les nœuds).

Jules
la source
1

Permettez-moi de prendre l'exemple du problème du voyageur de commerce. J'y ai travaillé plusieurs fois.

Il y a quelques fois où j'ai fait partie d'une équipe qui a écrit une solution pour un problème de voyageur de commerce mais avec quelques paramètres supplémentaires. Par exemple, il pourrait s'agir d'un magasin avec une flotte de techniciens et d'ingénieurs possédant chacun un ensemble de compétences unique. Les destinations apparaissent chaque jour sous forme de demandes de service. Tous les programmes sont en cours de production bien qu'ils aient subi des modifications et une maintenance depuis leur création initiale.

Voilà comment ils fonctionnaient. Chaque ingénieur recevrait tous les jours une liste de choses à entretenir sur un appareil portatif. Lorsqu'ils terminent chaque tâche de service, ils doivent fermer le dossier. Les cas laissés de côté rejoignent les cas qui doivent être programmés pour le lendemain avec une priorité légèrement plus élevée car le client aurait alors exprimé une certaine insatisfaction. Il y avait un grand nombre de raisons pour lesquelles un ingénieur ne voulait pas assister à une affaire. Les problèmes de circulation étaient les plus courants.

Sont-ils courants? Au moins aussi courant que le nombre de demandes de service après-vente émanant des clients. Sans service après-vente, par exemple, il sera difficile de fidéliser les clients et d'en gagner de nouveaux.

Avec de nombreuses boutiques en ligne telles qu'Amazon et d'autres librairies et autres magasins de ce type qui fonctionnent bien dans les affaires, je pense que le vendeur itinérant est plus courant qu'auparavant. En outre, il pourrait y avoir de nombreuses variantes du problème des vendeurs ambulants qui sont enseignées dans les manuels.

vpit3833
la source
Comme le voyageur canadien .
soandos