J'ai un problème qui peut être réduit à un problème d'affectation. (Dans une question précédente, j'ai découvert comment procéder.)
Ce qui signifie que nous avons un ensemble d'agents et un ensemble de tâches ainsi qu'une fonction de coût . Nous devons trouver une affectation afin que le coût total soit minime.c ( i , j )
L' algorithme hongrois peut trouver une solution optimale dans au moins . Ce qui me semble bien.
Mon nouveau problème est: il y a un nombre de jours donné. Je dois résoudre le problème d'affectation pour chaque jour afin que chaque tâche soit effectuée tous les jours et qu'aucun agent n'effectue la même tâche deux fois .
Ce que j'ai essayé: nous pourrions exécuter l'algorithme hongrois séparément pour chaque jour et limiter le nombre de combinaisons possibles en fonction du résultat de la journée précédente. Mais cela nous poserait des problèmes certains des derniers jours, où il sera très probablement impossible de trouver une solution viable.
Une autre idée est d'intégrer en quelque sorte la recherche locale pour changer les décisions prises la veille. Mais je pense que nous ne pouvons pas compter sur cela.
Les cas de problème auxquels je devrai faire face se situeront quelque part . La matrice de coût aura beaucoup de mêmes valeurs (par exemple, principalement 1 ou infini, seulement 2 ou 3). Ainsi, pendant l'algorithme hongrois, il y a beaucoup d'espace pour créer différentes solutions optimales pour une seule journée.C ( i , j )
Je serais heureux d'entendre des idées ou des conseils sur la façon de trouver une bonne solution au problème. Merci d'avance.
la source
Réponses:
Il y a un moyen d'y parvenir en temps polynomial. Je vais esquisser l'algorithme (dans l'ordre inverse ... faites l'étape 2 en premier et l'étape 1 en deuxième).
si nous pouvons trouver un ensemble de paires agent-tâche ( i , j ) telles que chaque tâche est dans exactement k paires, chaque agent est dans exactement k paires, et aucune paire n'apparaît plus d'une fois, alors nous pouvons trouver k affectations qui couvrent ensemble ces n k paires agent-tâche. Nous le faisons en utilisant à plusieurs reprises un algorithme de correspondance bipartite maximale pour trouver une correspondance parfaite dans le graphique bipartite correspondant, et en supprimant cette affectation du graphique. Le théorème du mariage de Hall garantit que nous pouvons le faire.n k ( i , j ) k k k n k
Il existe de nombreux algorithmes qui peuvent résoudre le flux à moindre coût ; c'est un cas particulier de programmation linéaire. Pour votre problème de taille, l'algorithme que je dessine ne doit pas seulement être polynomial, mais aussi pratique.
la source