Shalmoli Gupta a déjà expliqué que le problème général est NP-difficile, j'ai donc décidé de rechercher si des cas particuliers sont résolubles polynomiaux. Finalement, j'ai trouvé une solution au cas particulier des ensembles qui représentent un arbre, ou plus généralement, un ordre série parallèle par inclusion de sous-ensemble avec tous les ensembles incomparables disjoints.
Une propriété qui facilite les choses est que la liste des ensembles est fermée sous l'intersection. Si , alors, il existe un ordre optimal dans lequel s 1 précède s 2 . Nous pouvons supposer WLOG que l'ordre optimal est une extension linéaire de l'ordre partiel donné par l'inclusion de sous-ensemble.s1⊆s2s1s2
Étant donné que tous les sous-ensembles d'un ensemble apparaissent devant lui dans l'ordre, cela signifie que le montant ajouté à la somme cumulée par un ensemble donné est fixe, quel que soit son emplacement. Si est la liste des ensembles, le coût supplémentaire d'un ensemble est le nombre d'éléments s qui ne sont pas dans un sous - ensemble de s qui apparaît dans S . Si le même ensemble apparaît plusieurs fois en S , nous pouvons arbitrairement en choisir un pour commencer et laisser les autres coûter 0.SSS
Cela signifie que le problème est équivalent au problème du temps d'achèvement pondéré minimum dans la planification d'une seule machine avec des contraintes de priorité. Dans ce problème, étant donné un ensemble de travaux avec des poids et des temps t j , et un ordre partiel sur les travaux P , nous souhaitons trouver un ordre des travaux qui minimise le temps total d'achèvement pondéré, c'est-à-direwjtjP
∑ni=1wji(∑ik=1tjk)
sous réserve des contraintes de priorité . Le problème de jeu cumulatif minimal avec les jeux fermés d'intersection peut être transformé en ceci en créant un travail pour chaque jeu, où chaque travail a un poids 1, un temps égal au coût incrémentiel défini ci-dessus, et P est l'ordre donné par l'inclusion de sous-ensemble.PP
Il s'avère que ce problème est également NP-Hard pour le général . Cependant, certaines formes spéciales de P peuvent être résolues en temps polynomial.PP
Cet article donne un algorithme pour le cas des ordres parallèles en série P (qui inclut également le cas important des arbres). Malheureusement, je n'ai pas pu accéder à ce document, j'ai donc décidé d'essayer de le réinventer indépendamment. Voici ce que j'ai trouvé.O(nlogn)P
Afin de résoudre ce problème, plusieurs observations sont nécessaires.
Tout d'abord, en l'absence de contraintes de précédence, la solution optimale est de simplement trier les jobs dans l'ordre croissant de . Par souci de simplicité, je ferai référence à cela comme la valeur du travail, abrégéev(j). Notez que le tri étantO(nlogn), il est impossible de faire mieux que cette complexité.tjwjv(j)O(nlogn)
Règle 1 Soit et b des emplois tels que a < b ∈ P et b couvre a. Si v ( a ) < v ( b ) , alors nous pouvons supprimer la contrainte a < b sans affecter l'ordre optimal ou la valeur objective.aba<b∈Pv(a)<v(b)a<b
Supposons que apparaisse devant a dans l'ordre optimal du problème relaxé. Puisque b couvrait a l'origine, cela signifie que tous les travaux entre b et a dans la nouvelle commande sont incomparables avec a et b. Mais puisque b a une valeur supérieure à a, nous pouvons diminuer la valeur objective en échangeant b et a, une contradiction.ba
De même, nous pouvons supprimer la contrainte dans le cas où tant que nous nous assurons qu'après tri par valeur, nous rompons les liens en consultant les relations de priorité du problème d'origine (simplifié). Cela garantit que la solution optimale trouvée pour le problème détendu est également une solution optimale au problème d'origine.v(a)=v(b)
Par conséquent, chaque fois que b couvre a et , nous pouvons simplifier le problème en supprimant la contrainte a < b .v(a)≤v(b)a<b
Règle 2 Supposons que nous savons que b suit immédiatement après a dans une solution optimale. Nous pouvons fusionner a et b en un nouveau nœud c avec et t c = t a + t b , tout en contractant le poset P de manière appropriée.wc=wa+wbtc=ta+tbP
La valeur objective optimale du nouveau problème diffère par une constante de la valeur objective d'origine (spécifiquement ), mais cette constante ne dépend pas de l'ordre et donc l'ordre optimal n'est pas affecté. Nous pouvons récupérer une solution optimale à l'ancien problème en prenant une solution optimale au nouveau problème et en remplaçant c par a b .watbcab
Règle 3 Supposons que dans une solution optimale à une instance de problème, vienne immédiatement avant b et v ( a ) > v ( b ) . Supposons maintenant que nous créons une instance de problème plus grande en ajoutant de nouveaux travaux avec le nouveau poset formé à partir d'une composition série ou parallèle avec l'original. Il y aura toujours une solution optimale au problème plus large où a vient juste avant b .abv(a)>v(b)ab
Supposons le contraire. Que la solution optimale contienne . Puisque P a été formé par une composition parallèle en série, nous savons que tous les x i sont incomparables avec a et b . Fusionnez tous les nœuds x i en un nouveau nœud x ′ en utilisant la règle 2. Considérons maintenant v ( x ′ ) . Si v ( x ′ ) ≤ v ( a ) alors on peut échangera,x1,x2,…,bPxiabxix′v(x′)v(x′)≤v(a) et a sans augmenter la valeur objective. De même, si v ( x ′ ) ≥ v ( b ) , on peut échanger x ′ et b . Par conséquent, v ( a ) < v ( x ′ ) < v ( b ) . Mais v ( a ) > v ( b ) , une contradiction.x′av(x′)≥v(b)x′bv(a)<v(x′)<v(b)v(a)>v(b)
En utilisant la règle 2 et la règle 3, nous pouvons déjà obtenir un algorithme simple mais sous-optimal . Puisque P est un ordre parallèle en série, supposons que l'entrée contient une représentation arborescente de P où chaque nœud représente la composition en série ou la composition parallèle, et les feuilles sont des tâches individuelles. Nous pouvons trouver une solution optimale avec une traversée en précommande de l'arbre en maintenant l'invariant que la solution optimale pour chaque sous-problème est une chaîne en ordre croissant de valeur.O(n2)PP
Supposons que soit la composition en série de sous-problèmes avec les posets P 1 et P 2 . Soit les solutions optimales ordonnant C 1 et C 2 . La solution optimale à P est clairement la concaténation de ces chaînes. Cependant, il est possible que le premier travail en C 2 ait une valeur inférieure à celle du dernier travail en C 1 . Afin de maintenir l'invariant que la solution est une chaîne triée, nous utilisons la règle 3 + la règle 2 pour fusionner les points de terminaison tant qu'ils ne sont pas dans l'ordre trié.PP1P2C1C2PC2C1
Si est plutôt une composition parallèle, nous prenons simplement les chaînes triées S 1 et S 2 et les fusionnons en une nouvelle chaîne triée. Grâce à l'invariant, c'est valable.PS1S2
Malheureusement, cet algorithme est . Afin d'obtenir un algorithme O ( n l o g n ) , nous devons calculer les chaînes paresseusement en utilisant la règle 1.O(n2)O(nlogn)
Plus précisément, si un sous-problème ne contient que des nœuds où les contraintes de priorité sont les mêmes que l'ordre des valeurs, alors nous pouvons complètement oublier les contraintes de priorité et ne regarder que les valeurs. Ceci est assuré par le même invariant qui a assuré que les solutions sont des chaînes triées dans l'algorithme précédent.
Au lieu de calculer une chaîne triée pour chaque sous-problème, nous représentons la solution optimale à un sous-problème sous la forme d'une paire de tas de Fibonacci, un tas min et un tas max, contenant tous les deux les travaux du sous-problème. Cela signifie que nous pouvons supprimer l'élément minimum ou maximum de la solution en temps logarithmique.
PP
Pour une composition parallèle, nous fusionnons simplement les paires de tas. Le nouveau segment min est la fusion du segment min de chaque sous-problème et de même avec le segment max. Notez que les tas de Fibonacci peuvent être fusionnés en temps constant.
Une fois que nous avons une paire de segments représentant la solution à l'ensemble du problème, nous pouvons trouver l'ordre réel de la solution en sortant le segment min jusqu'à ce qu'il soit vide. Après cela, nous annulons toutes les substitutions de la règle 2 pour obtenir une solution au problème d'origine.
O(nlogn)