Методы оптимизации, задачи
Материал из eSyr's wiki.
(Уточнения) |
(Regression fix) |
||
Строка 257: | Строка 257: | ||
Таким образом, из разрешимости прямой задачи ЛП следует разрешимость задачи, двойственной к ней, причём <math> d^* = \langle x^*, c \rangle = \langle b, y^* \rangle = d^{**}.</math> С учётом того, что задача, двойственная к двойственной, совпадает с прямой (см. [[Методы оптимизации, задачи#Задача 7|Задачу 7]]), верно и обратное. Таким образом, теорема двойственности полностью доказана. | Таким образом, из разрешимости прямой задачи ЛП следует разрешимость задачи, двойственной к ней, причём <math> d^* = \langle x^*, c \rangle = \langle b, y^* \rangle = d^{**}.</math> С учётом того, что задача, двойственная к двойственной, совпадает с прямой (см. [[Методы оптимизации, задачи#Задача 7|Задачу 7]]), верно и обратное. Таким образом, теорема двойственности полностью доказана. | ||
+ | |||
+ | ===Алгоритм === | ||
+ | Пусть дана озЛП | ||
+ | |||
+ | <math>\max\limits_{z \in \mathbb{R}^{n}}: Ax \leqslant b</math>. | ||
+ | |||
+ | |||
+ | Для построения двойственной задачи необходимо выполнить следующие шаги. | ||
+ | # Привести знаки неравенств в системе ограничений прямой задачи в соответствии с целевой функцией. | ||
+ | # Ввести новые переменные: <math>u_{j}, j = \overline{0 .. m},\ m </math> — число ограничений в прямой задаче. | ||
+ | # Определить область допустимых значений каждой из переменных двойственной задачи, исходя из следующего правила: | ||
+ | #*<math>u_{j} \geqslant 0</math>, если <math>i</math>-ое ограничение прямой задачи является неравенством; | ||
+ | #*<math>u_{j} \in \mathbb{R}</math>, если <math>i</math>-ое ограничение прямой задачи является равенством. | ||
+ | # Определить матрицу коэффициентов системы ограничений двойственной задачи путем транспонирования матрицы коэффициентов системы ограничений прямой задачи: <math>A_r = A^T</math>. | ||
+ | # Определить свободные числа системы ограничений двойственной задачи как равные коэффициентам при неизвестных в целевой функции прямой задачи. | ||
+ | # Записать систему ограничений двойственной задачи, определяя вид каждого ограничения на основании следующего правила: | ||
+ | #*<math>j</math>-ое ограничение двойственной задачи является неравенством, если <math>x_j \leqslant 0</math> в прямой задаче; | ||
+ | #*<math>j</math>-ое ограничение двойственной задачи является неравенством, если <math>x_j \in \mathbb{R}</math>. | ||
+ | # Опредить коэффициенты при неизвестных целевой функции двойственной задачи, равные соответствующим свободным числам системы ограничений исходной задачи. | ||
+ | # Записать целевую функцию двойственной задачи, как "противоположную" целевой функции прямой задачи (например, <math>\max \rightarrow \min</math>). | ||
+ | |||
+ | |||
=== Пример === | === Пример === |
Версия 05:45, 6 июня 2014
Содержание |
Задача 1
Условие. Предложить неизбыточную кодировку задачи коммивояжёра. Дать оценку длины входа и сравнить её с .
Решение. Пусть m — число городов, B — максимальная длина маршрута, D = {di,j} — матрица расстояний между городами. Будем кодировать m, B и di,j в двоичном виде. Кроме того, включим в алфавит символ-разделитель #. Таким образом, кодировка будет состоять из двоичных записей чисел m, B и элементов di,j, между которыми находятся разделители #. При этом можно включать в кодировку не все элементы di,j, а только те, которые лежат выше главной диагонали матрицы D (поскольку в силу равенств di,j = dj,i и di,i = 0 матрица D симметрична и имеет нулевую главную диагональ). Кроме того, можно не кодировать и число m, поскольку оно однозначно определяется по числу разделителей между элементами матрицы.
Для того чтобы осуществить двоичное кодирование некоторого числа N, необходимо символов. Таким образом, длина входа задачи коммивояжёра будет равна
Кодировать число B и верхнюю часть матрицы D надо в любом случае; двоичное кодирование неизбыточно; разделителей мы добавили лишь полиномиальное число (порядка ). Поэтому кодировка является неизбыточной.
Оценка лучше предложенной, но вряд ли достижима.
Задача 2
Условие. Дать алгоритм распознавания простоты числа и оценить его временную сложность.
Решение. Будем считать, что исходное число N вводится в двоичном виде. Для того, чтобы проверить его на простоту, будем делить его поочерёдно на 2, 3, ..., N-1 и рассматривать остатки от делений. Если на очередном шаге остаток получился равным нулю, то процесс можно не продолжать — рассматриваемое число не являеся простым; если же мы произвели все деления и не получили ни одного нулевого остатка, то число является простым.
Таким образом, в худшем случае (когда рассматриваемое число — простое) получаем N-2 деления.
Деление будем производить «столбиком». Пусть мы делим некоторое число a на некоторое число b (с соответствующими битовыми длинами ma и mb). Тогда на каждое вычитание двоичных строк потребуется, грубо говоря, 2(mb + 1) битовых операций (непосредственно вычитания плюс проверки); всего же таких итераций будет не больше, чем ma − mb + 1.
Получаем, что
Следовательно, деление «столбиком» имеет сложность O(n2).
Итого, сложность всего алгоритма равна
Замечание: нет смысла искать делители до N-1, достаточно рассматривать делители до целой части sqrt(N)
Замечание к замечанию: на вычисление sqrt(n) тоже требуется время, которое нужно учитывать. Если лень, то смело можно ограничить [N/2]
Задача 3
Условие. Завершить доказательство утверждения 9 (§3 методички) для случая k = 1, 2.
Решение. В том случае, когда дизъюнктивные функции, входящие в КНФ задачи о выполнимости, зависят от одной или двух переменных, их можно представить в виде конъюнкции дизъюнктивных функций трёх переменных следующим образом:
- При k = 1:
- При k = 2:
При этом переменные u являются фиктивными, то есть такая замена является эквивалентной (в отличие от замены для случая k = 3). Таким образом, эти три преобразования позволяют полиномиально свести задачу ВЫП к задаче 3-ВЫП.
Задача 4
Условие. Доказать, что задача ПЧ.
Решение. Согласно определению, задача ПЧ будет принадлежать классу , если дополнительная к ней задача будет принадлежать классу
Дополнительной к задаче ПЧ является задача распознавания того, является ли число (назовём его N, с битовой длиной n) составным. Для проверки этого будем использовать детерминированные машины Тьюринга, которые «столбиком» делят N на числа, соответственно, от 2 до N-1 и находят остатки от этих делений. Если хотя бы одна из ДМТ выдаст нулевой остаток, вся НДМТ останавливается — число N является составным. Если же все остатки отличны от нуля, N — простое число.
Деление «столбиком» имеет сложность порядка O(n2) (см. Задачу 2); длина каждого из слов-подсказок не превышает n, поэтому время их прочтения не больше k*n, где k — некоторый коэффициент. Следовательно, временная сложность всей НДМТ, решающей задачу о том, является ли число составным, также полиномиальна. Таким образом, эта задача принадлежит классу , а задача ПЧ принадлежит классу
Задача 5
Условие. Свести задачу ЛП с ограничениями в канонической форме к основной задаче ЛП.
Решение. Другими словами, необходимо задачу свести к задаче
Применим к ограничениям в канонической форме равносильные преобразования:
Учитывая равносильность условий и , получаем:
Получаем, что , где то есть мы свели задачу ЛП с ограничениями в канонической форме к основной задаче ЛП.
Задача 6
Условие. Оценить по порядку битовую длину L входа озЛП. А именно, доказать, что L > O(ln(nΔ)), где Δ = max | detD' | , D' — квадратная подматрица D, D — симплекс-матрица озЛП.
Решение. Входом озЛП является симплекс-матрица D, имеющая вид
Таким образом, для кодирования входа озЛП в любом случае необходимо закодировать числа , а также само число n для последующего восстановления размерности матрицы. Кроме того, в кодировку необходимо добавить разделители между числами, или указать число бит, выделяемое на кодирование каждого числа, или ещё каким-либо способом предоставить возможность однозначной расшифровки чисел. В свою очередь, при кодировании самих чисел в общем случае необходимо закодировать их знак и дробную часть. Получается, что даже в простейшем случае, когда все числа являются целыми и неотрицательными (а битовая длина целого неотрицательного числа k есть число, не меньшее log2(k + 1)), длину входа озЛП можно оценить снизу следующим образом:
- где di,j — элементы матрицы D.
Далее, , где — некоторая квадратная подматрица D размерности k x k. Получаем, что
- , где — перестановки чисел 1, ..., k, а .
Следовательно,
Эту сумму можно оценить сверху величиной так как если раскрыть в ней скобки, то мы получим все необходимые произведения плюс некоторую неотрицательную часть. Таким образом,
Итак, ч.т.д.
Задача 7
Условие. Доказать, что двойственная задача к двойственной совпадает с прямой задачей для озЛП.
Решение. Пусть дана прямая задача ЛП в основной форме:
Запишем для неё двойственную задачу:
Приведём эту задачу к основной форме.
Далее, .
Получаем, что
где
Запишем задачу, двойственную к (2):
Представим x' в виде Тогда
=
Для любого положим
Для любых положим
В итоге получаем, что
Следовательно, задачи (1) и (4) совпадают, ч.т.д.
Задача 8
Условие. Доказать, что задача ЛП эквивалентна задаче
Решение. Любая задача ЛП может быть представлена в форме озЛП:
В свою очередь, в силу утверждения 4 §7 озЛП наряду с двойственной задачей эквивалентна следующей системе ЛН:
Представим x в виде Получим систему
Положим . Тогда система (1) эквивалентна системе
ч.т.д.
Задача 9
Условие. Применить теорему Каруша-Куна-Таккера к озЛП; с помощью этой же теоремы доказать теорему двойственности для озЛП.
Решение. Пусть дана прямая задача ЛП в основной форме и двойственная к ней:
Приведём их к виду, пригодному для применения теоремы Каруша-Куна-Таккера:
, где
, где
В силу теоремы Каруша-Куна-Таккера
Докажем, что из условий (3) следуют условия (4).
Пусть
Тогда (имеется в виду вектор из модулей элементов x * ), такие, что
- так как
Получаем, что gradyL2(y * ,λ') = gradx( − L1(x * ,y * )) = − gradxL1(x * ,λ) = 0. - из равенства значений функции в точке не следует равенство градиентов, это неверно
Следовательно, gradxL1(x * ,λ) = − c + ATy * = 0.
Учитывая условие , получим равенство
С другой стороны, . Поэтому из равенства следует, что
Таким образом, из разрешимости прямой задачи ЛП следует разрешимость задачи, двойственной к ней, причём С учётом того, что задача, двойственная к двойственной, совпадает с прямой (см. Задачу 7), верно и обратное. Таким образом, теорема двойственности полностью доказана.
Алгоритм
Пусть дана озЛП
.
Для построения двойственной задачи необходимо выполнить следующие шаги.
- Привести знаки неравенств в системе ограничений прямой задачи в соответствии с целевой функцией.
- Ввести новые переменные: — число ограничений в прямой задаче.
- Определить область допустимых значений каждой из переменных двойственной задачи, исходя из следующего правила:
- , если i-ое ограничение прямой задачи является неравенством;
- , если i-ое ограничение прямой задачи является равенством.
- Определить матрицу коэффициентов системы ограничений двойственной задачи путем транспонирования матрицы коэффициентов системы ограничений прямой задачи: Ar = AT.
- Определить свободные числа системы ограничений двойственной задачи как равные коэффициентам при неизвестных в целевой функции прямой задачи.
- Записать систему ограничений двойственной задачи, определяя вид каждого ограничения на основании следующего правила:
- j-ое ограничение двойственной задачи является неравенством, если в прямой задаче;
- j-ое ограничение двойственной задачи является неравенством, если .
- Опредить коэффициенты при неизвестных целевой функции двойственной задачи, равные соответствующим свободным числам системы ограничений исходной задачи.
- Записать целевую функцию двойственной задачи, как "противоположную" целевой функции прямой задачи (например, ).
Пример
Пусть дана озЛП:
В матричных обозначениях:
, ,
Построим двойственную к ней задачу.
- Не требуется.
- Введём .
- ,
Окончательно имеем:
В матричных обозначениях: