Algoritmi per un problema di assegnazione generalizzato molti-a-molti


20

Non riesco a trovare alcuna letteratura sugli algoritmi che può essere utilizzata per risolvere un problema di assegnazione generalizzato (GAP) molti-a-molti, vale a dire modelli in cui non solo è possibile assegnare più attività a un agente, ma possono anche essere più agenti assegnato a un compito (gli AP uno-a-uno e uno-a-molti sono discussi in un documento di Pentico). Conosco quasi nulla dei problemi di assegnazione, ma durante la mia ricerca ho riscontrato un problema come questo e vorrei saperne di più su come risolverli. È possibile che un GAP così numeroso sia conosciuto con un altro nome, o c'è una ragione diversa per cui si possono trovare così poche pubblicazioni su di esso?

Pentico, D. Problemi di assegnazione: un'indagine sull'anniversario d'oro . European Journal Of Operational Research (2007); 176 (2): 774-793.


1
Ciao GerritJan. Benvenuto in Scicomp! :) Conosce l'euristica lagrangiana per il problema di assegnazione generalizzato? sciencedirect.com/science/article/pii/S0898122110002609 o irma-international.org/viewtitle/58969 o crcnetbase.com/doi/abs/10.1201/9781420010749.ch48 ?
Paolo

1
Mi sembra che il caso di assegnare parti di un'attività a più agenti possa essere modellato, almeno nei casi in cui i costi sono ripartiti in modo lineare, trattando l'attività come se fosse invece più attività secondarie. Senza ulteriori dettagli è difficile sapere come i tuoi problemi potrebbero essere più "generali" dei problemi di assegnazione generalizzati. L' articolo di Wikipeida ha una buona esposizione e collegamenti a un paio di riferimenti sull'argomento.
Hardmath,

Grazie, Paolo. Esaminerò i giornali, sebbene sembrino piuttosto complicati per il mio occhio non allenato. Ancora una volta, sospetto che il problema sia complicato e probabilmente dovrò fare un po 'di semplificazione. Difficilmente, il mio problema è fondamentalmente quello di distribuire energia in una rete: i nodi domanda e offerta devono essere abbinati usando le connessioni (ponderate) tra loro, nel modo più ottimale, con un uso minimo dell'offerta per soddisfare tutta la domanda. Naturalmente, è possibile utilizzare ulteriori vincoli, come la capacità massima sulle connessioni, ecc.
Gerrit,

1
@GerritJan: è un problema np-difficile, quindi richiederà uno schema di approssimazione. Se hai bisogno di una buona approssimazione, il tuo algoritmo potrebbe essere un po 'complesso.
Paolo

2
@GerritJan: significa che l'esatta soluzione 'ottimale' può essere garantita solo controllando tutte le possibili configurazioni. Queste possibili soluzioni crescono (almeno) esponenzialmente nel tempo, rendendo praticamente impossibili da risolvere in tempi ragionevoli anche problemi di dimensioni relativamente modeste.
Paolo

Risposte:


1

Il tuo problema non sembra essere "che la somma degli" agenti "debba fornire esattamente una porzione discreta di energia o niente per ogni singola domanda ...", giusto? O non mi hai capito. Quindi proverò a descrivere meglio il mio problema, anche perché ho trovato una soluzione.

Nel mio problema, ho una serie di agenti in cui ognuno ha un budget di determinate risorse, che possono condividere il costo dei compiti, che dovrebbero essere "eseguiti" 1 volta o meno (assegnazione da molti a molti senza la necessità di "esegui" ogni attività). Significa: la somma delle soluzioni parziali degli agenti per l'attività x dovrebbe essere inferiore o uguale al costo dell'attività x. L'obiettivo è trovare l'insieme di attività con il maggior valore che gli agenti possono pagare.

Sto lavorando con il software gams, quindi lo descrivo in stile gams: impostare un agent, t task parametro cost (t), valore (t) parametro parametri (a)

variabile positiva y (a, t) (non int), parte dell'agente a per costo del compito t obiettivo:

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);

Come ho scritto, avevo una soluzione ma non sapevo come separare le soluzioni di attività parziali. Ma ora ho scoperto che posso creare un vincolo con a

variabile binaria z(t)

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

sum(a, y(a,t)) / cost(t)nell'equazione la formulazione è qualcosa tra 0 e 1 e con questo vincolo, zè 0 per tutti meno di 1 e 1 per 1. con questo taskcost_bin_constraintobiettivo sarebbe:

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

Mi chiedevo ma questo funziona e mi offre soluzioni migliori sotto il vincolo, per costruire un compito pieno o no.

Forse puoi anche aggiungere un tale vincolo? Un vincolo per soddisfare esattamente le richieste, espresso in un'espressione con valore compreso tra 0 e 1.


1

Esiste un algoritmo di ricottura deterministica che risolve il problema di assegnazione uno a uno o equivalentemente il problema della partizione della matrice diadica.

Tuttavia, invece di utilizzare valori interi [0, 1], è possibile utilizzare valori frazionari (quindi l'algoritmo rimane lo stesso) o addirittura estenderlo per gestire più di un compito (aggiungendo un ciclo interno e, in linea di principio, la matrice diventa un array iper-dimensionale o tensore)

L'articolo è qui: http://www.researchgate.net/publication/2382666_Pairwise_Data_Clustering_by_Deterministic_Annealing/file/d912f50c75945d835b.pdf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.