Оптимизация двухпараметрической функции расстояния на линейных сегментах (ACM ICPC Regionals Elim.)

Эта проблема является подзадачей задачи, поставленной в отборочном раунде ACM ICPC Kanpur Regionals:

Имея 2 отрезка, ограниченных двумерными точками (Pa, Pb) и (Pc, Pd) соответственно, найдите p и q (в диапазоне [0,1]), которые минимизируют функцию

f(p, q) = D(Px, Pa) + D(Py, Pd) + k D(Px, Py) where 
                                2 <= k <= 5, 
                                Px = p Pa + (1-p) Pb, 
                                Py = q Pc + (1-q) Pd and 
 D(x, y) is the euclidean distance between points x and y

(фактически Px и Py являются точками на отрезках прямой, и функция кодирует стоимость перехода из Pa в Pd через соединительное звено, стоимость которого в k раз превышает евклидово расстояние)

Некоторые замечания относительно этой функции:

  1. Параллельные отрезки всегда будут приводить к тому, что хотя бы один из p и q будет либо 0, либо 1.
  2. Пересечение отрезков прямой всегда приводит к тому, что p и q находят точку пересечения отрезков прямой (чтобы доказать это, можно применить неравенство треугольника)

Вопрос: в общем случае, когда линии наклонены и потенциально разделены, как минимизировать эту функцию?


person Divye Kapoor    schedule 30.10.2010    source источник
comment
вы должны написать это на C или C++!   -  person Svisstack    schedule 30.10.2010
comment
@Svisstack - для меня не важен используемый язык, важен алгоритм.   -  person Divye Kapoor    schedule 30.10.2010
comment
@Svisstack - Вам требуется разъяснение вопроса на C/C++? Если да, то какая часть?   -  person Divye Kapoor    schedule 30.10.2010
comment
Я не понимаю наблюдение 2. Контрпример: два отрезка линии образуют высокий X с Pa и Pd epsilon-близко друг к другу, а точка пересечения (Pi) находится в обеих средних точках. Теперь растяните X по вертикали до бесконечности. Тогда D(Pa,Pi) + D(Pi,Pd) ›› D(Pa,Pd) = эпсилон.   -  person Steve Tjoa    schedule 31.10.2010
comment
@ Стив - ты прав. Это ошибка в моем наблюдении.   -  person Divye Kapoor    schedule 31.10.2010
comment
Без проблем. Re: ваш другой комментарий, я думаю, что есть много численных методов для решения этой проблемы. Поскольку эта проблема относительно проста, более простой метод может быть лучшим. В конкурсе как оцениваются ответы? Что делает хороший ответ?   -  person Steve Tjoa    schedule 31.10.2010
comment
Ответы оцениваются на основе соблюдения ограничения точности (численно 10 ^ -5 в данном случае), а также соблюдения ограничения времени выполнения (~ 1 с). Я понял, что простого 2D-бинарного поиска с использованием градиента функции в качестве предиката должно быть достаточно. @Steve - Есть ли у вас какие-либо другие альтернативы?   -  person Divye Kapoor    schedule 22.11.2010


Ответы (1)


Я думаю, вы должны быть в состоянии взять частные производные от f по отношению к p и q, установить их равными 0 и решить для p и q. Это даст вам (местный) минимум. Если минимум имеет 0 <= p <= 1 и 0 <= q <= 1, все готово, в противном случае проверьте четыре конечные точки (p=0,q=1 и т. д.).

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

person Keith Randall    schedule 30.10.2010
comment
Я подумал и увидел пару сайтов по минимизации функций. Это действительно общий метод, но получение аналитического решения пары уравнений df/dp = 0 и df/dq = 0 оказывается очень запутанным. Я ищу численные решения проблемы - возможно, используя двоичный поиск в 2 измерениях или, возможно, вариант метода Ньютона Рафсона. - person Divye Kapoor; 31.10.2010