Problema di assegnazione per più giorni


10

Ho un problema che può essere ridotto a un problema di assegnazione. (In una domanda precedente ho scoperto come farlo.)

Ciò significa che abbiamo un insieme di agenti e un insieme T di attività, nonché una funzione di costo c ( i , j ) . Dobbiamo trovare un incarico in modo che il costo totale sia minimo.UNTc(i,j)

L' algoritmo ungherese può trovare una soluzione ottimale in almeno . Il che suona bene per me.O(n4)

Il mio nuovo problema è: esiste un determinato numero di giorni. Devo risolvere il problema di assegnazione per ogni giorno in modo che ogni attività venga eseguita ogni giorno e nessun agente svolge la stessa attività due volte .

Cosa ho provato: potremmo eseguire l'algoritmo ungherese separatamente per ogni giorno e limitare il numero di possibili combinazioni in base al risultato del giorno precedente. Ma questo ci metterebbe nei guai in alcuni dei giorni successivi, dove molto probabilmente sarà impossibile trovare una soluzione fattibile.

Un'altra idea è quella di integrare in qualche modo la ricerca locale per cambiare le decisioni prese in un giorno precedente. Ma penso che non possiamo fare affidamento su questo.

Le istanze problematiche che dovrò affrontare saranno da qualche parte nei dintorni . La matrice di costo C ( i , j ) avrà molti stessi valori (ad esempio, principalmente 1 o infinito, solo circa 2 o 3). Quindi durante l'algoritmo ungherese c'è molto spazio per creare diverse soluzioni ottimali per un solo giorno.|UN|=|T|=500C(io,j)

Sarei felice di ascoltare alcune idee o consigliare come trovare una buona soluzione al problema. Grazie in anticipo.


1
Questa è un'ottima domanda! Suggerirei di usare il flusso di costo minimo, il teorema del matrimonio di Hall e la massima corrispondenza bipartita.
Peter Shor,

Risposte:


6

C'è un modo per farlo in tempo polinomiale. Tracciamo l'algoritmo (in ordine inverso ... esegui prima il passaggio 2 e il passaggio 1).

  1. se possiamo trovare un insieme di coppie agente-task ( i , j ), in modo tale che ciascun compito è esattamente k coppie, ogni agente è esattamente k coppie, e nessuna coppia appare più di una volta, allora possiamo trovare k assegnazioni che insieme coprono queste n k coppie agente-task. Lo facciamo utilizzando ripetutamente un algoritmo di corrispondenza bipartita massimo per trovare una corrispondenza perfetta nel corrispondente grafico bipartito e rimuovendo tale assegnazione dal grafico. Il teorema del matrimonio di Hall garantisce che possiamo farlo.nK(io,j)KKKnK

  2. Siamo in grado di trovare il set minimo di nKStK0K0ioj1c(io,j)01(io,j)1

Esistono molti algoritmi che possono risolvere il flusso di costi minimi ; è un caso speciale di programmazione lineare. Per il tuo problema di dimensioni, l'algoritmo che disegno non dovrebbe essere solo polinomiale, ma anche pratico.


Un'ultima domanda: l'algoritmo del flusso di costo minimo nel passaggio 2 (ho scelto l'annullamento del ciclo per iniziare) fornisce una soluzione ottimale. L'algoritmo di matching massimo nel passaggio 1 lo fa per. Questo significa necessariamente che l'intera soluzione è ottimale? Perché, la mia ipotesi era che il problema fosse NP-Complete.
Patrick Schmidt,

1
L'intera soluzione è ottimale. Questa sarebbe una buona domanda da assegnare in un corso di ottimizzazione combinatoria, perché è in qualche modo sorprendente che tu possa farlo.
Peter Shor,
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.