Questo problema di ottimizzazione combinatoria è simile a qualche problema noto?


10

Il problema è il seguente:

Abbiamo una matrice / griglia di numeri bidimensionali, ognuno dei quali rappresenta qualche "vantaggio" o "profitto". Abbiamo anche due numeri interi fissi e (per "larghezza" e "altezza".) E un numero intero fisso .h nwhn

Vogliamo ora sovrapporre rettangoli di dimensioni sulla griglia in modo tale che la somma totale dei valori delle celle in questi rettangoli sia massimizzata.w × hnw×h

L'immagine seguente è un esempio di una griglia bidimensionale con due di questi rettangoli sovrapposti su di essa (l'immagine non mostra la soluzione ottimale, ma solo una possibile sovrapposizione dove e )n = 2w=h=2n=2

Esempio di griglia

I rettangoli non possono intersecarsi (altrimenti dovremmo solo trovare la posizione ottimale per un rettangolo e quindi mettere tutti i rettangoli in quella posizione.)

Nell'esempio sopra la somma totale dei valori nelle celle sarebbe2+4.2+2.4+3.14+2.31.4+13.1

È simile a qualche problema noto nell'ottimizzazione combinatoria? in modo che io possa iniziare a leggere e provare a trovare il modo di risolverlo.

Qualche altro background per chi è interessato:

Finora le uniche idee che avevo erano o un algoritmo avido (che avrebbe trovato la posizione migliore per il primo rettangolo, quindi avrebbe trovato la loctaion non sovrapposta per il secondo rettangolo ecc.) O alcuni metauristici come algoritmi genetici.

In realtà desidero risolvere questo problema con una griglia che ha circa un milione di celle e decine di migliaia (o addirittura centinaia di migliaia) di rettangoli, anche se non è necessario risolverlo in breve tempo (cioè sarebbe accettabile per l'algoritmo impiegherà ore o addirittura giorni.) Non mi aspetto una soluzione esatta, ma voglio ottenerne una che sia il più buona possibile alla luce di questi vincoli.

Saluti!


(al telefono) sembra che potrebbe essere risolto con la massima corrispondenza in una trasformazione e alcuni vincoli aggiuntivi. Proverò a scrivere più tardi.
Nicholas Mancuso,

Immagino che richiedere l'esatto sia usato a volte significa che un massimo "locale" non viene utilizzato ma un anello attorno ad esso lo è. Sto immaginando una semplice forma a cupola qui, dove la presa "avida" del centro della cupola significa che non puoi adattare tutto attorno ad essa. n - 1nn1
Mark Hurd,

Il mio primo pensiero sarebbe di provare la programmazione dinamica. Numera i quadrati in base alla loro distanza di Manhattan dall'angolo in alto a sinistra. Un sottoproblema è: un numero di un quadrato; un elenco di rettangoli che hai selezionato il cui ordine in alto a sinistra ha un numero inferiore a ; e l'obiettivo è estendere al miglior set possibile di quadrati non sovrapposti aggiungendo un sottoinsieme di quadrati con angoli in alto a sinistra con numeri . È possibile risolvere rapidamente ogni sottoproblema se si dispone della soluzione a tutti i sottoproblemi successivi. L'unica domanda è quanti sottoproblemi dovrai esplorare. L s L ssLsLs
DW

Risposte:


2

La mia ultima formulazione aveva un difetto fatale che avrebbe richiesto una quantità esponenziale di nodi "vincolo".

Un'altra formulazione grafica naturale del problema sarebbe quella di creare un grafico in cui ciascun vertice rappresenta un rettangolo con . Qualsiasi coppia di rettangoli sovrapposti ha un bordo in questo grafico. Risolvendo un set indipendente di peso massimo ponderato abbiamo una soluzione al tuo problema originale. Esistono molti buoni algoritmi euristici e di approssimazione per questo.w r r , r k = nrwrr,rk=n


Questa è la direzione verso la quale mi sto attualmente appoggiando, sperimenterò questo e accetterò la soluzione se è quella che finisco per usare, applausi.
cinquantotto

2

Potresti formularlo come una gigantesca istanza di programmazione lineare a numeri interi (ILP) e quindi applicare un solutore ILP standardizzato (lp_solve, CPLEX, ecc.). Ti daranno la migliore soluzione che riescono a trovare. Date le dimensioni dell'istanza del problema, non so se questo sarà abbastanza efficiente, ma sarebbe facile provarlo.

xrrxr=1rxr=0rcrxrcrrrxr=nxr+xs1r,s


Pensi che questo problema sia NP-difficile? Non sono convinto che non abbia una soluzione poli-temporale e è improbabile che i risolutori di ILP finiscano anche casi di dimensioni moderate.
RB

1
@RB, non ho idea se sia NP-difficile. Vedi il mio commento sotto la domanda sulla programmazione dinamica per il mio primo pensiero su come provare a trovare un algoritmo tempo polinomiale (ma non so se l'algoritmo risultante sarà in P o no). Per quanto riguarda ciò che i risolutori di ILP possono fare, l'unico modo per scoprirlo è provare - a volte le loro prestazioni possono essere sorprendenti.
DW
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.