Identificazione del problema di allocazione

1

Ho una matrice. Ho una lista di persone che devono occupare le celle n1, n2, n3 ecc., Un numero diverso di celle in file differenti. Devo posizionare le persone nelle celle. L'occupazione della stessa cella tra le righe viene considerata come sovrapposizione. La sovrapposizione deve essere ridotta al minimo.

Ho persone che si riferiscono a questo in modo diverso come un problema di ottimizzazione, un problema di allocazione e persino una programmazione lineare.

Devo prima ottenere un consenso su quale è questa classe di problema chiamata.

In secondo luogo, ho bisogno di sapere come dovrebbe essere una soluzione efficiente, in termini di notazione big-o o qualsiasi altra cosa.

Ecco un esempio:

C'è una scheda di 4 x 4 celle. Ci sono molti pezzi ciascuno di un colore (R, G, B). Ogni colore deve riempire un numero di colonne in ogni riga. Un possibile esempio:

      Row1   Row2   Row3   Row4
Red      1      2      3      2
Blue     2      2      0      0
Green    1      0      1      2

Questo è l'input. La disposizione degli input potrebbe essere diversa ma occupa l'intera scheda ... nessuna cella è vuota.

Il conteggio degli stessi pezzi di colore che occupano una COLONNA dovrebbe essere ridotto al minimo. Una possibile (cattiva) disposizione basata sull'input è questa:

    1    2    3    4
1   r    b    b    g
2   r    r    b    b
3   r    r    r    g
4   r    r    g    g

Questo è male perché in realtà massimizza il conteggio dei colori nella stessa colonna. Una disposizione migliore è la seguente:

    1    2    3    4
1   r    b    b    g
2   b    r    r    b
3   g    r    r    r
4   r    g    g    r

La sovrapposizione è inevitabile, ma dovrebbe essere ridotta al minimo e in modo dimostrabile. Non so se c'è solo una soluzione migliore o se ci potrebbero essere molte soluzioni. Anche se ci potrebbero essere molte soluzioni, abbiamo bisogno di inventarne solo una.

Se ci penso di più, sembra una versione allentata del problema delle otto-queens. Mi sto preoccupando perché continuo a vedere la ricorsione e il back-tracking.

MODIFICA 1:

Sto pensando ad una versione rilassata della generazione di puzzle di sudoku.

    
posta Kinjal Dixit 01.08.2012 - 08:30
fonte

3 risposte

1

Devi prima indicare i vincoli per una soluzione valida. Così com'è, la domanda è troppo vaga.

Dato ciò che hai scritto, sicuramente è un problema di "ottimizzazione". Qualsiasi problema in cui si dispone di una serie di soluzioni accettabili e si cerca il migliore o abbastanza buono secondo alcuni criteri è un problema di "ottimizzazione". Ciò non significa molto, ci sono diversi tipi di problemi di ottimizzazione che richiedono un approccio diverso per risolvere.

Anche è un problema di "allocazione", ma questo non ti aiuta molto. In generale tali problemi potrebbero non avere una soluzione polinomiale (alcuni sono NP-completi) e l'euristica utilizzabile dipenderà dai vincoli esatti.

"Programmazione lineare" è un modo per formulare una classe di problemi di ottimizzazione. Probabilmente non può essere usato nel tuo caso, perché la programmazione lineare richiede variabili reali che possono essere variate in un intervallo, ma puoi avere solo qualcuno assegnato alla cella o no, quindi solo le variabili booleane. Probabilmente può essere formulato come "programmazione lineare intera", ma è molto più difficile. La programmazione lineare intera è NP-difficile, ma esistono metodi approssimati ragionevoli.

Potrebbe anche essere possibile formulare il problema come problema di "pianificazione" e utilizzare un algoritmo usato per questo.

    
risposta data 01.08.2012 - 09:22
fonte
0

Non è ovvio come possiamo associare un dato accordo con un punteggio per sapere quanto è buono / cattivo. Ecco un modo basato sul tuo esempio per generare una soluzione, potrebbe essere o non essere ottimale. Primo elenco colori con max. occorrenze nella parte superiore. Quindi, tira gli oggetti dalla cella più in alto verso il basso e poi verso destra quando una colonna è terminata)

    
risposta data 01.08.2012 - 13:16
fonte
0

Penso che una soluzione temporale lineare potrebbe essere possibile. Questo perché il numero di colori e la larghezza della matrice sono fissi. Mi ricorda sia un problema di imballaggio che un problema di colorazione del grafico (entrambi sono NP-Complete).

Considera che la disposizione ottimale per qualsiasi colore assomiglia a una matrice di identità (dove 1 rappresenta quel colore e 0 rappresenta uno degli altri). Quindi organizzi semplicemente in questo modo. Ad esempio, posiziona il primo rosso nella prima colonna. Quindi, per ciascun rosso successivo, posizionalo semplicemente nella colonna successiva (modulo 4). Quindi ripetere questo processo per gli altri due colori. Questa semplice disposizione rotante dovrebbe fornire la soluzione ottimale, credo, poiché minimizza sempre la duplicazione per ogni inserimento.

    
risposta data 03.08.2012 - 06:50
fonte

Leggi altre domande sui tag