Существует ли общий метод оценки оптимальности алгоритма оптимизации?

9

Существует ли общий метод оценки оптимальности алгоритма оптимизации, например, алгоритм, решающий в противном случае NP-сложную или NP-полную задачу?

Единственный метод, который я до сих пор придумал, - это сравнение результатов алгоритма с уже известными оптимальными решениями.

Если нет, существуют ли конкретные методы для решения некоторых особых проблем?

РЕДАКТИРОВАТЬ Чтобы уточнить: Под оптимальностью я подразумеваю, насколько близок результат к оптимальному результату решения.

scravy
источник
Возможно вопрос для cstheory.stackexchange.com ?
Лучано
Как вы определяете «оптимальность» алгоритма оптимизации? Вы хотите провести анализ его исходного кода, а затем сообщить, каков его коэффициент приближения?
Алекс тен Бринк
Вы, вероятно, имеете в виду «эффективность» алгоритма, который используется для «описания свойств алгоритма, относящихся к тому, сколько различных типов ресурсов он потребляет». Алгоритмы также делятся на точные и эвристические. Точные алгоритмы гарантируют, что найдут оптимальное решение, но они могут занять столетия процессорного времени (для задач с реалистичным размером NP-сложных задач), в то время как эвристика найдет решение, близкое к глобальному оптимуму, в более разумное время. (минуты или часы в зависимости от размера ввода.
Florents Tselai

Ответы:

3

Это зависит от типа проблемы.

Если для задачи существует схема аппроксимации за полиномиальное время (PTAS) (например, евклидова TSP), то вы можете получить решение, сколь угодно близкое к оптимальному решению за полиномиальное время. Это означает, что для каждого e > 0 существует алгоритм полиномиального времени, который найдет приближенное решение вашей задачи, которое гарантированно будет в пределах (1+ e ) оптимального решения. В этом случае вы просто сравнили бы сложность среды выполнения / памяти для двух алгоритмов для одинаковых значений e . Если один алгоритм может дать те же «гарантии оптимальности», что и другой, но с меньшими затратами времени / памяти, то это, вероятно, лучший алгоритм.

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

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

nikie
источник
1

Я не думаю, что есть общий способ сделать это, но, безусловно, есть способы сделать это.

Взять, к примеру, проблему SET-COVER. Для тех, кто не знает, проблема заключается в следующем:

Дан набор элементов B={1,2,...,m}и количество подмножеств S_1, S_2, ..., S_n, объединение которых B. Вы пытаетесь найти минимальное количество этих подмножеств, чтобы объединение было все еще B. Типичный пример этой проблемы в реальном мире - это когда вам предоставляется набор районов, и вы пытаетесь найти оптимальные места для размещения школ таким образом, чтобы каждый район обслуживался менее чем на некотором расстоянии dот ближайшей школы. В данном случае Bэто набор окрестностей и S_xсостоит из всех наборов в пределах dгорода x.

Вы доказываете, что эта проблема NP-ПОЛНАЯ. Однако существует простое жадное решение, при котором вы неоднократно выбираете набор S_iс наибольшим количеством непокрытых элементов. И вы можете доказать, что этот алгоритм хорошо работает .

Если оптимальный алгоритм состоит из kмножеств, жадный алгоритм будет состоять не более чем из k ln(n)множеств, где ln - натуральный логарифм.

tskuzzy
источник
1

Проблема определения того, имеет ли программа «производительность оптимальности» A или «производительность оптимальности» B практически для любого определения «производительности оптимальности», вообще неразрешима (доказательство ниже). Это подразумевает, что не существует единственного метода, который всегда может сказать вам, насколько оптимален алгоритм.

Однако существуют методы, которые часто применяются при анализе алгоритмов аппроксимации. Часто аппроксимационные алгоритмы оцениваются по их гарантиям того, насколько далеко их решение от оптимального решения. Я приведу пример задачи и аппроксимации, которую я докажу, используя метод «нижней границы», который очень часто используется для доказательства отношений.

Рассматриваемая проблема - это проблема «Загрузка грузовика»: у нас много идентичных грузовиков (столько, сколько нам нужно), каждый из которых способен выдерживать нагрузку весом не более T. У нас есть n объектов, которые мы хотим загрузить в эти грузовики для транспорт. Каждый объект i имеет вес w_i, где w_i <= T (поэтому нет предметов, которые не могут поместиться в грузовик даже сами по себе). Предметы не могут быть разделены на части. Мы хотели бы заполнить грузовики так, чтобы нам было нужно как можно меньше грузовиков. Эта проблема является NP-полной.

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

Этот алгоритм представляет собой так называемое 2-приближение для задачи: он использует не более чем вдвое больше грузовиков, чем требуется для оптимального решения. «Максимум» имеет решающее значение: нам может повезти и мы найдем оптимальное решение, но, по крайней мере, мы не будем делать слишком плохо.

Чтобы доказать это, мы сначала определим нижнюю границу для оптимального количества грузовиков, которое нам нужно. Для этого представьте, что нам разрешено разрезать предметы на части: тогда мы могли бы легко заполнить каждый грузовик, но последний полностью. Количество грузовиков, которое нам понадобилось бы, если бы мы это сделали, является нижней границей количества грузовиков, которое нам нужно для первоначального вопроса: в «лучшем» случае оптимальное решение всегда полностью заполняет каждый грузовик, и в этом случае количество грузовиков равно, но если оптимальные решения оставляют грузовики незаполненными, то может потребоваться только больше грузовиков.

Теперь посмотрим на наш алгоритм приближения. Обратите внимание, что на каждом этапе мы (частично) заполняем два грузовика. Также обратите внимание, что из-за того, как работает алгоритм, предметы в первом грузовике и предмет во втором грузовике не могут поместиться в первом грузовике, поэтому их сумма не менее T. Это означает, что на каждом шаге мы загружаем по крайней мере полный грузовик стоимостью предметов на двух грузовиках. Теперь сравните это с нашей нижней границей: в этом случае мы загружаем полный грузовик на один грузовик. Другими словами, наш алгоритм приближения вычисляет (в линейное время) решение, которое очень похоже на нашу нижнюю границу «решение», но использует два грузовика вместо одного. Следовательно, мы используем не более чем вдвое больше грузовиков, чем оптимальный алгоритм, потому что мы используем в два раза больше грузовиков, чем наша нижняя граница оптимального алгоритма.


Этот алгоритм дает приближение с постоянным множителем: он не более чем в 2 раза хуже, чем оптимальное решение. Некоторые примеры других мер: самое большее C больше, чем оптимальное решение (аддитивная ошибка, довольно редко), самое большее c log n раз хуже, чем оптимальное решение, самое большее cn раз хуже, чем оптимальное решение, самое большее c 2 ^ (dn) в разы хуже, чем оптимальное решение (очень плохо; например, общий TSP допускает только алгоритмы с такого рода гарантиями).

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

Также обратите внимание, что мы иногда используем алгоритмы аппроксимации для задач, которые не являются NP-сложными.

Я узнал это (и многое другое) в курсе алгоритмов аппроксимации в моем университете.


Доказательство неразрешимости: пусть P - проблема, а A и B - алгоритмы аппроксимации для P, где A и B не имеют одинаковую «оптимальность» для некоторого разумного определения «оптимальности», и где время работы A и B равно omega (1) (строго медленнее, чем постоянное время, т. Е. Они становятся медленнее для больших экземпляров) и где A и B всегда останавливаются.

Пусть D - программа, которая утверждает, что она может вычислить следующее: учитывая, что какая-то программа C вычисляет приближение для P, решите, хорош ли он как A или как B для достаточно больших входных данных (поэтому вы можете использовать это для классификации программ согласно их оптимальности).

Затем мы можем использовать D для решения проблемы остановки. Пусть E - программа, а F - вход для этой программы. Мы будем использовать D, чтобы решить, остановится ли E на входе F.

Мы разрабатываем программу G, которая выполняет следующие действия: учитывая вход S для задачи P, она запускает E на F и A на S параллельно: она выполняет E некоторое время, затем A, затем E снова и так далее. Если E останавливается на F, он прекращает запуск A и вместо этого запускает B на S и возвращает результат B. Если A останавливается до E, он возвращает результат A.

Использование D на G теперь решает, останавливается ли E на F: если E останавливается на F, то для достаточно больших входов S, E останавливается на F до того, как A останавливается на S (потому что время, необходимое для остановки E, не зависит от размера вход, в отличие от А). Поэтому D сообщает, что G имеет характеристики оптимальности B. Если E не останавливается на F, D сообщит, что G имеет характеристики оптимальности A.

Алекс тен Бринк
источник