2010-09-01 2 views
9

La domanda reale è questa:Minimizzare somma delle distanze: ottimizzazione Problema

McDonald sta progettando di aprire un numero di articolazioni (diciamo n) lungo una strada diritta. Queste articolazioni richiedono magazzini per conservare il cibo. Un magazzino può immagazzinare cibo per qualsiasi numero di giunti, ma deve essere posizionato solo in uno dei giunti. McD ha un numero limitato di magazzini (per esempio k) disponibili e desidera posizionarli in modo tale da ridurre al minimo la distanza media dei giunti dal magazzino più vicino.

Dato un array (n elementi) di coordinate dei giunti e un intero 'k', restituisce una matrice di elementi 'k' che fornisce le coordinate del posizionamento ottimale dei magazzini.

Spiacente, non ho esempi disponibili poiché sto scrivendo questo dalla memoria. Comunque, un campione può essere:

matrice = {} 1,3,4,5,7,7,8,10,11 (n = 9)
k = 1

Ans: {7 }

Questo è quello che stavo pensando: per k = 1, possiamo semplicemente scoprire la mediana del set, che darebbe la posizione ottimale del magazzino. Tuttavia, per k> 1, il set dato dovrebbe essere diviso in sottoinsiemi 'k' (disgiunto e di elementi contigui del superset), e la mediana per ogni sottoinsieme darebbe le posizioni del magazzino. Tuttavia, non capisco su quali basi dovrebbero essere formati i sottoinsiemi 'k'. Grazie in anticipo.

MODIFICA: C'è una variante a questo problema anche: invece di sum/avg, ridurre al minimo la distanza massima tra un giunto e il suo magazzino più vicino. Non capisco neanche questo ..

+0

È un compito? Se è così, taggalo come tale, per favore. –

+0

Beh, questo è venuto in una competizione. –

+0

@ArpitTarang Mi sono imbattuto nello stesso problema. Sei riuscito a risolverlo? – user3634974

risposta

0

L'autostrada rettilinea rende questo un esercizio di programmazione dinamica, lavorando da sinistra a destra lungo l'autostrada. Una soluzione parziale può essere descritta dalla posizione del magazzino più a destra e dal numero di magazzini collocati. Il costo della soluzione parziale sarà la distanza totale dal magazzino più vicino (per k fisso minimizzare ciò equivale a minimizzare la media) o la distanza massima fino al magazzino più vicino.

In ogni fase sono state elaborate le risposte per i giunti N più a sinistra e sono indicizzati dal numero di magazzini utilizzati e dalla posizione del magazzino più a destra: è necessario salvare solo il costo migliore. Ora considera la prossima giuntura e trova la soluzione migliore per i giunti N + 1 e tutti i valori possibili di k e il magazzino più a destra, utilizzando le risposte che hai memorizzato per N articolazioni per velocizzarlo. Una volta elaborata la migliore soluzione di costo che copre tutti i giunti, sai dove si trova il magazzino più a destra, che ti dà la posizione di un magazzino. Torna alla soluzione che ha quel magazzino come giunto più a destra e scopri la soluzione su cui si basava. Questo ti dà un altro magazzino più a destra - e così puoi tornare alla posizione di tutti i magazzini per la soluzione migliore.

Tendo ad avere il costo di risolvere questo problema errato, ma con N giunti e k magazzini per posizionare hai N passi da compiere, ognuno basato sul considerare non più di Nk soluzioni precedenti, quindi ritengo che il costo sia kN^2.

+0

"Ora considera la prossima giuntura e trova la migliore soluzione per i giunti N + 1 e tutti i possibili valori di k e il magazzino più a destra, utilizzando le risposte che hai memorizzato per N articolazioni per velocizzarlo." Potrebbe per favore dare (almeno) un suggerimento su come farlo? –

+0

L'idea di base è che la migliore risposta per un dato punto può essere descritta come "metti un magazzino a questo punto e poi usa la risposta per il punto 4 a sinistra per dire dove mettere gli altri magazzini" - ma lì di solito ci sono alcuni dettagli di cui preoccuparsi che variano da problema a problema. Se non si ha familiarità con la programmazione dinamica, consultare ad es. i primi due esempi su http://mat.gsia.cmu.edu/classes/dynamic/dynamic.html - oppure cerca altri tutorial. – mcdowella

1

Questo NON è un problema di cluster, è un caso particolare di un problema di localizzazione della struttura. È possibile risolverlo utilizzando un pacchetto di programmazione generale intero/lineare, ma poiché il problema è su una linea, potrebbero esserci algoritmi più efficienti (e meno costosi dal punto di vista del software) che funzionerebbero. Potresti considerare la programmazione dinamica poiché probabilmente ci sono combinazioni di strutture che potrebbero essere eliminate abbastanza rapidamente. Guarda nello P-Median problem per maggiori informazioni.

+0

Non ho ricevuto molto dai p-median problem articles .. molti di loro hanno un parametro aggiuntivo di "costo di trasporto" che rende il problema più complesso. Per favore aiuto. –

+0

Ho scoperto che si trattava del "problema relativo alla posizione della struttura". Ma ancora, avevano algos complessi per problemi 2d ... il mio è solo 1d. Aiuto? –

+0

Non importa. Hai ancora delle distanze, sono solo in una dimensione. – Grembo