Minimiser la variation totale d'une séquence de choix discrets

8

Ma configuration est quelque chose comme ceci: j'ai une séquence d'ensembles d'entiers Ci(1in), avec |Ci| relativement petit - de l'ordre de quatre ou cinq articles pour tous i. Je veux choisir une séquencexi(1in) avec chaque xiCi de telle sorte que la variation totale (soit 1 ou 2, c'est à dire i=1n1|xixi+1| ou i=1n1(xixi+1)2) est minimisé. Bien qu'il semble que le choix pour chaquexi est «local», le problème est que les choix peuvent se propager et avoir des effets non locaux et donc le problème semble intrinsèquement mondial par nature.

Ma principale préoccupation est dans un algorithme pratique pour le problème; en ce moment, j'utilise des méthodes de recuit basées sur la mutation de courtes sous-séquences, et bien qu'elles devraient être correctes, il semble que je devrais pouvoir faire mieux. Mais je suis également intéressé par la complexité abstraite - mon intuition serait que la version de requête standard ('existe-t-il une solution de variation totalek? ') serait NP-complet via une réduction d'un problème de contrainte comme 3-SAT mais je ne vois pas vraiment la réduction. Tout pointeur sur une étude précédente serait le bienvenu - cela semble être un problème si naturel que je ne peux pas croire qu'il n'ait pas été examiné auparavant, mais mes recherches n'ont jusqu'à présent rien trouvé de tel.

Steven Stadnicki
la source
Bonne question! Juste une question de clarification: la durée dexi est n, mais devez-vous choisir un élément dans chaque Ci? Ou est-il acceptable d'avoir un certain nombre d'ensembles parmi lesquels vous ne choisissez pas du tout?
Juho
@mrm Il doit y avoir un élément de chaque Ci - le xs sont directement indexés à partir de 1n tout comme le Cs sont.
Steven Stadnicki

Réponses:

4

Voici un programme dynamique. Suppose queCi={Ci1,,Cim} pour tous i[n]pour plus de clarté; ce qui suit peut être adapté au travail si leCiont des cardinalités différentes. LaisserCost(i,j) être le coût minimum d'une séquence sur le premier i ensembles, se terminant par Cij. La récursivité suivante décritCost:

Cost(1,j)=0,1jmCost(i,j)=mink=1m(Cost(i1,k)+|C(i1)kCij|) ,2in,1jm.

Le coût minimum global est minj=1mCost(n,j); l'ordre réel des choix peut être déterminé en examinant les argmins en cours de route. Le runtime estO(nm).

facture
la source
J'ai essayé d'améliorer la clarté de votre réponse à la fois dans la mise en forme et la présentation; veuillez vérifier que je n'ai pas gâché les choses. Ce serait bien si vous incluiez un argument expliquant pourquoi ce que vous proposez est correct.
Raphael
Compte tenu de la réponse de Nicholas , celle-ci est similaire à l'algorithme Bellman-Ford, adapté au problème en question.
Raphael
Les deux réponses sont vraiment excellentes (et comme Raphael le note, très similaires), mais bien que j'aime la large applicabilité de l'autre, je préfère vraiment celle-ci pour son application directe à ma question particulière. Je vous remercie!
Steven Stadnicki
4

Il semble que cela puisse être résolu en calculant simplement le chemin le plus court dans un graphique acyclique dirigé. Le raisonnement est que votre fonction objectif minimise la distance totale entre les "voisins" sélectionnés dans vos ensemblesC={C1,,Cn}.

Construire un ngraphique en plusieurs étapes G=(i=1nVi,E) où chacun vVi correspond à un élément unique xCi. Pour chaqueuVi,vVi+1, ajoutez un bord dirigé (u,v) le coût étant soit le 1 ou 2 distance.

Ajoutez maintenant un sommet source s avec des bords à 0 V1 et un sommet d'évier t avec des bords à 0 coût de Vn. Étant donné queg est un DAG et les deux fonctions de distance forcent les coûts de bord à être non négatifs, vous pouvez calculer le chemin le plus court dans O(V+E)avec tri topologique et programmation dynamique (similaire à la description ici ).

Nicholas Mancuso
la source