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, z
est 0 pour tous moins de 1 et 1 pour 1. avec cet taskcost_bin_constraint
objectif 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.