Algorithmes pour un problème d'affectation généralisée plusieurs à plusieurs


20

Je n'arrive pas à trouver de littérature sur les algorithmes qui peuvent être utilisés pour résoudre un problème d'affectation généralisée plusieurs à plusieurs (GAP), c'est-à-dire des modèles où non seulement plus de tâches peuvent être assignées à un agent, mais plusieurs agents peuvent également être assigné à une tâche (les AP un à un et un à plusieurs sont discutés dans un article de Pentico). Je ne connais pratiquement rien des problèmes d'affectation, mais j'ai rencontré un problème comme celui-ci au cours de mes recherches et j'aimerais en savoir plus sur la façon de les résoudre. Est-il possible qu'un tel BAP plusieurs à plusieurs soit connu sous un autre nom, ou y a-t-il une raison différente pour laquelle si peu de documentation à ce sujet peut être trouvée?

Pentico, D. Problèmes d'affectation: enquête sur le Golden Anniversary . Journal européen de recherche opérationnelle (2007); 176 (2): 774-793.


1
Salut GerritJan. Bienvenue chez Scicomp! :) Connaissez-vous l'heuristique lagrangienne pour le problème d'affectation généralisé? sciencedirect.com/science/article/pii/S0898122110002609 ou irma-international.org/viewtitle/58969 ou crcnetbase.com/doi/abs/10.1201/9781420010749.ch48 ?
Paul

1
Il me semble que le cas de l'attribution de portions d'une tâche à plusieurs agents peut être modélisé, au moins dans les cas où les coûts sont répartis linéairement, en traitant la tâche comme s'il s'agissait plutôt de plusieurs sous-tâches. Sans plus de détails, il est difficile de savoir comment vos problèmes pourraient être plus «généraux» que les problèmes d'affectation généralisés. L' article de Wikipeida a une bonne exposition et des liens vers quelques références sur le sujet.
hardmath

Merci, @Paul. J'examinerai les documents, bien qu'ils semblent être assez compliqués à mon œil non averti. Là encore, je soupçonne que le problème est compliqué, et je devrai probablement faire quelques simplifications. hardmath, mon problème est essentiellement celui de la distribution d'énergie dans un réseau: les nœuds d'approvisionnement et de demande doivent être appariés en utilisant les connexions (pondérées) entre eux, de la manière la plus optimale, avec une utilisation minimale de l'offre pour répondre à toutes les demandes. Bien sûr, des contraintes supplémentaires peuvent être utilisées, comme la capacité maximale sur les connexions, etc.
Gerrit

1
@GerritJan: C'est un problème np-difficile, il faudra donc un schéma d'approximation. Si vous avez besoin d'une bonne approximation, votre algorithme peut être un peu complexe.
Paul

2
@GerritJan: Cela signifie que la solution «optimale» exacte ne peut être garantie qu'en vérifiant toutes les configurations possibles. Ces solutions possibles se développent (au moins) de façon exponentielle au fil du temps, rendant même des problèmes de taille relativement modestes pratiquement impossibles à résoudre exactement dans un laps de temps raisonnable.
Paul

Réponses:


1

Votre problème ne semble pas être "que la somme des" agents "doit fournir exactement une portion discrète d'énergie ou rien pour chaque demande ...", non? Ou tu ne m'as pas compris. Je vais donc essayer de mieux décrire mon problème, aussi parce que j'ai trouvé une solution.

Dans mon problème, j'ai un ensemble d'agents où chacun a un budget de certaines ressources, qui peuvent partager le coût des tâches, qui devraient être "exécutées" 1 fois ou non (plusieurs-à-plusieurs-affectation sans avoir besoin de "exécuter" chaque tâche). Cela signifie: la somme des solutions partielles d'agents pour la tâche x doit être inférieure ou égale au coût de la tâche x. L'objectif est de trouver l'ensemble de tâches ayant le plus de valeur que les agents peuvent payer.

Je travaille avec un logiciel gams, je le décris donc dans le style gams: définir un agent, t le coût du paramètre de tâches (t), la valeur (t) des ressources du paramètre (a)

variable positive y (a, t) (non-int), partie de l'agent a pour le coût de la tâche t objectif:

maxvalue =e= sum((a,t), value(t) * y(a,t) / cost(t) );
agentresource_max_constraint(a).. sum(t, y(a,t)) =l= resources(a);
taskcost_max_constraint.. sum(a, y(a,t)) =l= cost(t);

Au moment où j'écrivais, j'avais une solution mais je ne savais pas comment séparer les solutions de tâches partielles. Mais maintenant, j'ai découvert que je peux construire une contrainte avec un

variable binaire z(t)

taskcost_bin_constraint z(t) =e= sum(a, y(a,t)) / cost(t);

sum(a, y(a,t)) / cost(t)dans la formulation de l'équation est quelque chose entre 0 et 1 et par cette contrainte, zest 0 pour tous moins de 1 et 1 pour 1. avec cet taskcost_bin_constraintobjectif serait:

maxvalue =e= sum(t, value(t) * z(t));

Je me demandais mais cela fonctionne et me donne de meilleures solutions sous la contrainte, pour construire une tâche complète ou non.

Peut-être que vous pouvez également ajouter une telle contrainte? Une contrainte pour répondre exactement aux demandes, exprimée dans une expression avec une valeur entre 0 et 1.


1

Il existe un algorithme de recuit déterministe qui résout le problème d'affectation un à un ou de manière équivalente le problème de partition de la matrice dyadique.

Cependant, au lieu d'utiliser des valeurs entières [0, 1], on peut utiliser des valeurs fractionnaires (de sorte que l'algorithme reste le même) ou même l'étendre pour gérer plus d'une affectation (en ajoutant une boucle interne et, par conséquent, la matrice devient un tableau hyper-dimensionnel ou tenseur)

Le document est ici: http://www.researchgate.net/publication/2382666_Pairwise_Data_Clustering_by_Deterministic_Annealing/file/d912f50c75945d835b.pdf

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.