distribuzione uguale all'interno di un determinato gruppo di utenti

2

Ho un requisito in cui ho una lista di entità e utenti a cui quell'entità può essere assegnata

E1 can be distributed by U1 or U2

E2 must be distributed by U5

E3 can be distributed by U2 or U3 or U4

Ho queste entità 50K e per ciascuna entità potrebbero esserci 1 o più utenti. In caso di 1 utente, la sua clear e entity saranno assegnate solo a quell'utente. In caso di più utenti, può essere assegnato a tutti loro.

Vogliamo distribuirlo in modo tale che ogni utente abbia la stessa quantità di entità. e ci sono minime distribuzioni distorte possibili / inevitabili, inoltre ogni utente potrebbe già possedere alcune entità: U1 ha 2K e U2 ha già già 3K entitis, quindi la distribuzione dovrebbe occuparsi anche di questo fatto.

EDIT 1

Abbiamo già provato una soluzione per andare in sequenza e assegnare un'entità alla volta secondo l'allocazione agli utenti in quel momento, ma producendo risultati distorti, perché stiamo ottenendo utenti con meno allocazioni precedenti ma più allocazione più tardi o viceversa ...

E1 to E25 "must be handled by any of" U1 & U2

E26 to E50 "must be handled by any of" U2 & U3

se andiamo in sequenza, alla fine: U1 ottiene 12 (da E1-E25), U2 ne ottiene 19 (13 da E1-E25 e 6 da E26-E50) & U3 ottiene 19 (da E26-E50). Quindi tutto sommato 50 assegnati. bene. ma guarda i risultati distorti

EDIT2

Perché abbiamo utenti diversi per entità? ci sono più prodotti da distribuire. Alcuni utenti gestiscono più prodotti e alcuni utenti gestiscono un singolo prodotto, ma tutti gli utenti devono essere bilanciati sul carico.

    
posta harishr 03.04.2015 - 07:49
fonte

1 risposta

3

Ciò riporta a ricordi di una Ricerca sulle operazioni che ho frequentato al college molto tempo fa. Potresti voler fare qualche ricerca su google nel problema di assegnazione e Problema di assegnazione generalizzata per alcune informazioni di base e soluzioni più rigorose.

Detto questo, farei quanto segue:

  1. Put all the entities that can be processed by the same set of users into a "bucket". Bucket 1 might contain all the entities that can be processed by U1 or U2. Bucket 2 might contain all the entities that can be processed by U2 or U3. Bucket 3 (not in your examples) might contain all the entities that can only be processed by U4.
  2. Process all the "single entity" buckets (Bucket 3). There are no choices to be made here, and you may as well get this out of the way first. You mentioned that 80% of your entities may fall into this category.
  3. At this point, stop looking at buckets and entities, and process users. Find the user with the least number of entities assigned and have them pick one entity from the most full bucket (bucket with the largest number of entities).
  4. Repeat step 3 until all entities are assigned.

Questo richiederà senz'altro test - mi riservo il diritto di sbagliare: -)

    
risposta data 03.04.2015 - 17:15
fonte

Leggi altre domande sui tag