Округление для минимизации суммы ошибок в попарных расстояниях


25

Что известно о сложности следующей задачи:

  • Дано: рациональные числа .x1<x2<<xn
  • Вывод: целые числа .y1y2yn
  • Цель: минимизировать где
    1i<jne(i,j),
    e(i,j)=|(yjyi)(xjxi)|.

То есть мы хотели бы округлить рациональные числа до целых чисел, чтобы минимизировать сумму ошибок в парных расстояниях. Для каждой пары мы бы хотели, чтобы округленное расстояние как можно ближе к истинному расстоянию .i,jyjyixjxi


Мотивация: скучная поездка на метро и плакат, показывающий «расположение» станций с разрешением в одну минуту времени в пути. Здесь мы минимизируем ошибку, которую совершают люди, если используют плакат для поиска времени в пути между станциями и , усредняя по всем парам .iji<j

Карта маршрута

(источник)

Например, здесь мы можем прочитать следующие приближения парных расстояний между четырьмя станциями (для краткости используем A, B, C, D):

  • A – B ≈ 1 минута, B – C ≈ 2 минуты, C – D ≈ 2 минуты
  • A – C ≈ 3 минуты, B – D ≈ 4 минуты
  • A – D ≈ 5 минут

Это наилучшее из возможных приближений? Если бы вы знали реальное время в пути, могли бы вы найти лучшее решение?


Сначала это звучало как простое упражнение в динамическом программировании, но теперь кажется, что требуется некоторое количество фактического мышления.

Кто-нибудь признает эту проблему? Или видите умный алгоритм для его решения?


Изменить: Есть несколько естественных вариантов вопроса, которые были упомянуты в комментариях; давайте дадим им несколько имен:

  • версия пола / потолка : требуется, чтобы для всех .iyi{xi,xi}i

  • целочисленная версия: достаточно, чтобы для всех . iyiZi

  • монотонная версия: требуется, чтобы .y1y2yn

  • немонотонная версия: у нас может быть для . i < jyi>yji<j

Оригинальный вопрос рассматривает монотонную целочисленную версию, но ответы, связанные с любой из этих версий, приветствуются.


Работает ли DP для случая, когда вы заботитесь только о соседних измерениях?
Суреш Венкат

1
@SureshVenkat: На самом деле, в этом случае проблема становится очень простой: вы просто выбираете наилучшее интегральное расстояние для каждого . То есть вы можете минимизировать каждый независимо. i e ( i - 1 , i )yiyi1ie(i1,i)
Юкка Суомела

4
Этот отчет Эсти Аркин кажется связанным: ams.sunysb.edu/~estie/papers/beautification.pdf Доказано, что минимизация количества различных межточечных расстояний на выходе является NP-трудной. Это не общая сумма сдвигов, как в этих вопросах, но, возможно, гаджеты твердости в отчете могли бы предложить доказательство твердости для этой проблемы.
Валь

2
У меня есть ощущение, что эта проблема, безусловно, должна быть решена с использованием хорошо известных методов. Давайте посмотрим, достаточно ли щедрости, чтобы мотивировать людей решить эту проблему. :)
Юкка Суомела

1
@vzn: меня интересует вычислительная сложность этой проблемы. Если вы можете доказать, что существует подход локального поиска за полиномиальное время, который гарантированно найдет глобальный оптимум, щедрость принадлежит вам.
Юкка Суомела

Ответы:


9

ХОРОШО. Алгоритм DP кажется излишне сложным. После прочтения комментариев я думаю, что это может решить монотонную версию проблемы (но я не проверял каждую деталь).

Сначала предположим, что каждый , где является неотъемлемой частью, является дробной частью. Предположим, что округлено до , где - неотрицательное целое число (конечно, в общем случае может быть отрицательным, но мы всегда можем сдвинуться так, чтобы наименьшее значение 0).x i{ x i } x ix i+ v i v i v i v ixi=xi+{xi}xi{xi}xixi+vivivivi

Теперь рассмотрим стоимость пары , при выполнении этого округления. Стоимость должна бытьх Jxixj

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

Выражение сложное из-за абсолютных значений. Однако обратите внимание, что у нас есть монотонность, поэтому вещи внутри двух внутренних абсолютных значений должны иметь тот же знак. Поскольку у нас есть внешнее абсолютное значение, на самом деле не имеет значения, что это за знак, выражение просто упрощается до

|vivj({xi}{xj})|

Отныне мы не предполагаем, что решение является монотонным, но вместо этого мы меняем цель, чтобы минимизировать сумму вышеуказанного члена для всех пар. Если решение этой проблемы оказывается монотонным, то, конечно, это также оптимальное решение для монотонной версии. (Думайте об этом как: исходная задача имеет бесконечное наказание, когда решение не является монотонным, новая проблема имеет меньшее наказание, если монотонное решение выигрывает даже в новой версии, это должно быть решение монотонной версии)

Теперь мы хотели бы доказать, что если , то в оптимальном решении должно быть .v iv j{xi}>{xj}vivj

Предположим, что это не так, что у нас есть пара но . Покажем, что если мы местами решение станет строго лучше.v i < v j v i v j{xi}>{xj}vi<vjvi vj

Сначала мы сравним термин между и , здесь действительно ясно, что подкачка строго лучше, потому что в не-своп версии, и имеют одинаковый знак, абсолютный значение будет суммой двух абсолютных значений.j v i - v j { x j } - { x i }ijvivj{xj}{xi}

Теперь для любого сравним сумму пар и . То есть нам нужно сравнить( i , k ) ( j , k )k(i,k)(j,k)

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

Использование , , , , чтобы обозначить четыре условия внутри абсолютного значения, то ясно , что . Также ясно, что, По выпуклости абсолютного значения мы знаем, Взять сумму по всем , мы знаем, что обмен может быть только лучше.B C D A + B = C + D | A - B | | C - D | | A | + | Б | | C | + | D | х кABCDA+B=C+D|AB||CD||A|+|B||C|+|D|xk

Обратите внимание, что теперь у нас уже есть решение для версии Monotonic floor / ceil: должен быть порог, когда больше всегда округляется вверх, когда он меньше всегда округляется вниз, когда он равен округлению вверх и некоторые вниз, а качество решения зависит только от количества. Мы перечислим все эти решения и выберем решение с наименьшей целевой функцией. (Все эти решения обязательно являются монотонными).{xi}

Наконец, мы хотели бы перейти к монотонной целочисленной версии задачи. Фактически мы можем доказать, что оптимальное решение такое же, как и в монотонной версии пола / потолка.

Как мы и предполагали, наименьшее значение равно 0. Сгруппируйте все значения по их и назовите их группой . Сначала мы докажем, что нет пустых групп, но это просто, если группа пуста, для любого просто пусть . Легко видеть, что целевая функция всегда улучшается (в основном потому, что ).х я v я 0 , 1 , 2 , . , , , max { v i } k v i > k v i = v i - 1 | { x i } - { x j } | < 1vixivi0,1,2,...,max{vi}kvi>kvi=vi1|{xi}{xj}|<1

Теперь мы докажем, что среднее значение в группе по крайней мере равно среднему в группе плюс . Если это не так, просто пусть для всех , вычисление снова показывает, что целевая функция улучшается.к + 1 { х я } к 1 / 2 v я = v я - 1 V я > к{xi}k+1{xi}k1/2vi=vi1vi>k

Поскольку среднее значение находится в диапазоне , в действительности существует не более двух групп, что соответствует версии floor / ceil.[ 0 , 1 ){xi}[0,1)


1

Просто расширенный комментарий ... (возможно, банальный и / или неправильный :)

Если и является наименьшим общим кратным s, то мы можем избавиться от рациональных чисел: . M b i x i = M x ixi=ai/biMbixi=Mxi

Если (floor, ceil ограничение), то мы можем использовать двоичные переменные чтобы выразить используя его расстояние от ( или ):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

И исходная проблема должна (?!?) Быть эквивалентной нахождению которое минимизирует:vi

1i<jn|DiviDjvj|

сvi{0,1},DiZ


Расширяя ваше последнее суммирование, используя приведенную выше идею об ошибке fn, можно ли показать, что оптимальным является фактически выбор, где каждая двоичная переменная floor / ceil ближе к ? так что остается только случай округления для в форме где - целое число. x n x n m n + 1e(i,j)xnxn мmn+12m
vzn

1
@vzn: я думаю, что это контрпример. Если мы округляем используя критерии округления мы получаем с ошибкой , но с ошибкой (результат такой же, если мы исключаем умножение рациональных чисел на LCM). x i ( 0 , 1 , 9 ) 1,4 ( 0 , 2 , 9 ) 1,2(0,1.4,8.7)xi(0,1,9)1.4(0,2,9)1.2
Марцио де Биаси

хорошо, тем не менее, новая идея. рассмотрим раз. расширить суммирование. это уменьшит до многих сроков с и также . но последний равен ! поэтому он сводится к задаче в форме минимизации где - вектор строки 0/1, а - вектор-столбец с постоянными значениями . правда? тогда это тривиально, и просто выберите , чтобы оно равнялось 1, если соответствующий элемент в отрицательный, и 0, если оно положительное .... QED? v i v 2 i v i X D X D X De(i,j)vivi2viXDXDXD
vzn

1
@vzn: если вы используете чтобы исключить функцию абсолютного значения, то вы получите такие термины, как ; как вы справляетесь с ними при минимизации? -2DiDjvivj((yiyj)(xixj))22DiDjvivj
Марцио Де Биаси

упс! Вы ответили до того, как у меня была возможность удалить этот комментарий после осознания того, что ... в любом случае, кажется, что он все еще сводится к некоторой почти линейной проблеме оптимизации матрицы? также с термином где - вектор-столбец ...? VVVTV
vzn

1

Еще один расширенный комментарий ... Может быть неправильно.

Я также рассматриваю случай с ограничениями пола / потолка и пытаюсь решить его с помощью динамического программирования (не могу, но, возможно, это работает, когда общий делитель мал).

Пусть будет дробной частью , мы рассмотрим вещи от самого маленького до самого большого. Предположим, что наибольшим является , и поскольку мы занимаемся динамическим программированием, мы уже знаем «что-то» (я объясню, что это такое) об оптимальном решении для всего остального, кроме .x i { x i } { x k } x k{xi}xi{xi}{xk}xk

Теперь рассмотрим разницу в целевой функции, когда мы вверх или вниз. Если изначально некоторые округлены, то разница равна просто 1 (на самом деле не очень тщательно проверил, но кажется, что это так, очень важно, чтобы независимо от того, находится ли слева или справа от , разница всегда одинаково); если изначально некоторый округляется в сторону, то разница составляет . Итак: мы знаем, какое решение нам следует принять, если известны следующие три величины:x i x i x k x i 2 { x k } - 2 { x i } - 1xkxixixkxi2{xk}2{xi}1

  1. сколько вещей округлено
  2. сколько вещей округлено
  3. какова сумма среди тех , которые округлены внизх я{xi}xi

Хорошо, 1 и 2 по существу одинаковы, мы можем позволить f [N, Ndown, Sdown] быть оптимальным решением для первых N точек (когда точки сортируются в порядке возрастания ), число округляется в меньшую сторону - Ndown, а сумма для округленных в меньшую сторону - Sdown. Тогда нетрудно написать, как перейти от f [N-1] к f [N].x i { x i }{xi}xi{xi}

Проблема, конечно, в том, что Sdown может иметь экспоненциально много значений. Но это работает, когда общий делитель мал или мы можем сначала округлить все до точки сетки и получить FPTAS (если приведенная выше динамическая программа верна ...)


Только что заметил комментарий @Marzio De Biasi. Намного легче думать об этом Динамическом программировании, используя эту целевую функцию. Так как мы по существу сортируем по , когда мы пытаемся рассмотреть окончательный , все абсолютные значения исчезают. Дополнительные расходы: или . D i v i ( N - 1 ) D k - D i v iDiDivi(N1)DkDivi
Rong Ge

ОК 's не должно быть положительным. Но это также может быть обработано. Нам нужно только сказать разницу междуи . Ndown - количество предыдущих , равных 0, Nup - количество предыдущих , равных 1.| DDiН д о ж н | D k | + N u p D k - D i v i v j v j|Divi|Ndown|Dk|+NupDkDivivjvj
Rong Ge

Это выглядит многообещающе, но я думаю, что есть некоторые дополнительные трудности, если входные значения слишком близки друг к другу. Рассмотрим, например, и . Теперь, если бы мы могли округлять большую сторону и округлять в сторону, у нас больше не было бы приятного свойства, что ошибка изменяется точно на 1 в зависимости от того, округляется ли большую или сторону. С другой стороны, если мы запрещаем округление, которое меняет порядок точек (как у меня в первоначальном вопросе), то, похоже, нам нужно отслеживать возможные округления, которые все еще доступны в динамической программе; мы можем сделать это? x k = 1.9 x i x k x kxi=1.1xk=1.9xixkxk
Юкка Суомела

1
@Jukka Suomela, После того, как я увидел ваш комментарий, я понял, что мы никогда не должны допускать округления чего- либо с большим а округления чего-то с меньшим . Это можно доказать, если изучить все случаи. Тогда ответ на проблему (с ограничениями округления) ясен: должен быть порог, выше порога, который вы должны округлить, ниже, вы должны округлить вниз, на пороге, возможно, некоторые должны быть округлены вверх, а некоторые вниз, но только качество зависит от количества. Эти решения могут быть легко перечислены. { x i }{xi}{xi}
Rong Ge

1
Рассматривая все случаи, которые я имею в виду, предположим, что , подумайте о другом в одной из трех областей, разделенных на и , и округляется в большую или меньшую сторону. Во всех 6 случаях округление вниз и вверх никогда не бывает хуже, чем округление вниз и вверх. { 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.