Arrotondamento per ridurre al minimo la somma degli errori nelle distanze a coppie


25

Cosa si sa della complessità del seguente problema:

  • Dato: numeri razionali .x1<x2<<xn
  • Output: numeri interi .y1y2yn
  • Obiettivo: minimizzare dove
    1i<jne(i,j),
    e(i,j)=|(yjyi)(xjxi)|.

Cioè, vorremmo arrotondare i numeri razionali in numeri interi in modo da ridurre al minimo la somma degli errori in distanze a coppie. Per ogni coppia vorremmo avere la distanza arrotondata più vicino possibile alla distanza reale .i,jyjyixjxi


Motivazione: un viaggio in metropolitana noioso e un poster che mostra le "posizioni" delle stazioni alla risoluzione di un minuto di viaggio. Qui stiamo minimizzando l'errore che le persone commettono se usano il poster per cercare il tempo di viaggio tra le stazioni e , facendo una media su tutte le coppie .iji<j

mappa del percorso

(fonte)

Ad esempio, qui possiamo leggere le seguenti approssimazioni delle distanze a coppie tra le quattro stazioni (usando A, B, C, D per brevità):

  • A – B ≈ 1 minuto, B – C ≈ 2 minuti, C – D ≈ 2 minuti
  • A – C ≈ 3 minuti, B – D ≈ 4 minuti
  • A – D ≈ 5 minuti

È questa la migliore approssimazione possibile? Se conoscessi i tempi di viaggio effettivi, potresti trovare una soluzione migliore?


Inizialmente, questo sembrava un semplice esercizio di programmazione dinamica, ma ora sembra che sia necessaria una certa quantità di pensiero reale.

Qualcuno riconosce questo problema? O vedi un algoritmo intelligente per risolverlo?


Modifica: ci sono alcune varianti naturali della domanda che sono state menzionate nei commenti; diamo loro alcuni nomi:

  • versione floor / ceil : è necessario che per tutti .iyi{xi,xi}i

  • versione intera : è sufficiente che per tutti . iyiZi

  • versione monotonica : è necessario che .y1y2yn

  • versione non monotonica : possiamo avere per . i < jyi>yji<j

La domanda originale considera la versione intera monotonica, ma le risposte relative a una di queste versioni sono benvenute.


DP funziona nel caso in cui ti interessi solo delle misurazioni adiacenti?
Suresh Venkat,

1
@SureshVenkat: In realtà, in quel caso il problema diventa molto semplice: basta selezionare la migliore distanza integrale per ogni . Cioè, è possibile ridurre a icona ogni indipendente. i e ( i - 1 , i )yiyi1ie(i1,i)
Jukka Suomela,

4
Questo rapporto di Estie Arkin sembra correlato: ams.sunysb.edu/~estie/papers/beautification.pdf È dimostrato che ridurre al minimo il numero di distinte distanze tra punti nell'output è NP-difficile. Questa non è la somma totale dei turni, come in queste domande, ma forse i gadget di durezza nel rapporto potrebbero suggerire una prova di durezza per questo problema.
val

2
Ho la sensazione che questo problema dovrebbe certamente essere risolvibile utilizzando tecniche ben note. Vediamo se la generosità è sufficiente per motivare le persone a risolverlo. :)
Jukka Suomela,

1
@vzn: sono interessato alla complessità computazionale di questo problema. Se puoi provare che esiste un approccio di ricerca locale in tempo polinomiale che è garantito per trovare l'ottimale globale, la generosità è tua.
Jukka Suomela,

Risposte:


9

OK. L'algoritmo DP sembra essere inutilmente complicato. Dopo aver letto i commenti, penso che questo potrebbe risolvere la versione monotonica del problema (ma non ho controllato tutti i dettagli).

Innanzitutto, supponi che ogni , dove sia la parte integrale, è la parte frazionaria. Supponiamo che sia arrotondato a , dove è un numero intero non negativo (ovviamente in generale può essere negativo, ma possiamo sempre spostare in modo che il più piccolo sia 0).x i{ x i } x ix i+ v i v i v i v ixi=xi+{xi}xi{xi}xixi+vivivivi

Ora, considera il costo per una coppia , x j quando esegui questo arrotondamento. Il costo dovrebbe esserexixj

||vivj+xixj||{xi}{xj}+xixj||

L'espressione è complicata a causa dei valori assoluti. Tuttavia, nota che abbiamo la monotonia, quindi le cose all'interno dei due valori assoluti interni dovrebbero avere il segno SAME. Dato che abbiamo un valore assoluto esteriore, non importa davvero quale sia quel segno, l'espressione semplifica semplicemente

|vivj({xi}{xj})|

D'ora in poi non assumiamo che la soluzione sia monotonica, ma cambiamo invece l'obiettivo per ridurre al minimo la somma del termine sopra indicato per tutte le coppie. Se la soluzione a questo problema sembra essere monotona, allora ovviamente è anche la soluzione ottimale per la versione monotonica. (Pensa a questo come: il problema originale ha una penalità infinita quando la soluzione non è monotonica, il nuovo problema ha una penalità minore, se una soluzione monotonica vince anche nella nuova versione, deve essere la soluzione alla versione monotonica)

Ora vorremmo dimostrare, se , nella soluzione ottimale dobbiamo avere v iv j .{xi}>{xj}vivj

Supponiamo che ciò non sia vero, che abbiamo una coppia ma v i < v j . Mostreremo che se ci scambiamo v i v j la soluzione diventa strettamente migliore.{xi}>{xj}vi<vjvi vj

Innanzitutto confrontiamo il termine tra e j , qui è davvero chiaro che lo scambio è strettamente migliore perché nella versione non swap, v i - v j e { x j } - { x i } ha lo stesso segno, l'assoluto valore sarà la somma dei due valori assoluti.ijvivj{xj}{xi}

Ora per ogni , confrontiamo la somma delle coppie ( i , k ) e ( j , k ) . Cioè, dobbiamo confrontarek(i,k)(j,k)

e | v j - v k - ( { x i } - { x k } ) | + ||vivk({xi}{xk})|+|vjvk({xj}{xk})|.|vjvk({xi}{xk})|+|vivk({xj}{xk})|

Uso , B , C , D per indicare i quattro termini all'interno del valore assoluto, è chiaro che A + B = C + D . Inoltre è chiaro che | A - B | | C - D | . Per convessità del valore assoluto, sappiamo | A | + | B | | C | + | D | . Prendi la somma su tutti x kABCDA+B=C+D|AB||CD||A|+|B||C|+|D|xkSappiamo che lo scambio non può che essere migliore.

Si noti che ora abbiamo già una soluzione per la versione monotonica floor / ceil: deve esserci una soglia, quando è più grande sempre arrotondato per eccesso, quando è più piccolo sempre arrotondato per difetto, quando è uguale arrotondato un po 'su e alcuni giù, mentre la qualità della soluzione dipende solo dal numero. Enumeriamo tutte queste soluzioni e scegliamo quella con la più piccola funzione oggettiva. (Tutte queste soluzioni sono necessariamente monotoniche).{xi}

Infine vorremmo passare alla versione intera monotonica del problema. Possiamo effettivamente dimostrare che la soluzione ottimale è la stessa della versione monotonica a pavimento / soffitto.

vixivik v i > k v i = v i - 1 |0,1,2,...,max{vi}kvi>kvi=vi1|{xi}{xj}|<1

Ora proveremo, la media di nel gruppo è almeno la media di nel gruppo più . Se ciò non è vero, lasciare semplicemente per tutti , il calcolo mostra di nuovo che la funzione obiettivo migliora.k + 1 { x i } k 1 / 2 v{xi}k+1{xi}k1/2v i > kvi=vi1vi>k

Poiché la media di è nell'intervallo , in realtà ci sono al massimo due gruppi, che corrispondono alla versione floor / ceil.[ 0 , 1 ){xi}[0,1)


1

Solo un commento esteso ... (forse banale e / o sbagliato :)

Se e è il minimo comune multiplo dei s, allora possiamo sbarazzarci dei razionali: . M b i x i = M x ixi=ai/biMbixi=Mxi

Se (floor, restrizione ceil) allora possiamo usare le variabili binarie per esprimere usando la sua distanza da ( o ):yi{xi,xi}y i x i L i = x i - M x iR i = x i - M x iviyixiLi=xiMxiRi=xiMxi

yi=xi+Livi+Ri(1vi)=xi+(LiRi)vi+Ri=xi+Divi+Ri

E il problema originale dovrebbe (?!?) Equivalere a trovare la che minimizzi:vi

1i<jn|DiviDjvj|

convi{0,1},DiZ


espandendo la tua ultima somma usando l' errore dell'idea sopra, si potrebbe dimostrare che l'ottimale è in realtà solo la scelta in cui ogni variabile binaria floor / ceil è più vicina a ? quindi lascia solo il caso di come arrotondare per nella forma dove è un numero intero. x n x n m n + 1e(i,j)xnxn mmn+12m
vzn,

1
@vzn: penso che questo sia un controesempio. Se arrotondiamo usando i criteri di arrotondamento otteniamo che ha un errore di , ma ha un errore di (il risultato è lo stesso se eliminiamo i razionali che si moltiplicano per la LCM). x i ( 0 , 1 , 9 ) 1.4 ( 0 , 2 , 9 )(0,1.4,8.7)xi(0,1,9)1.4(0,2,9)1.2
Marzio De Biasi,

ok comunque nuova idea. considera di nuovo . espandi la somma. ridurrà a molti termini con e anche . ma quest'ultimo è uguale a ! pertanto si riduce a un problema sotto forma di minimizzare dove è un vettore di riga 0/1 e è un vettore di colonna costante . vero? allora è banale e basta selezionare la modo che sia 1 se l'elemento corrispondente in è negativo e 0 se è positivo .... QED? v i v 2 i v i X D X D Xe(i,j)vivi2viXDXDXD
vzn,

1
@vzn: se usi l' per eliminare la funzione del valore assoluto, otterrai termini come ; come li gestisci nella minimizzazione? ((yiyj)(xixj))22DiDjvivj
Marzio De Biasi,

oops! hai risposto prima che avessi avuto la possibilità di eliminare quel commento dopo aver realizzato che .. comunque sembra ancora ridurre a qualche problema di ottimizzazione della matrice quasi lineare? anche con un termine dove è un vettore di colonna ...? VVTV
vzn,

1

Un altro commento esteso ... Potrebbe essere sbagliato.

Sto anche considerando il caso con restrizioni floor / ceil e sto provando a risolverlo usando la programmazione dinamica (non posso, ma forse funziona quando il divisore comune è piccolo).

Sia la parte frazionaria di , consideriamo le cose dal più piccolo al più grande. Supponiamo che il più grande sia , e poiché stiamo facendo una programmazione dinamica sappiamo già "qualcosa" (spiegherò di cosa si tratta) sulla soluzione ottimale per tutto il resto tranne .{xi}xi{xi}{xk}xk

Consideriamo ora la differenza nella funzione obiettivo quando arrotondiamo su o giù. Se in origine un po 'di è arrotondato per , allora la differenza è semplicemente 1 (non ho controllato molto attentamente ma sembra che sia così, è davvero importante che non importa se sia a sinistra o a destra di , la differenza è sempre lo stesso); se in origine alcuni sono arrotondati per , la differenza è . Quindi: sappiamo quale decisione dovremmo prendere se sono note le seguenti tre quantità:xkxixixkxi2{xk}2{xi}1

  1. quante cose sono arrotondate per eccesso
  2. quante cose sono arrotondate per difetto
  3. qual è la somma di tra quelle che sono arrotondate per difetto{xi}xi

OK, 1 e 2 sono essenzialmente gli stessi, possiamo lasciare che f [N, Ndown, Sdown] sia la soluzione ottimale per i primi N punti (quando i punti sono ordinati in ordine crescente di ), il numero di arrotondato per difetto è Ndown e la somma di per quelli arrotondati per difetto è Sdown. Quindi non è difficile scrivere come passare da f [N-1] a f [N].{xi}xi{xi}

Il problema è ovviamente che Sdown può avere in modo esponenziale molti valori. Funziona quando il divisore comune è piccolo, oppure possiamo prima arrotondare tutto a un punto della griglia e ottenere un FPTAS (se il programma dinamico sopra è corretto ...)


Ho appena notato il commento di @Marzio De Biasi. È molto più facile pensare a questa programmazione dinamica usando quella funzione oggettiva. Dato che essenzialmente stiamo ordinando secondo , quando proviamo a considerare quello finale, tutto il valore assoluto scompare. Il costo aggiuntivo è o . DiDivi(N1)DkDivi
Rong Ge,

OK non deve essere positivo. Ma questo può anche essere gestito. Dobbiamo solo dire la differenza trae . Ndown è il numero di precedenti uguali a 0, Nup è il numero di precedenti uguali a 1.|Di|Divi|Ndown|Dk|+NupDkDivivjvj
Rong Ge

Sembra promettente, ma penso che ci siano ulteriori difficoltà se i valori di input sono troppo vicini tra loro. Considera ad esempio e . Ora se potessimo avere arrotondato per e arrotondato per , non avremmo più la proprietà piacevole che l'errore cambia esattamente di 1 a seconda che sia arrotondato per o per difetto . D'altra parte, se vietiamo un arrotondamento che modifica l'ordine dei punti (come ho nella domanda iniziale), allora sembra che dobbiamo tenere traccia di eventuali arrotondamenti ancora disponibili nel programma dinamico; Possiamo farlo? xi=1.1xk=1.9xixkxk
Jukka Suomela,

1
@Jukka Suomela, Dopo aver visto il tuo commento, mi sono reso conto che non dovremmo mai lasciare arrotondare qualcosa di più grande mentre qualcosa di più piccolo è arrotondato. Questo può essere dimostrato se si esaminano tutti i casi. Quindi la risposta al problema (con restrizioni circolari) è chiara: ci deve essere una soglia, sopra la soglia che si dovrebbe arrotondare, al di sotto si dovrebbe arrotondare, alla soglia forse alcuni dovrebbero essere arrotondati e alcuni verso il basso, ma solo la qualità dipende dal numero. Queste soluzioni possono essere facilmente elencate. { x i }{xi}{xi}
Rong Ge,

1
Esaminando tutti i casi intendo, supponiamo , pensi ad un altro in una delle tre regioni divise per e e è arrotondato per eccesso o per difetto. In tutti e 6 i casi, arrotondare verso il basso e verso l'alto non è mai peggio che arrotondare verso il basso e verso l'alto. { x k } { x i } { x j } { x k } x i x j x j x i{xi}<{xj}{xk}{xi}{xj}{xk}xixjxjxi
Rong Ge,
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.