283
с/к “Эффективные алгоритмы” Лекция 14: Линейное программирование А. Куликов Computer Science клуб при ПОМИ http://logic.pdmi.ras.ru/infclub/ А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 1 / 72

20080224 efficientalgorithms kulikov_lecture14

Embed Size (px)

Citation preview

Page 1: 20080224 efficientalgorithms kulikov_lecture14

с/к “Эффективные алгоритмы”Лекция 14: Линейное программирование

А. Куликов

Computer Science клуб при ПОМИhttp://logic.pdmi.ras.ru/∼infclub/

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 1 / 72

Page 2: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 2 / 72

Page 3: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 2 / 72

Page 4: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 2 / 72

Page 5: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 2 / 72

Page 6: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 2 / 72

Page 7: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 3 / 72

Page 8: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

Что такое линейное программирование?

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

I удовлетворяет некоторым ограничениям (к примеру, путь долженидти по ребрам графа из вершины s в t, дерево должно содержатьвсе вершины графа, подпоследовательность должна бытьвозрастающей),

I является оптимальным (относительно некоторой заданнойфункции) среди всех решений, удовлетворяющих даннымограничениям.

Линейное программирование (linear programming) описываетширокий класс оптимизационных задач, в которых и ограничения,и целевая функция являются линейными функциями.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 4 / 72

Page 9: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

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

В таких задачах мы ищем решение, котороеI удовлетворяет некоторым ограничениям (к примеру, путь должен

идти по ребрам графа из вершины s в t, дерево должно содержатьвсе вершины графа, подпоследовательность должна бытьвозрастающей),

I является оптимальным (относительно некоторой заданнойфункции) среди всех решений, удовлетворяющих даннымограничениям.

Линейное программирование (linear programming) описываетширокий класс оптимизационных задач, в которых и ограничения,и целевая функция являются линейными функциями.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 4 / 72

Page 10: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

Что такое линейное программирование?Многие задачи, для которых нам нужны алгоритмы, являютсяоптимизационными: кратчайший путь, минимальное остовноедерево, длиннейшая возрастающая подпоследовательность.В таких задачах мы ищем решение, которое

I удовлетворяет некоторым ограничениям (к примеру, путь долженидти по ребрам графа из вершины s в t, дерево должно содержатьвсе вершины графа, подпоследовательность должна бытьвозрастающей),

I является оптимальным (относительно некоторой заданнойфункции) среди всех решений, удовлетворяющих даннымограничениям.

Линейное программирование (linear programming) описываетширокий класс оптимизационных задач, в которых и ограничения,и целевая функция являются линейными функциями.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 4 / 72

Page 11: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

Что такое линейное программирование?Многие задачи, для которых нам нужны алгоритмы, являютсяоптимизационными: кратчайший путь, минимальное остовноедерево, длиннейшая возрастающая подпоследовательность.В таких задачах мы ищем решение, которое

I удовлетворяет некоторым ограничениям (к примеру, путь долженидти по ребрам графа из вершины s в t, дерево должно содержатьвсе вершины графа, подпоследовательность должна бытьвозрастающей),

I является оптимальным (относительно некоторой заданнойфункции) среди всех решений, удовлетворяющих даннымограничениям.

Линейное программирование (linear programming) описываетширокий класс оптимизационных задач, в которых и ограничения,и целевая функция являются линейными функциями.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 4 / 72

Page 12: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

Что такое линейное программирование?Многие задачи, для которых нам нужны алгоритмы, являютсяоптимизационными: кратчайший путь, минимальное остовноедерево, длиннейшая возрастающая подпоследовательность.В таких задачах мы ищем решение, которое

I удовлетворяет некоторым ограничениям (к примеру, путь долженидти по ребрам графа из вершины s в t, дерево должно содержатьвсе вершины графа, подпоследовательность должна бытьвозрастающей),

I является оптимальным (относительно некоторой заданнойфункции) среди всех решений, удовлетворяющих даннымограничениям.

Линейное программирование (linear programming) описываетширокий класс оптимизационных задач, в которых и ограничения,и целевая функция являются линейными функциями.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 4 / 72

Page 13: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

Что такое линейное программирование?Многие задачи, для которых нам нужны алгоритмы, являютсяоптимизационными: кратчайший путь, минимальное остовноедерево, длиннейшая возрастающая подпоследовательность.В таких задачах мы ищем решение, которое

I удовлетворяет некоторым ограничениям (к примеру, путь долженидти по ребрам графа из вершины s в t, дерево должно содержатьвсе вершины графа, подпоследовательность должна бытьвозрастающей),

I является оптимальным (относительно некоторой заданнойфункции) среди всех решений, удовлетворяющих даннымограничениям.

Линейное программирование (linear programming) описываетширокий класс оптимизационных задач, в которых и ограничения,и целевая функция являются линейными функциями.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 4 / 72

Page 14: 20080224 efficientalgorithms kulikov_lecture14

Что такое линейное программирование?

Что такое линейное программирование?Итак, в задаче линейного программирования нам дано множествопеременных и мы хотим найти набор вещественных значений для них,так чтобы выполнить множество линейных равенств и/или неравенствот данных переменных и максимизировать или минимизироватьданную целевую функцию.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 5 / 72

Page 15: 20080224 efficientalgorithms kulikov_lecture14

Пример: максимизация прибыли

Максимизация прибыли

Фирма выпускает два типа товаров — C1 и C2.Какое количество товаров каждого из типов ей нужнопроизводить, чтобы максимизировать прибыль?Допустим, в день она производит x1 единиц товара типа C1 поценне 1 руб. каждый и x2 единиц товара типа C2 по цене 6 руб.каждый.Пусть также известно, что потребность в товарах типов C1 и C2 вдень ограничена сверху 200 и 300 единицами, соответственно.Более того, фирма не может произвести за день более 400 едиництовара.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 6 / 72

Page 16: 20080224 efficientalgorithms kulikov_lecture14

Пример: максимизация прибыли

Максимизация прибылиФирма выпускает два типа товаров — C1 и C2.

Какое количество товаров каждого из типов ей нужнопроизводить, чтобы максимизировать прибыль?Допустим, в день она производит x1 единиц товара типа C1 поценне 1 руб. каждый и x2 единиц товара типа C2 по цене 6 руб.каждый.Пусть также известно, что потребность в товарах типов C1 и C2 вдень ограничена сверху 200 и 300 единицами, соответственно.Более того, фирма не может произвести за день более 400 едиництовара.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 6 / 72

Page 17: 20080224 efficientalgorithms kulikov_lecture14

Пример: максимизация прибыли

Максимизация прибылиФирма выпускает два типа товаров — C1 и C2.Какое количество товаров каждого из типов ей нужнопроизводить, чтобы максимизировать прибыль?

Допустим, в день она производит x1 единиц товара типа C1 поценне 1 руб. каждый и x2 единиц товара типа C2 по цене 6 руб.каждый.Пусть также известно, что потребность в товарах типов C1 и C2 вдень ограничена сверху 200 и 300 единицами, соответственно.Более того, фирма не может произвести за день более 400 едиництовара.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 6 / 72

Page 18: 20080224 efficientalgorithms kulikov_lecture14

Пример: максимизация прибыли

Максимизация прибылиФирма выпускает два типа товаров — C1 и C2.Какое количество товаров каждого из типов ей нужнопроизводить, чтобы максимизировать прибыль?Допустим, в день она производит x1 единиц товара типа C1 поценне 1 руб. каждый и x2 единиц товара типа C2 по цене 6 руб.каждый.

Пусть также известно, что потребность в товарах типов C1 и C2 вдень ограничена сверху 200 и 300 единицами, соответственно.Более того, фирма не может произвести за день более 400 едиництовара.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 6 / 72

Page 19: 20080224 efficientalgorithms kulikov_lecture14

Пример: максимизация прибыли

Максимизация прибылиФирма выпускает два типа товаров — C1 и C2.Какое количество товаров каждого из типов ей нужнопроизводить, чтобы максимизировать прибыль?Допустим, в день она производит x1 единиц товара типа C1 поценне 1 руб. каждый и x2 единиц товара типа C2 по цене 6 руб.каждый.Пусть также известно, что потребность в товарах типов C1 и C2 вдень ограничена сверху 200 и 300 единицами, соответственно.

Более того, фирма не может произвести за день более 400 едиництовара.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 6 / 72

Page 20: 20080224 efficientalgorithms kulikov_lecture14

Пример: максимизация прибыли

Максимизация прибылиФирма выпускает два типа товаров — C1 и C2.Какое количество товаров каждого из типов ей нужнопроизводить, чтобы максимизировать прибыль?Допустим, в день она производит x1 единиц товара типа C1 поценне 1 руб. каждый и x2 единиц товара типа C2 по цене 6 руб.каждый.Пусть также известно, что потребность в товарах типов C1 и C2 вдень ограничена сверху 200 и 300 единицами, соответственно.Более того, фирма не может произвести за день более 400 едиництовара.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 6 / 72

Page 21: 20080224 efficientalgorithms kulikov_lecture14

Соответствующая задача линейного программирования

Соответствующая задача линейного программирования

целевая функция max x1 + 6x2

ограничения x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 7 / 72

Page 22: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Линейное уравнение от переменных x1 и x2 задает прямую наплоскости, а линейное неравенство — полуплоскость.Значит, множество всех допустимых решений (feasible solutions),то есть точек (x1, x2), удовлетворяющих всем ограничениям,является пересечением пяти полуплоскостей.Это пересечение является выпуклым многоугольником.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 8 / 72

Page 23: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Линейное уравнение от переменных x1 и x2 задает прямую наплоскости, а линейное неравенство — полуплоскость.

Значит, множество всех допустимых решений (feasible solutions),то есть точек (x1, x2), удовлетворяющих всем ограничениям,является пересечением пяти полуплоскостей.Это пересечение является выпуклым многоугольником.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 8 / 72

Page 24: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Линейное уравнение от переменных x1 и x2 задает прямую наплоскости, а линейное неравенство — полуплоскость.Значит, множество всех допустимых решений (feasible solutions),то есть точек (x1, x2), удовлетворяющих всем ограничениям,является пересечением пяти полуплоскостей.

Это пересечение является выпуклым многоугольником.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 8 / 72

Page 25: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Линейное уравнение от переменных x1 и x2 задает прямую наплоскости, а линейное неравенство — полуплоскость.Значит, множество всех допустимых решений (feasible solutions),то есть точек (x1, x2), удовлетворяющих всем ограничениям,является пересечением пяти полуплоскостей.Это пересечение является выпуклым многоугольником.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 8 / 72

Page 26: 20080224 efficientalgorithms kulikov_lecture14

Многоугольник решений

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 9 / 72

Page 27: 20080224 efficientalgorithms kulikov_lecture14

Многоугольник решений

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 9 / 72

Page 28: 20080224 efficientalgorithms kulikov_lecture14

Целевая функция

Целевая функция

Вспомним, что нам нужно максимизировать прибыль, то естьфункцию x1 + 6x2.Точки (x1, x2), соответствующие прибыли c , лежат на прямойx1 + 6x2 = c .Чем больше c , тем выше эта прямая.Таким образом, для максимизации целевой функции нужноподнимать эту прямую до тех пор, пока она пересекаетмногоугольник допустимых решений.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 10 / 72

Page 29: 20080224 efficientalgorithms kulikov_lecture14

Целевая функция

Целевая функцияВспомним, что нам нужно максимизировать прибыль, то естьфункцию x1 + 6x2.

Точки (x1, x2), соответствующие прибыли c , лежат на прямойx1 + 6x2 = c .Чем больше c , тем выше эта прямая.Таким образом, для максимизации целевой функции нужноподнимать эту прямую до тех пор, пока она пересекаетмногоугольник допустимых решений.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 10 / 72

Page 30: 20080224 efficientalgorithms kulikov_lecture14

Целевая функция

Целевая функцияВспомним, что нам нужно максимизировать прибыль, то естьфункцию x1 + 6x2.Точки (x1, x2), соответствующие прибыли c , лежат на прямойx1 + 6x2 = c .

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 10 / 72

Page 31: 20080224 efficientalgorithms kulikov_lecture14

Целевая функция

Целевая функцияВспомним, что нам нужно максимизировать прибыль, то естьфункцию x1 + 6x2.Точки (x1, x2), соответствующие прибыли c , лежат на прямойx1 + 6x2 = c .Чем больше c , тем выше эта прямая.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 10 / 72

Page 32: 20080224 efficientalgorithms kulikov_lecture14

Целевая функция

Целевая функцияВспомним, что нам нужно максимизировать прибыль, то естьфункцию x1 + 6x2.Точки (x1, x2), соответствующие прибыли c , лежат на прямойx1 + 6x2 = c .Чем больше c , тем выше эта прямая.Таким образом, для максимизации целевой функции нужноподнимать эту прямую до тех пор, пока она пересекаетмногоугольник допустимых решений.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 10 / 72

Page 33: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 11 / 72

Page 34: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

c = 600

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 11 / 72

Page 35: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

c = 600

c = 1200

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 11 / 72

Page 36: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

c = 600

c = 1200

c = 1500

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 11 / 72

Page 37: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

c = 600

c = 1200

c = 1500

оптимальная прибыль 1900

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 11 / 72

Page 38: 20080224 efficientalgorithms kulikov_lecture14

Недопустимые и неограниченные программы

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

I Линейная программа недопустима (infeasible), то есть ограниченияпротиворечат друг другу. К примеру,

x ≤ 1, x ≥ 2.I Ограничения настолько слабы, что множество допустимых

решений неограничено (unbounded). К примеру,max x1 + x2x1, x2 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 12 / 72

Page 39: 20080224 efficientalgorithms kulikov_lecture14

Недопустимые и неограниченные программы

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

Бывают и ситуации, когда решения нет вообще.I Линейная программа недопустима (infeasible), то есть ограничения

противоречат друг другу. К примеру,x ≤ 1, x ≥ 2.

I Ограничения настолько слабы, что множество допустимыхрешений неограничено (unbounded). К примеру,

max x1 + x2x1, x2 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 12 / 72

Page 40: 20080224 efficientalgorithms kulikov_lecture14

Недопустимые и неограниченные программы

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

I Линейная программа недопустима (infeasible), то есть ограниченияпротиворечат друг другу. К примеру,

x ≤ 1, x ≥ 2.I Ограничения настолько слабы, что множество допустимых

решений неограничено (unbounded). К примеру,max x1 + x2x1, x2 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 12 / 72

Page 41: 20080224 efficientalgorithms kulikov_lecture14

Недопустимые и неограниченные программы

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

I Линейная программа недопустима (infeasible), то есть ограниченияпротиворечат друг другу. К примеру,

x ≤ 1, x ≥ 2.

I Ограничения настолько слабы, что множество допустимыхрешений неограничено (unbounded). К примеру,

max x1 + x2x1, x2 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 12 / 72

Page 42: 20080224 efficientalgorithms kulikov_lecture14

Недопустимые и неограниченные программы

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

I Линейная программа недопустима (infeasible), то есть ограниченияпротиворечат друг другу. К примеру,

x ≤ 1, x ≥ 2.I Ограничения настолько слабы, что множество допустимых

решений неограничено (unbounded). К примеру,max x1 + x2x1, x2 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 12 / 72

Page 43: 20080224 efficientalgorithms kulikov_lecture14

Решение задач линейного программирования

Основные идеи симплекс-метода

Алгоритм выбирает какую-нибудь вершину многоугольника ипоследовательно ищет смежные вершины, в которых достигаетсялучшее значение целевой функции.Найдя вершину, у которой нет более оптимального соседа,алгоритм останавливается и выдает значение целевой функции вэтой вершине.Почему же этот локальный оптимум является еще и глобальным?Из простых геометрических соображений: поскольку все соседиоптимальной вершины многоугольника лежат ниже прямойприбыли, то и весь прямоугольник лежит ниже этой прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 13 / 72

Page 44: 20080224 efficientalgorithms kulikov_lecture14

Решение задач линейного программирования

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

Найдя вершину, у которой нет более оптимального соседа,алгоритм останавливается и выдает значение целевой функции вэтой вершине.Почему же этот локальный оптимум является еще и глобальным?Из простых геометрических соображений: поскольку все соседиоптимальной вершины многоугольника лежат ниже прямойприбыли, то и весь прямоугольник лежит ниже этой прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 13 / 72

Page 45: 20080224 efficientalgorithms kulikov_lecture14

Решение задач линейного программирования

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

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 13 / 72

Page 46: 20080224 efficientalgorithms kulikov_lecture14

Решение задач линейного программирования

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

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 13 / 72

Page 47: 20080224 efficientalgorithms kulikov_lecture14

Решение задач линейного программирования

Основные идеи симплекс-методаАлгоритм выбирает какую-нибудь вершину многоугольника ипоследовательно ищет смежные вершины, в которых достигаетсялучшее значение целевой функции.Найдя вершину, у которой нет более оптимального соседа,алгоритм останавливается и выдает значение целевой функции вэтой вершине.Почему же этот локальный оптимум является еще и глобальным?Из простых геометрических соображений: поскольку все соседиоптимальной вершины многоугольника лежат ниже прямойприбыли, то и весь прямоугольник лежит ниже этой прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 13 / 72

Page 48: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 14 / 72

Page 49: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

200

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 14 / 72

Page 50: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

200

1400

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 14 / 72

Page 51: 20080224 efficientalgorithms kulikov_lecture14

Оптимальное значение

x1

x2

100 200 300 400

100

200

300

400

200

1400

1900

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 14 / 72

Page 52: 20080224 efficientalgorithms kulikov_lecture14

Усложняем пример

Допустим теперь, что фирма стала производить товары типа C3по цене 13 руб. за единицу.Как и прежде, фирма не может произвести более 400 едиництовара за день.Более того, для товаров типов C2 и C3 требуется некотораяпроцедура упаковки, налагающая ограничение x2 + 3x3 ≤ 600.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 15 / 72

Page 53: 20080224 efficientalgorithms kulikov_lecture14

Усложняем пример

Допустим теперь, что фирма стала производить товары типа C3по цене 13 руб. за единицу.

Как и прежде, фирма не может произвести более 400 едиництовара за день.Более того, для товаров типов C2 и C3 требуется некотораяпроцедура упаковки, налагающая ограничение x2 + 3x3 ≤ 600.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 15 / 72

Page 54: 20080224 efficientalgorithms kulikov_lecture14

Усложняем пример

Допустим теперь, что фирма стала производить товары типа C3по цене 13 руб. за единицу.Как и прежде, фирма не может произвести более 400 едиництовара за день.

Более того, для товаров типов C2 и C3 требуется некотораяпроцедура упаковки, налагающая ограничение x2 + 3x3 ≤ 600.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 15 / 72

Page 55: 20080224 efficientalgorithms kulikov_lecture14

Усложняем пример

Допустим теперь, что фирма стала производить товары типа C3по цене 13 руб. за единицу.Как и прежде, фирма не может произвести более 400 едиництовара за день.Более того, для товаров типов C2 и C3 требуется некотораяпроцедура упаковки, налагающая ограничение x2 + 3x3 ≤ 600.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 15 / 72

Page 56: 20080224 efficientalgorithms kulikov_lecture14

Соответствующая задача линейного программирования

Соответствующая задача линейного программированияmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600x1, x2, x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 16 / 72

Page 57: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Множество допустимых решений

Теперь пространство решений является трехмерным.Каждое линейное уравнение задает плоскость, а линейноенеравенство — полупространство.Множество допустимых решений теперь являетсямногогранником, который, в свою очередь, является пересечениемсеми полупространств.Точки прибыли c лежат на плоскости x1 + 6x2 + 13x3 = c .Симплекс-метод будет путешествовать во вершинам этогомногогранника, пока не найдет локальный оптимум.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 17 / 72

Page 58: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Множество допустимых решенийТеперь пространство решений является трехмерным.

Каждое линейное уравнение задает плоскость, а линейноенеравенство — полупространство.Множество допустимых решений теперь являетсямногогранником, который, в свою очередь, является пересечениемсеми полупространств.Точки прибыли c лежат на плоскости x1 + 6x2 + 13x3 = c .Симплекс-метод будет путешествовать во вершинам этогомногогранника, пока не найдет локальный оптимум.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 17 / 72

Page 59: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Множество допустимых решенийТеперь пространство решений является трехмерным.Каждое линейное уравнение задает плоскость, а линейноенеравенство — полупространство.

Множество допустимых решений теперь являетсямногогранником, который, в свою очередь, является пересечениемсеми полупространств.Точки прибыли c лежат на плоскости x1 + 6x2 + 13x3 = c .Симплекс-метод будет путешествовать во вершинам этогомногогранника, пока не найдет локальный оптимум.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 17 / 72

Page 60: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

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

Точки прибыли c лежат на плоскости x1 + 6x2 + 13x3 = c .Симплекс-метод будет путешествовать во вершинам этогомногогранника, пока не найдет локальный оптимум.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 17 / 72

Page 61: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Множество допустимых решенийТеперь пространство решений является трехмерным.Каждое линейное уравнение задает плоскость, а линейноенеравенство — полупространство.Множество допустимых решений теперь являетсямногогранником, который, в свою очередь, является пересечениемсеми полупространств.Точки прибыли c лежат на плоскости x1 + 6x2 + 13x3 = c .

Симплекс-метод будет путешествовать во вершинам этогомногогранника, пока не найдет локальный оптимум.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 17 / 72

Page 62: 20080224 efficientalgorithms kulikov_lecture14

Множество допустимых решений

Множество допустимых решенийТеперь пространство решений является трехмерным.Каждое линейное уравнение задает плоскость, а линейноенеравенство — полупространство.Множество допустимых решений теперь являетсямногогранником, который, в свою очередь, является пересечениемсеми полупространств.Точки прибыли c лежат на плоскости x1 + 6x2 + 13x3 = c .Симплекс-метод будет путешествовать во вершинам этогомногогранника, пока не найдет локальный оптимум.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 17 / 72

Page 63: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 18 / 72

Page 64: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

200

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 18 / 72

Page 65: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

200

1400

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 18 / 72

Page 66: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

200

1400

2800

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 18 / 72

Page 67: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

200

1400

2800

3100

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 18 / 72

Page 68: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Как еще можно убедиться в том, что найденное решение оптимально?

max x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600x1, x2, x3 ≥ 0

x2 ≤ 300x1 + x2 + x3 ≤ 4004x2 + 12x3 ≤ 2400

x1 + 6x2 + 13x3 ≤ 3100

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 19 / 72

Page 69: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Как еще можно убедиться в том, что найденное решение оптимально?

max x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600x1, x2, x3 ≥ 0

x2 ≤ 300x1 + x2 + x3 ≤ 4004x2 + 12x3 ≤ 2400

x1 + 6x2 + 13x3 ≤ 3100

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 19 / 72

Page 70: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Таким образом, 3100 — действительно оптимальное значение.Вопрос только в том, как именно мы догадались, какиенеравенства и с какими коэффициентами нужно сложить.Чуть позже мы увидим, что такие коэффициенты можно найти,решив другую задачу линейного программирования.А на самом деле, нам и решать ее не нужно будет, поскольку,решая исходную задачу линейного программирования, мы решаеми эту задачу.Именно поэтому она и называется двойственной.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 20 / 72

Page 71: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Таким образом, 3100 — действительно оптимальное значение.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 20 / 72

Page 72: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Таким образом, 3100 — действительно оптимальное значение.Вопрос только в том, как именно мы догадались, какиенеравенства и с какими коэффициентами нужно сложить.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 20 / 72

Page 73: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Таким образом, 3100 — действительно оптимальное значение.Вопрос только в том, как именно мы догадались, какиенеравенства и с какими коэффициентами нужно сложить.Чуть позже мы увидим, что такие коэффициенты можно найти,решив другую задачу линейного программирования.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 20 / 72

Page 74: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Таким образом, 3100 — действительно оптимальное значение.Вопрос только в том, как именно мы догадались, какиенеравенства и с какими коэффициентами нужно сложить.Чуть позже мы увидим, что такие коэффициенты можно найти,решив другую задачу линейного программирования.А на самом деле, нам и решать ее не нужно будет, поскольку,решая исходную задачу линейного программирования, мы решаеми эту задачу.

Именно поэтому она и называется двойственной.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 20 / 72

Page 75: 20080224 efficientalgorithms kulikov_lecture14

Двойственность

Таким образом, 3100 — действительно оптимальное значение.Вопрос только в том, как именно мы догадались, какиенеравенства и с какими коэффициентами нужно сложить.Чуть позже мы увидим, что такие коэффициенты можно найти,решив другую задачу линейного программирования.А на самом деле, нам и решать ее не нужно будет, поскольку,решая исходную задачу линейного программирования, мы решаеми эту задачу.Именно поэтому она и называется двойственной.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 20 / 72

Page 76: 20080224 efficientalgorithms kulikov_lecture14

Целочисленные решения

Целочисленные решения

Итак, симплекс-метод выдает решение, но всегда ли оно намподходит?Нет, не всегда, поскольку вершина, в которой достигаетсяоптимум, может иметь дробные координаты.Конечно, можно полученные координаты округлить. Вбольшинстве практических задач это изменит значение целевойфункции несильно, но есть и задачи, в которых так просторешить проблему не удастся.На самом же деле, нахождение оптимального целочисленногорешения задачи линейного программирования — NP-труднаязадача.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 21 / 72

Page 77: 20080224 efficientalgorithms kulikov_lecture14

Целочисленные решения

Целочисленные решенияИтак, симплекс-метод выдает решение, но всегда ли оно намподходит?

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 21 / 72

Page 78: 20080224 efficientalgorithms kulikov_lecture14

Целочисленные решения

Целочисленные решенияИтак, симплекс-метод выдает решение, но всегда ли оно намподходит?Нет, не всегда, поскольку вершина, в которой достигаетсяоптимум, может иметь дробные координаты.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 21 / 72

Page 79: 20080224 efficientalgorithms kulikov_lecture14

Целочисленные решения

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

На самом же деле, нахождение оптимального целочисленногорешения задачи линейного программирования — NP-труднаязадача.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 21 / 72

Page 80: 20080224 efficientalgorithms kulikov_lecture14

Целочисленные решения

Целочисленные решенияИтак, симплекс-метод выдает решение, но всегда ли оно намподходит?Нет, не всегда, поскольку вершина, в которой достигаетсяоптимум, может иметь дробные координаты.Конечно, можно полученные координаты округлить. Вбольшинстве практических задач это изменит значение целевойфункции несильно, но есть и задачи, в которых так просторешить проблему не удастся.На самом же деле, нахождение оптимального целочисленногорешения задачи линейного программирования — NP-труднаязадача.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 21 / 72

Page 81: 20080224 efficientalgorithms kulikov_lecture14

Вариации

ВариацииОбщая задача линейного программирования имеет несколько степенейсвободы:

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

Мы покажем, что все эти вариации легко сводятся друг к другу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 22 / 72

Page 82: 20080224 efficientalgorithms kulikov_lecture14

Вариации

ВариацииОбщая задача линейного программирования имеет несколько степенейсвободы:

задача может быть как минимизационной, так имаксимизационной;

ограничения могут быть как равенствами, так и неравенствами;переменные могут быть как положительными, так и любыми.

Мы покажем, что все эти вариации легко сводятся друг к другу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 22 / 72

Page 83: 20080224 efficientalgorithms kulikov_lecture14

Вариации

ВариацииОбщая задача линейного программирования имеет несколько степенейсвободы:

задача может быть как минимизационной, так имаксимизационной;ограничения могут быть как равенствами, так и неравенствами;

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 22 / 72

Page 84: 20080224 efficientalgorithms kulikov_lecture14

Вариации

ВариацииОбщая задача линейного программирования имеет несколько степенейсвободы:

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

Мы покажем, что все эти вариации легко сводятся друг к другу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 22 / 72

Page 85: 20080224 efficientalgorithms kulikov_lecture14

Вариации

ВариацииОбщая задача линейного программирования имеет несколько степенейсвободы:

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

Мы покажем, что все эти вариации легко сводятся друг к другу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 22 / 72

Page 86: 20080224 efficientalgorithms kulikov_lecture14

Сведения

Сведения

Чтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −1.Неравенство

∑︀ni=1 aixi ≤ b можно заменить на следующую

систему: ∑︀ni=1 aixi + s = b

s ≥ 0

Равенство ax = b можно заменить на пару неравенств ax ≤ b иax ≥ b.Переменную x , для которой нет ограничения на знак, можнозаменить на две положительные переменные x+, x− ≥ 0, заменивкаждое вхождение x на x+ − x−.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 23 / 72

Page 87: 20080224 efficientalgorithms kulikov_lecture14

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −1.

Неравенство∑︀n

i=1 aixi ≤ b можно заменить на следующуюсистему: ∑︀n

i=1 aixi + s = bs ≥ 0

Равенство ax = b можно заменить на пару неравенств ax ≤ b иax ≥ b.Переменную x , для которой нет ограничения на знак, можнозаменить на две положительные переменные x+, x− ≥ 0, заменивкаждое вхождение x на x+ − x−.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 23 / 72

Page 88: 20080224 efficientalgorithms kulikov_lecture14

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −1.Неравенство

∑︀ni=1 aixi ≤ b можно заменить на следующую

систему: ∑︀ni=1 aixi + s = b

s ≥ 0

Равенство ax = b можно заменить на пару неравенств ax ≤ b иax ≥ b.Переменную x , для которой нет ограничения на знак, можнозаменить на две положительные переменные x+, x− ≥ 0, заменивкаждое вхождение x на x+ − x−.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 23 / 72

Page 89: 20080224 efficientalgorithms kulikov_lecture14

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −1.Неравенство

∑︀ni=1 aixi ≤ b можно заменить на следующую

систему: ∑︀ni=1 aixi + s = b

s ≥ 0

Равенство ax = b можно заменить на пару неравенств ax ≤ b иax ≥ b.

Переменную x , для которой нет ограничения на знак, можнозаменить на две положительные переменные x+, x− ≥ 0, заменивкаждое вхождение x на x+ − x−.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 23 / 72

Page 90: 20080224 efficientalgorithms kulikov_lecture14

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −1.Неравенство

∑︀ni=1 aixi ≤ b можно заменить на следующую

систему: ∑︀ni=1 aixi + s = b

s ≥ 0

Равенство ax = b можно заменить на пару неравенств ax ≤ b иax ≥ b.Переменную x , для которой нет ограничения на знак, можнозаменить на две положительные переменные x+, x− ≥ 0, заменивкаждое вхождение x на x+ − x−.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 23 / 72

Page 91: 20080224 efficientalgorithms kulikov_lecture14

Нормальная форма

Нормальная форма задачи линейного программированияИтак, с помощью данных сведений любую задачу линейногопрограммирования можно привести к нормальной форме, в которойвсе переменные неотрицательны, все ограничения записаныравенствами и требуется минимизировать целевую функцию.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 24 / 72

Page 92: 20080224 efficientalgorithms kulikov_lecture14

Пример приведения к нормальной форме

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

min−x1 − 6x2

x1 + s1 = 200x2 + s2 = 300

x1 + x2 + s3 = 400x1, x2, s1, s2, s3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 25 / 72

Page 93: 20080224 efficientalgorithms kulikov_lecture14

Матричная форма

Матричная форма

max cT xAx ≤ bx ≥ 0

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

⎛⎜⎝ 1 00 11 1

⎞⎟⎠(︃ x1

x2

)︃≤

⎛⎜⎝ 200300400

⎞⎟⎠

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 26 / 72

Page 94: 20080224 efficientalgorithms kulikov_lecture14

Матричная форма

Матричная форма

max cT xAx ≤ bx ≥ 0

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

⎛⎜⎝ 1 00 11 1

⎞⎟⎠(︃ x1

x2

)︃≤

⎛⎜⎝ 200300400

⎞⎟⎠

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 26 / 72

Page 95: 20080224 efficientalgorithms kulikov_lecture14

Почему целочисленное линейное программированиетрудно?

Почему целочисленное линейное программирование трудно?

Покажем, что задача 3-выполнимости может быть сведена кзадаче целочисленного линейного программирования.Для каждой переменной x входной формулы запишем дванеравенства: x ≥ 0, x ≤ 1.Для каждого клоза (x ∨ ¬y ∨ z) запишем такое неравенство:x + (1− y) + z ≥ 1.Если у полученной системы неравенств есть хотя бы однодопустимое решение, то ихсодная формула выполнима, инаоборот.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 27 / 72

Page 96: 20080224 efficientalgorithms kulikov_lecture14

Почему целочисленное линейное программированиетрудно?

Почему целочисленное линейное программирование трудно?Покажем, что задача 3-выполнимости может быть сведена кзадаче целочисленного линейного программирования.

Для каждой переменной x входной формулы запишем дванеравенства: x ≥ 0, x ≤ 1.Для каждого клоза (x ∨ ¬y ∨ z) запишем такое неравенство:x + (1− y) + z ≥ 1.Если у полученной системы неравенств есть хотя бы однодопустимое решение, то ихсодная формула выполнима, инаоборот.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 27 / 72

Page 97: 20080224 efficientalgorithms kulikov_lecture14

Почему целочисленное линейное программированиетрудно?

Почему целочисленное линейное программирование трудно?Покажем, что задача 3-выполнимости может быть сведена кзадаче целочисленного линейного программирования.Для каждой переменной x входной формулы запишем дванеравенства: x ≥ 0, x ≤ 1.

Для каждого клоза (x ∨ ¬y ∨ z) запишем такое неравенство:x + (1− y) + z ≥ 1.Если у полученной системы неравенств есть хотя бы однодопустимое решение, то ихсодная формула выполнима, инаоборот.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 27 / 72

Page 98: 20080224 efficientalgorithms kulikov_lecture14

Почему целочисленное линейное программированиетрудно?

Почему целочисленное линейное программирование трудно?Покажем, что задача 3-выполнимости может быть сведена кзадаче целочисленного линейного программирования.Для каждой переменной x входной формулы запишем дванеравенства: x ≥ 0, x ≤ 1.Для каждого клоза (x ∨ ¬y ∨ z) запишем такое неравенство:x + (1− y) + z ≥ 1.

Если у полученной системы неравенств есть хотя бы однодопустимое решение, то ихсодная формула выполнима, инаоборот.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 27 / 72

Page 99: 20080224 efficientalgorithms kulikov_lecture14

Почему целочисленное линейное программированиетрудно?

Почему целочисленное линейное программирование трудно?Покажем, что задача 3-выполнимости может быть сведена кзадаче целочисленного линейного программирования.Для каждой переменной x входной формулы запишем дванеравенства: x ≥ 0, x ≤ 1.Для каждого клоза (x ∨ ¬y ∨ z) запишем такое неравенство:x + (1− y) + z ≥ 1.Если у полученной системы неравенств есть хотя бы однодопустимое решение, то ихсодная формула выполнима, инаоборот.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 27 / 72

Page 100: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 28 / 72

Page 101: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи

Определение

Сетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v),называемое пропускной способностью (capacity), с двумявыделенными вершинами, называемыми исток s (source) и сток t(sink).Потоком (flow) в сети G = (V , E ) называется функция f : E → R,удовлетворяющая следующим свойствам:пропускные способности не нарушены:

∀(u, v) ∈ E , f (u, v) ≤ c(u, v);сохранение потока:

∀u ∈ V ∖ {s, t},∑︀

(w ,u)∈E f (w , u) =∑︀

(u,z)∈E f (u, z).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 29 / 72

Page 102: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи

ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v),называемое пропускной способностью (capacity), с двумявыделенными вершинами, называемыми исток s (source) и сток t(sink).

Потоком (flow) в сети G = (V , E ) называется функция f : E → R,удовлетворяющая следующим свойствам:пропускные способности не нарушены:

∀(u, v) ∈ E , f (u, v) ≤ c(u, v);сохранение потока:

∀u ∈ V ∖ {s, t},∑︀

(w ,u)∈E f (w , u) =∑︀

(u,z)∈E f (u, z).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 29 / 72

Page 103: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи

ОпределениеСетью (flow network) называется ориентированный граф, каждомуребру (u, v) которого сопоставлено неотрицательное число c(u, v),называемое пропускной способностью (capacity), с двумявыделенными вершинами, называемыми исток s (source) и сток t(sink).Потоком (flow) в сети G = (V , E ) называется функция f : E → R,удовлетворяющая следующим свойствам:пропускные способности не нарушены:

∀(u, v) ∈ E , f (u, v) ≤ c(u, v);сохранение потока:

∀u ∈ V ∖ {s, t},∑︀

(w ,u)∈E f (w , u) =∑︀

(u,z)∈E f (u, z).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 29 / 72

Page 104: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи (продолжение)

Определение

Величиной (value) |f | потока f называется сумма∑︀

(s,u)∈E f (s, u).Задача о максимальном потоке (maximum-flow problem)заключается в нахождении максимального потока в заданной сети.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 30 / 72

Page 105: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи (продолжение)

ОпределениеВеличиной (value) |f | потока f называется сумма

∑︀(s,u)∈E f (s, u).

Задача о максимальном потоке (maximum-flow problem)заключается в нахождении максимального потока в заданной сети.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 30 / 72

Page 106: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи (продолжение)

ОпределениеВеличиной (value) |f | потока f называется сумма

∑︀(s,u)∈E f (s, u).

Задача о максимальном потоке (maximum-flow problem)заключается в нахождении максимального потока в заданной сети.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 30 / 72

Page 107: 20080224 efficientalgorithms kulikov_lecture14

Формулировка задачи (продолжение)

ОпределениеВеличиной (value) |f | потока f называется сумма

∑︀(s,u)∈E f (s, u).

Задача о максимальном потоке (maximum-flow problem)заключается в нахождении максимального потока в заданной сети.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 30 / 72

Page 108: 20080224 efficientalgorithms kulikov_lecture14

Пример сети

s

a

b

c

d

e

t

3 10

3

4

5

2

1

11

2

5

Максимизироватьf (s, a) + f (s, b) + f (s, c),выполнив 27 ограничений: 11ограничений нанеотрицательность(например, f (s, a) ≥ 0), 11ограничений на пропускнуюспособность (f (s, a) ≤ 3) и 5на сохранение потока(f (s, c) + f (d , c) = f (c , e)).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 31 / 72

Page 109: 20080224 efficientalgorithms kulikov_lecture14

Пример потока

сеть поток

3 10

3

4

5

2

1

11

2

5

2 0

1

4

5

2

1

01

2

5

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 32 / 72

Page 110: 20080224 efficientalgorithms kulikov_lecture14

Как решать задачу о максимальном потоке?

Как решать задачу о максимальном потоке?

О симплекс-методе мы пока знаем лишь то, что он движется повершинам многогранника допустимых решений, улучшая значениецелевой функции.Соответствующий алгоритм для задачи о максимальном потоке:

I начать с пустого потокаI повторять: взять подходящий путь из s в t и увеличить поток по

ребрам этого пути настолько, насколько это возможно.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 33 / 72

Page 111: 20080224 efficientalgorithms kulikov_lecture14

Как решать задачу о максимальном потоке?

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

Соответствующий алгоритм для задачи о максимальном потоке:I начать с пустого потокаI повторять: взять подходящий путь из s в t и увеличить поток по

ребрам этого пути настолько, насколько это возможно.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 33 / 72

Page 112: 20080224 efficientalgorithms kulikov_lecture14

Как решать задачу о максимальном потоке?

Как решать задачу о максимальном потоке?О симплекс-методе мы пока знаем лишь то, что он движется повершинам многогранника допустимых решений, улучшая значениецелевой функции.Соответствующий алгоритм для задачи о максимальном потоке:

I начать с пустого потокаI повторять: взять подходящий путь из s в t и увеличить поток по

ребрам этого пути настолько, насколько это возможно.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 33 / 72

Page 113: 20080224 efficientalgorithms kulikov_lecture14

Как решать задачу о максимальном потоке?

Как решать задачу о максимальном потоке?О симплекс-методе мы пока знаем лишь то, что он движется повершинам многогранника допустимых решений, улучшая значениецелевой функции.Соответствующий алгоритм для задачи о максимальном потоке:

I начать с пустого потока

I повторять: взять подходящий путь из s в t и увеличить поток поребрам этого пути настолько, насколько это возможно.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 33 / 72

Page 114: 20080224 efficientalgorithms kulikov_lecture14

Как решать задачу о максимальном потоке?

Как решать задачу о максимальном потоке?О симплекс-методе мы пока знаем лишь то, что он движется повершинам многогранника допустимых решений, улучшая значениецелевой функции.Соответствующий алгоритм для задачи о максимальном потоке:

I начать с пустого потокаI повторять: взять подходящий путь из s в t и увеличить поток по

ребрам этого пути настолько, насколько это возможно.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 33 / 72

Page 115: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

рассмотрим простую сеть

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 116: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1 1

первый выбранный алгоритмом путь

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 117: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1 1

второй выбранный алгоритмом путь

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 118: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1 1

1 1

0

построенный поток

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 119: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1 1

1 1

0

очевидно, найденное решение оптимально

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 120: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1

1

1

но что делать, если первым выбран этот путь?

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 121: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1

1

1

тогда на следующем шаге алгоритм выберет этот путь

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 122: 20080224 efficientalgorithms kulikov_lecture14

Простой пример

1 1

1 1

1

1 1

1 1

0

и получит все тот же оптимальный поток

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 34 / 72

Page 123: 20080224 efficientalgorithms kulikov_lecture14

Таким образом

Таким образом

На каждом шаге алгоритм выбирает s − t путь, ребра (u, v)которого могут быть двух типов:

I (u, v) есть в исходной сети, но поток по нему меньше егопропускной способности (в этом случае по ребру можно увеличитьпоток на ≤ c(u, v)− f (u, v));

I обратное ребро (v , u) есть в исходной сети и по нему естьположительный поток (тогда можно увеличить поток по ребру(u, v) на ≤ f (v , u)).

Для поиска таких путей используется остаточная сеть.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 35 / 72

Page 124: 20080224 efficientalgorithms kulikov_lecture14

Таким образом

Таким образомНа каждом шаге алгоритм выбирает s − t путь, ребра (u, v)которого могут быть двух типов:

I (u, v) есть в исходной сети, но поток по нему меньше егопропускной способности (в этом случае по ребру можно увеличитьпоток на ≤ c(u, v)− f (u, v));

I обратное ребро (v , u) есть в исходной сети и по нему естьположительный поток (тогда можно увеличить поток по ребру(u, v) на ≤ f (v , u)).

Для поиска таких путей используется остаточная сеть.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 35 / 72

Page 125: 20080224 efficientalgorithms kulikov_lecture14

Таким образом

Таким образомНа каждом шаге алгоритм выбирает s − t путь, ребра (u, v)которого могут быть двух типов:

I (u, v) есть в исходной сети, но поток по нему меньше егопропускной способности (в этом случае по ребру можно увеличитьпоток на ≤ c(u, v)− f (u, v));

I обратное ребро (v , u) есть в исходной сети и по нему естьположительный поток (тогда можно увеличить поток по ребру(u, v) на ≤ f (v , u)).

Для поиска таких путей используется остаточная сеть.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 35 / 72

Page 126: 20080224 efficientalgorithms kulikov_lecture14

Таким образом

Таким образомНа каждом шаге алгоритм выбирает s − t путь, ребра (u, v)которого могут быть двух типов:

I (u, v) есть в исходной сети, но поток по нему меньше егопропускной способности (в этом случае по ребру можно увеличитьпоток на ≤ c(u, v)− f (u, v));

I обратное ребро (v , u) есть в исходной сети и по нему естьположительный поток (тогда можно увеличить поток по ребру(u, v) на ≤ f (v , u)).

Для поиска таких путей используется остаточная сеть.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 35 / 72

Page 127: 20080224 efficientalgorithms kulikov_lecture14

Таким образом

Таким образомНа каждом шаге алгоритм выбирает s − t путь, ребра (u, v)которого могут быть двух типов:

I (u, v) есть в исходной сети, но поток по нему меньше егопропускной способности (в этом случае по ребру можно увеличитьпоток на ≤ c(u, v)− f (u, v));

I обратное ребро (v , u) есть в исходной сети и по нему естьположительный поток (тогда можно увеличить поток по ребру(u, v) на ≤ f (v , u)).

Для поиска таких путей используется остаточная сеть.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 35 / 72

Page 128: 20080224 efficientalgorithms kulikov_lecture14

Остаточная сеть

ОпределениеОстаточной сетью (residual network) сети G = (V , E ), порожденнойпотоком f , называется сеть G f = (V , E f ) со следуюшимипропускными способностями:

c f (u, v) =

{︃c(u, v)− f (u, v), если (u, v) ∈ E и f (u, v) < c(u, v)

f (v , u), если (v , u) ∈ E и f (v , u) > 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 36 / 72

Page 129: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

поток остаточная сеть

10

3

4

1

1

23

2

1

5

5

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 37 / 72

Page 130: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

поток остаточная сеть

1

1

1

1

1

1

1

1

41

1

10

3

4

1

1

22

1

1

4

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 37 / 72

Page 131: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

поток остаточная сеть

2

2

1

1

2

1

21

2

1

41

2

10

3

4

1

1

2

4

4

3

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 37 / 72

Page 132: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

поток остаточная сеть

2

3

2

1

4

5

1

3

21

2

1

4

5

10

3

4

1

1

2

1

1

1

2

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 37 / 72

Page 133: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

поток остаточная сеть

2

4

2

1

5

5

1

4

21

2

1

5

1

1

5

101 2

3

1 1

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 37 / 72

Page 134: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

поток остаточная сеть

2

4

1

2

1

1

5

5

2 12

21

2

110

4

1

5

1

2

5

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 37 / 72

Page 135: 20080224 efficientalgorithms kulikov_lecture14

Минимальный разрез

Определение

(s, t)-разрезом ((s, t)-cut) сети G называется разбиениемножества вершин V на две части L и R , таких что s ∈ L и t ∈ R .Пропускной способностью разреза называется суммарнаяпропускная способность всех ребер из L в R .

Сертификат оптимальностиЛегко видеть, что величина любого потока не превосходитпропускной способности любого (s, t)-разреза.Более того, величина максимального потока равна пропускнойспособности минимального (s, t)-разреза.Другими словами, минимальный разрез является сертификатоммаксимальности потока.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 38 / 72

Page 136: 20080224 efficientalgorithms kulikov_lecture14

Минимальный разрез

Определение(s, t)-разрезом ((s, t)-cut) сети G называется разбиениемножества вершин V на две части L и R , таких что s ∈ L и t ∈ R .

Пропускной способностью разреза называется суммарнаяпропускная способность всех ребер из L в R .

Сертификат оптимальностиЛегко видеть, что величина любого потока не превосходитпропускной способности любого (s, t)-разреза.Более того, величина максимального потока равна пропускнойспособности минимального (s, t)-разреза.Другими словами, минимальный разрез является сертификатоммаксимальности потока.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 38 / 72

Page 137: 20080224 efficientalgorithms kulikov_lecture14

Минимальный разрез

Определение(s, t)-разрезом ((s, t)-cut) сети G называется разбиениемножества вершин V на две части L и R , таких что s ∈ L и t ∈ R .Пропускной способностью разреза называется суммарнаяпропускная способность всех ребер из L в R .

Сертификат оптимальности

Легко видеть, что величина любого потока не превосходитпропускной способности любого (s, t)-разреза.Более того, величина максимального потока равна пропускнойспособности минимального (s, t)-разреза.Другими словами, минимальный разрез является сертификатоммаксимальности потока.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 38 / 72

Page 138: 20080224 efficientalgorithms kulikov_lecture14

Минимальный разрез

Определение(s, t)-разрезом ((s, t)-cut) сети G называется разбиениемножества вершин V на две части L и R , таких что s ∈ L и t ∈ R .Пропускной способностью разреза называется суммарнаяпропускная способность всех ребер из L в R .

Сертификат оптимальностиЛегко видеть, что величина любого потока не превосходитпропускной способности любого (s, t)-разреза.

Более того, величина максимального потока равна пропускнойспособности минимального (s, t)-разреза.Другими словами, минимальный разрез является сертификатоммаксимальности потока.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 38 / 72

Page 139: 20080224 efficientalgorithms kulikov_lecture14

Минимальный разрез

Определение(s, t)-разрезом ((s, t)-cut) сети G называется разбиениемножества вершин V на две части L и R , таких что s ∈ L и t ∈ R .Пропускной способностью разреза называется суммарнаяпропускная способность всех ребер из L в R .

Сертификат оптимальностиЛегко видеть, что величина любого потока не превосходитпропускной способности любого (s, t)-разреза.Более того, величина максимального потока равна пропускнойспособности минимального (s, t)-разреза.

Другими словами, минимальный разрез является сертификатоммаксимальности потока.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 38 / 72

Page 140: 20080224 efficientalgorithms kulikov_lecture14

Минимальный разрез

Определение(s, t)-разрезом ((s, t)-cut) сети G называется разбиениемножества вершин V на две части L и R , таких что s ∈ L и t ∈ R .Пропускной способностью разреза называется суммарнаяпропускная способность всех ребер из L в R .

Сертификат оптимальностиЛегко видеть, что величина любого потока не превосходитпропускной способности любого (s, t)-разреза.Более того, величина максимального потока равна пропускнойспособности минимального (s, t)-разреза.Другими словами, минимальный разрез является сертификатоммаксимальности потока.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 38 / 72

Page 141: 20080224 efficientalgorithms kulikov_lecture14

Пример минимального разреза

3 10

3

4

5

2

1

11

2

5

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 39 / 72

Page 142: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 143: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

Доказательство

Пусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 144: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.

Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 145: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.

Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 146: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.

Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 147: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .

Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 148: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .

Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 149: 20080224 efficientalgorithms kulikov_lecture14

Доказательство

ЛеммаВеличина максимального потока равна пропускной способностиминимального (s, t)-разреза.

ДоказательствоПусть f — поток, найденный алгоритмом.Мы знаем, что в остаточной сети G f нет пути из s в t.Рассмотрим такой (s, t)-разрез: L — множество вершин,достижимых из s, R — множество оставшихся вершин.Ясно, что f (u, v) = c(u, v), где u ∈ L, v ∈ R .Также f (v , u) = 0, где u ∈ L, v ∈ R .Таким образом, поток через построенный разрез (равный |f |)совпадает с пропускной способностью этого разреза.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 40 / 72

Page 150: 20080224 efficientalgorithms kulikov_lecture14

Анализ времени работы

Анализ времени работы

Допустим, все пропускные способности ребер графа явлюятсяцелыми числами и ограничены сверху числом C .Каждая итерация выполняется за время O(|E |).Ясно, что на каждой итерации величина потока является целымчислом и каждый раз увеличивается хотя бы на 1.Значит, всего понадобится не более C |E | итераций.Если же каждый раз выбирать кратчайший путь в остаточнойсети, то время работы алгоритма будет O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 41 / 72

Page 151: 20080224 efficientalgorithms kulikov_lecture14

Анализ времени работы

Анализ времени работыДопустим, все пропускные способности ребер графа явлюятсяцелыми числами и ограничены сверху числом C .

Каждая итерация выполняется за время O(|E |).Ясно, что на каждой итерации величина потока является целымчислом и каждый раз увеличивается хотя бы на 1.Значит, всего понадобится не более C |E | итераций.Если же каждый раз выбирать кратчайший путь в остаточнойсети, то время работы алгоритма будет O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 41 / 72

Page 152: 20080224 efficientalgorithms kulikov_lecture14

Анализ времени работы

Анализ времени работыДопустим, все пропускные способности ребер графа явлюятсяцелыми числами и ограничены сверху числом C .Каждая итерация выполняется за время O(|E |).

Ясно, что на каждой итерации величина потока является целымчислом и каждый раз увеличивается хотя бы на 1.Значит, всего понадобится не более C |E | итераций.Если же каждый раз выбирать кратчайший путь в остаточнойсети, то время работы алгоритма будет O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 41 / 72

Page 153: 20080224 efficientalgorithms kulikov_lecture14

Анализ времени работы

Анализ времени работыДопустим, все пропускные способности ребер графа явлюятсяцелыми числами и ограничены сверху числом C .Каждая итерация выполняется за время O(|E |).Ясно, что на каждой итерации величина потока является целымчислом и каждый раз увеличивается хотя бы на 1.

Значит, всего понадобится не более C |E | итераций.Если же каждый раз выбирать кратчайший путь в остаточнойсети, то время работы алгоритма будет O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 41 / 72

Page 154: 20080224 efficientalgorithms kulikov_lecture14

Анализ времени работы

Анализ времени работыДопустим, все пропускные способности ребер графа явлюятсяцелыми числами и ограничены сверху числом C .Каждая итерация выполняется за время O(|E |).Ясно, что на каждой итерации величина потока является целымчислом и каждый раз увеличивается хотя бы на 1.Значит, всего понадобится не более C |E | итераций.

Если же каждый раз выбирать кратчайший путь в остаточнойсети, то время работы алгоритма будет O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 41 / 72

Page 155: 20080224 efficientalgorithms kulikov_lecture14

Анализ времени работы

Анализ времени работыДопустим, все пропускные способности ребер графа явлюятсяцелыми числами и ограничены сверху числом C .Каждая итерация выполняется за время O(|E |).Ясно, что на каждой итерации величина потока является целымчислом и каждый раз увеличивается хотя бы на 1.Значит, всего понадобится не более C |E | итераций.Если же каждый раз выбирать кратчайший путь в остаточнойсети, то время работы алгоритма будет O(|V | · |E |2).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 41 / 72

Page 156: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 42 / 72

Page 157: 20080224 efficientalgorithms kulikov_lecture14

Постановка задачи

Определение

Задача о максимальном паросочетании в двудольном графе(maximum bipartite matching problem) заключается в нахождении вданном двудольном графе G такого максимального подмножестваребер, никакие два из которых не имеют общего конца.Задача о совершенном паросочетании в двудольном графе(perfect bipartite matching problem) заключается в проверкесуществования в данном двудольном графе с равными размерамидолей паросочетания, покрывающего все вершины.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 43 / 72

Page 158: 20080224 efficientalgorithms kulikov_lecture14

Постановка задачи

ОпределениеЗадача о максимальном паросочетании в двудольном графе(maximum bipartite matching problem) заключается в нахождении вданном двудольном графе G такого максимального подмножестваребер, никакие два из которых не имеют общего конца.

Задача о совершенном паросочетании в двудольном графе(perfect bipartite matching problem) заключается в проверкесуществования в данном двудольном графе с равными размерамидолей паросочетания, покрывающего все вершины.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 43 / 72

Page 159: 20080224 efficientalgorithms kulikov_lecture14

Постановка задачи

ОпределениеЗадача о максимальном паросочетании в двудольном графе(maximum bipartite matching problem) заключается в нахождении вданном двудольном графе G такого максимального подмножестваребер, никакие два из которых не имеют общего конца.Задача о совершенном паросочетании в двудольном графе(perfect bipartite matching problem) заключается в проверкесуществования в данном двудольном графе с равными размерамидолей паросочетания, покрывающего все вершины.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 43 / 72

Page 160: 20080224 efficientalgorithms kulikov_lecture14

Постановка задачи

ОпределениеЗадача о максимальном паросочетании в двудольном графе(maximum bipartite matching problem) заключается в нахождении вданном двудольном графе G такого максимального подмножестваребер, никакие два из которых не имеют общего конца.Задача о совершенном паросочетании в двудольном графе(perfect bipartite matching problem) заключается в проверкесуществования в данном двудольном графе с равными размерамидолей паросочетания, покрывающего все вершины.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 43 / 72

Page 161: 20080224 efficientalgorithms kulikov_lecture14

Идея сведения

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 44 / 72

Page 162: 20080224 efficientalgorithms kulikov_lecture14

Идея сведения

1

1

1

11

1

1

1

1

1

1

1

1

1

1

1

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 44 / 72

Page 163: 20080224 efficientalgorithms kulikov_lecture14

Однако

Однако

Итак, достаточно найти максимальный поток.Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.Но найденный поток мог оказаться не целочисленным.К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 164: 20080224 efficientalgorithms kulikov_lecture14

Однако

ОднакоИтак, достаточно найти максимальный поток.

Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.Но найденный поток мог оказаться не целочисленным.К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 165: 20080224 efficientalgorithms kulikov_lecture14

Однако

ОднакоИтак, достаточно найти максимальный поток.Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.

Но найденный поток мог оказаться не целочисленным.К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 166: 20080224 efficientalgorithms kulikov_lecture14

Однако

ОднакоИтак, достаточно найти максимальный поток.Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.Но найденный поток мог оказаться не целочисленным.

К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 167: 20080224 efficientalgorithms kulikov_lecture14

Однако

ОднакоИтак, достаточно найти максимальный поток.Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.Но найденный поток мог оказаться не целочисленным.К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.

Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 168: 20080224 efficientalgorithms kulikov_lecture14

Однако

ОднакоИтак, достаточно найти максимальный поток.Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.Но найденный поток мог оказаться не целочисленным.К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.

Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 169: 20080224 efficientalgorithms kulikov_lecture14

Однако

ОднакоИтак, достаточно найти максимальный поток.Ясно, что найденный поток будет давать максимальноепаросочетание: если бы существовало лучшее паросочетание, мыбы могли по нему построить лучший поток.Но найденный поток мог оказаться не целочисленным.К счастью, задача о максимальном потоке обладает хорошимсвойством: если все пропускные способности целые, то инайденный алгоритмом поток будет целочисленным.Но это скорее исключение, чем правило. В общем случае найтиоптимальное целочисленное решение трудно.Трудно, на самом деле, даже проверить, есть ли хоть однодопустимое целочисленное решение.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 45 / 72

Page 170: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 46 / 72

Page 171: 20080224 efficientalgorithms kulikov_lecture14

Неформально

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 47 / 72

Page 172: 20080224 efficientalgorithms kulikov_lecture14

Неформально

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

Более того, существует разрез, пропускная способность которогосовпадает с величиной максимального потока.Таким образом, минимальный разрез является сертификатомоптимальности потока.Оказывается, для любой задачи линейного программированиясуществует двойственная задача с теми же свойствами.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 47 / 72

Page 173: 20080224 efficientalgorithms kulikov_lecture14

Неформально

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

Таким образом, минимальный разрез является сертификатомоптимальности потока.Оказывается, для любой задачи линейного программированиясуществует двойственная задача с теми же свойствами.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 47 / 72

Page 174: 20080224 efficientalgorithms kulikov_lecture14

Неформально

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

Оказывается, для любой задачи линейного программированиясуществует двойственная задача с теми же свойствами.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 47 / 72

Page 175: 20080224 efficientalgorithms kulikov_lecture14

Неформально

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 47 / 72

Page 176: 20080224 efficientalgorithms kulikov_lecture14

Сертификат оптимальности

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

Оптимальное значение 1900достигается в точке(x1, x2) = (100, 300).Как доказать его оптимальность?Сложив первое неравенство совторым, умноженным на 6, получим:x1 + 6x2 ≤ 2000.Сложив второе, умноженное на 5, стретьим, получим : x1 + 6x2 ≤ 1900.Такой сертификат есть для каждойзадачи линейногопрограммирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 48 / 72

Page 177: 20080224 efficientalgorithms kulikov_lecture14

Сертификат оптимальности

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

Оптимальное значение 1900достигается в точке(x1, x2) = (100, 300).

Как доказать его оптимальность?Сложив первое неравенство совторым, умноженным на 6, получим:x1 + 6x2 ≤ 2000.Сложив второе, умноженное на 5, стретьим, получим : x1 + 6x2 ≤ 1900.Такой сертификат есть для каждойзадачи линейногопрограммирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 48 / 72

Page 178: 20080224 efficientalgorithms kulikov_lecture14

Сертификат оптимальности

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

Оптимальное значение 1900достигается в точке(x1, x2) = (100, 300).Как доказать его оптимальность?

Сложив первое неравенство совторым, умноженным на 6, получим:x1 + 6x2 ≤ 2000.Сложив второе, умноженное на 5, стретьим, получим : x1 + 6x2 ≤ 1900.Такой сертификат есть для каждойзадачи линейногопрограммирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 48 / 72

Page 179: 20080224 efficientalgorithms kulikov_lecture14

Сертификат оптимальности

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

Оптимальное значение 1900достигается в точке(x1, x2) = (100, 300).Как доказать его оптимальность?Сложив первое неравенство совторым, умноженным на 6, получим:x1 + 6x2 ≤ 2000.

Сложив второе, умноженное на 5, стретьим, получим : x1 + 6x2 ≤ 1900.Такой сертификат есть для каждойзадачи линейногопрограммирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 48 / 72

Page 180: 20080224 efficientalgorithms kulikov_lecture14

Сертификат оптимальности

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

Оптимальное значение 1900достигается в точке(x1, x2) = (100, 300).Как доказать его оптимальность?Сложив первое неравенство совторым, умноженным на 6, получим:x1 + 6x2 ≤ 2000.Сложив второе, умноженное на 5, стретьим, получим : x1 + 6x2 ≤ 1900.

Такой сертификат есть для каждойзадачи линейногопрограммирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 48 / 72

Page 181: 20080224 efficientalgorithms kulikov_lecture14

Сертификат оптимальности

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

Оптимальное значение 1900достигается в точке(x1, x2) = (100, 300).Как доказать его оптимальность?Сложив первое неравенство совторым, умноженным на 6, получим:x1 + 6x2 ≤ 2000.Сложив второе, умноженное на 5, стретьим, получим : x1 + 6x2 ≤ 1900.Такой сертификат есть для каждойзадачи линейногопрограммирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 48 / 72

Page 182: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?

x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 183: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400

Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 184: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.

Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 185: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.

Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 186: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.

Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 187: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.

Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 188: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?x1 ≤ 200, x2 ≤ 300, x1 + x2 ≤ 400Обозначим через y1, y2, y3 коэффициенты, на которые нужнодомножить данные неравенства, чтобы получить сертификат.Умножив и сложив:(y1 + y3)x1 + (y2 + y3)x2 ≤ 200y1 + 300y2 + 400y3.Мы хотим, чтобы левая часть этого неравенства выглядела какнаша целевая функция, то есть чтобы y1 + y3 и y2 + y3 былиравны 1 и 6, соответственно.Впрочем, если y1 + y3 ≥ 1 и y2 + y3 ≥ 6, то приведенное вышенеравенство тоже даст некоторую оценку.Например, (y1, y2, y3) = (5, 3, 6) удовлетворяет всемограничениям, но дает лишь верхнюю оценку 4300 на значениеисходной целевой функции.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 49 / 72

Page 189: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?

Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 200y1 + 300y2 + 400y3 для (y1, y2, y3),удовлетворяющих ограничениям выше.А это и есть задача линейного программирования:

min 200y1 + 300y2 + 400y3

y1 + y3 ≥ 1y2 + y3 ≥ 6

y1, y2, y3 ≥ 0

Ясно, что любое допустимое значение целевой функции являетсяверхней оценкой на значение целевой функции исходной задачи.Значит, если найти равные значения целевых функций обеихзадач, то это значение будет оптимально для них обеих.Например, (x1, x2) = (100, 300), (y1, y2, y3) = (0, 5, 1).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 50 / 72

Page 190: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 200y1 + 300y2 + 400y3 для (y1, y2, y3),удовлетворяющих ограничениям выше.

А это и есть задача линейного программирования:

min 200y1 + 300y2 + 400y3

y1 + y3 ≥ 1y2 + y3 ≥ 6

y1, y2, y3 ≥ 0

Ясно, что любое допустимое значение целевой функции являетсяверхней оценкой на значение целевой функции исходной задачи.Значит, если найти равные значения целевых функций обеихзадач, то это значение будет оптимально для них обеих.Например, (x1, x2) = (100, 300), (y1, y2, y3) = (0, 5, 1).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 50 / 72

Page 191: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 200y1 + 300y2 + 400y3 для (y1, y2, y3),удовлетворяющих ограничениям выше.А это и есть задача линейного программирования:

min 200y1 + 300y2 + 400y3

y1 + y3 ≥ 1y2 + y3 ≥ 6

y1, y2, y3 ≥ 0

Ясно, что любое допустимое значение целевой функции являетсяверхней оценкой на значение целевой функции исходной задачи.Значит, если найти равные значения целевых функций обеихзадач, то это значение будет оптимально для них обеих.Например, (x1, x2) = (100, 300), (y1, y2, y3) = (0, 5, 1).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 50 / 72

Page 192: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 200y1 + 300y2 + 400y3 для (y1, y2, y3),удовлетворяющих ограничениям выше.А это и есть задача линейного программирования:

min 200y1 + 300y2 + 400y3

y1 + y3 ≥ 1y2 + y3 ≥ 6

y1, y2, y3 ≥ 0

Ясно, что любое допустимое значение целевой функции являетсяверхней оценкой на значение целевой функции исходной задачи.

Значит, если найти равные значения целевых функций обеихзадач, то это значение будет оптимально для них обеих.Например, (x1, x2) = (100, 300), (y1, y2, y3) = (0, 5, 1).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 50 / 72

Page 193: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 200y1 + 300y2 + 400y3 для (y1, y2, y3),удовлетворяющих ограничениям выше.А это и есть задача линейного программирования:

min 200y1 + 300y2 + 400y3

y1 + y3 ≥ 1y2 + y3 ≥ 6

y1, y2, y3 ≥ 0

Ясно, что любое допустимое значение целевой функции являетсяверхней оценкой на значение целевой функции исходной задачи.Значит, если найти равные значения целевых функций обеихзадач, то это значение будет оптимально для них обеих.

Например, (x1, x2) = (100, 300), (y1, y2, y3) = (0, 5, 1).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 50 / 72

Page 194: 20080224 efficientalgorithms kulikov_lecture14

Как найти такой сертификат?

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 200y1 + 300y2 + 400y3 для (y1, y2, y3),удовлетворяющих ограничениям выше.А это и есть задача линейного программирования:

min 200y1 + 300y2 + 400y3

y1 + y3 ≥ 1y2 + y3 ≥ 6

y1, y2, y3 ≥ 0

Ясно, что любое допустимое значение целевой функции являетсяверхней оценкой на значение целевой функции исходной задачи.Значит, если найти равные значения целевых функций обеихзадач, то это значение будет оптимально для них обеих.Например, (x1, x2) = (100, 300), (y1, y2, y3) = (0, 5, 1).

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 50 / 72

Page 195: 20080224 efficientalgorithms kulikov_lecture14

Двойственная задача

Исходная задачаmax cT xAx ≤ bx ≥ 0

Двойственная задача

min yTbyTA ≥ cT

y ≥ 0

ЛеммаЕсли у исходной задачи есть ограниченное оптимальное решение, тооно есть и у двойственной и значения целевых функций совпадают.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 51 / 72

Page 196: 20080224 efficientalgorithms kulikov_lecture14

Двойственная задача

Исходная задачаmax cT xAx ≤ bx ≥ 0

Двойственная задача

min yTbyTA ≥ cT

y ≥ 0

ЛеммаЕсли у исходной задачи есть ограниченное оптимальное решение, тооно есть и у двойственной и значения целевых функций совпадают.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 51 / 72

Page 197: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 52 / 72

Page 198: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 53 / 72

Page 199: 20080224 efficientalgorithms kulikov_lecture14

Общая схема

Общая схема

выбрать произвольную вершину v многогранника допустимыхрешенийпока у v есть соседняя вершина v ′, в которой достигается лучшеезначение целевой функции, заменять v на v ′

Осталось научиться находить вершины и их соседей.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 54 / 72

Page 200: 20080224 efficientalgorithms kulikov_lecture14

Общая схема

Общая схемавыбрать произвольную вершину v многогранника допустимыхрешений

пока у v есть соседняя вершина v ′, в которой достигается лучшеезначение целевой функции, заменять v на v ′

Осталось научиться находить вершины и их соседей.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 54 / 72

Page 201: 20080224 efficientalgorithms kulikov_lecture14

Общая схема

Общая схемавыбрать произвольную вершину v многогранника допустимыхрешенийпока у v есть соседняя вершина v ′, в которой достигается лучшеезначение целевой функции, заменять v на v ′

Осталось научиться находить вершины и их соседей.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 54 / 72

Page 202: 20080224 efficientalgorithms kulikov_lecture14

Общая схема

Общая схемавыбрать произвольную вершину v многогранника допустимыхрешенийпока у v есть соседняя вершина v ′, в которой достигается лучшеезначение целевой функции, заменять v на v ′

Осталось научиться находить вершины и их соседей.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 54 / 72

Page 203: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 204: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200

x2 ≤ 300x1 + x2 + x3 ≤ 400

x2 + 3x3 ≤ 600x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 205: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 206: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400

x2 + 3x3 ≤ 600x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 207: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 208: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0

x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 209: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0

x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 210: 20080224 efficientalgorithms kulikov_lecture14

Многогранник допуcтимых решений

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 55 / 72

Page 211: 20080224 efficientalgorithms kulikov_lecture14

Вершина

x1

x2

x3

Вершина — это точкапересечения несколькихгиперплоскостей.Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 56 / 72

Page 212: 20080224 efficientalgorithms kulikov_lecture14

Вершина

x1

x2

x3

Вершина — это точкапересечения несколькихгиперплоскостей.

Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 56 / 72

Page 213: 20080224 efficientalgorithms kulikov_lecture14

Вершина

x1

x2

x3

AВершина — это точкапересечения несколькихгиперплоскостей.Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.

А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 56 / 72

Page 214: 20080224 efficientalgorithms kulikov_lecture14

Вершина

x1

x2

x3

Вершина — это точкапересечения несколькихгиперплоскостей.Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 56 / 72

Page 215: 20080224 efficientalgorithms kulikov_lecture14

Формально

Формально

Итак, если некоторое подмножество ограничений обращаются вравенства в единственной точке, то эту точку мы будем называтьвершиной.Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 57 / 72

Page 216: 20080224 efficientalgorithms kulikov_lecture14

Формально

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

Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 57 / 72

Page 217: 20080224 efficientalgorithms kulikov_lecture14

Формально

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

Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 57 / 72

Page 218: 20080224 efficientalgorithms kulikov_lecture14

Формально

ФормальноИтак, если некоторое подмножество ограничений обращаются вравенства в единственной точке, то эту точку мы будем называтьвершиной.Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.

Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 57 / 72

Page 219: 20080224 efficientalgorithms kulikov_lecture14

Формально

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

Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 57 / 72

Page 220: 20080224 efficientalgorithms kulikov_lecture14

Формально

ФормальноИтак, если некоторое подмножество ограничений обращаются вравенства в единственной точке, то эту точку мы будем называтьвершиной.Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 57 / 72

Page 221: 20080224 efficientalgorithms kulikov_lecture14

Детали

Детали

На каждой итерации алгоритм проверяет, является ли текущаявершина оптимальной, и, если нет, определяет, в какую вершинуперейти.Мы покажем, что данные операции легко выполнимы, еслитекущая вершина является началом координат.В противном же случае мы просто передвинем начало координат.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 58 / 72

Page 222: 20080224 efficientalgorithms kulikov_lecture14

Детали

ДеталиНа каждой итерации алгоритм проверяет, является ли текущаявершина оптимальной, и, если нет, определяет, в какую вершинуперейти.

Мы покажем, что данные операции легко выполнимы, еслитекущая вершина является началом координат.В противном же случае мы просто передвинем начало координат.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 58 / 72

Page 223: 20080224 efficientalgorithms kulikov_lecture14

Детали

ДеталиНа каждой итерации алгоритм проверяет, является ли текущаявершина оптимальной, и, если нет, определяет, в какую вершинуперейти.Мы покажем, что данные операции легко выполнимы, еслитекущая вершина является началом координат.

В противном же случае мы просто передвинем начало координат.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 58 / 72

Page 224: 20080224 efficientalgorithms kulikov_lecture14

Детали

ДеталиНа каждой итерации алгоритм проверяет, является ли текущаявершина оптимальной, и, если нет, определяет, в какую вершинуперейти.Мы покажем, что данные операции легко выполнимы, еслитекущая вершина является началом координат.В противном же случае мы просто передвинем начало координат.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 58 / 72

Page 225: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координат

Итак, рассмотрим задачу линейного программирования:max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 226: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 227: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.

Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 228: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).

Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 229: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .

Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 230: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.

Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 231: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?

Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 232: 20080224 efficientalgorithms kulikov_lecture14

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 59 / 72

Page 233: 20080224 efficientalgorithms kulikov_lecture14

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?

Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 60 / 72

Page 234: 20080224 efficientalgorithms kulikov_lecture14

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.

Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 60 / 72

Page 235: 20080224 efficientalgorithms kulikov_lecture14

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .

Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 60 / 72

Page 236: 20080224 efficientalgorithms kulikov_lecture14

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .

Все xi можно выразить через y и переписать систему.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 60 / 72

Page 237: 20080224 efficientalgorithms kulikov_lecture14

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 60 / 72

Page 238: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

Исходная задача

max 2x1 + 5x2

2x1 − x2 ≤ 4 (1)x1 + 2x2 ≤ 9 (2)−x1 + x2 ≤ 3 (3)

x1 ≥ 0 (4)x2 ≥ 0 (5)

текущая вершина: {(4), (5)}(начало координат)значение целевой функции: 0шаг: увеличить x2 до 3; (3)обращается в равенствоновая вершина {(4), (3)} имеетлокальные координаты (y1, y2):

y1 = x1, y2 = 3 + x1 − x2

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 61 / 72

Page 239: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

Переписанная задача

max 15 + 7y1 − 5y2

y1 + y2 ≤ 7 (1)3y1 − 2y2 ≤ 3 (2)

y2 ≥ 0 (3)y1 ≥ 0 (4)

−y1 + y2 ≤ 3 (5)

текущая вершина: {(4), (3)}значение целевой функции: 15шаг: увеличить y1 до 1; (2)обращается в равенствоновая вершина {(2), (3)} имеетлокальные координаты (z1, z2):

z1 = 3− 3y1 + 2y2, z2 = y2

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 61 / 72

Page 240: 20080224 efficientalgorithms kulikov_lecture14

Пример работы алгоритма

Переписанная задача

max 22− 73z1 − 1

3z2

−13z1 + 5

3z2 ≤ 6 (1)z1 ≥ 0 (2)z2 ≥ 0 (3)

13z1 − 2

3z2 ≤ 1 (4)13z1 + 1

3z2 ≤ 4 (5)

текущая вершина: {(2), (3)}значение целевой функции: 22оптимальная вершинарешив (2), (3) в исходнойзадаче, найдем оптимальнуювершину (x1, x2) = (1, 4)

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 61 / 72

Page 241: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 62 / 72

Page 242: 20080224 efficientalgorithms kulikov_lecture14

Начальная вершина

Начальная вершина

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 63 / 72

Page 243: 20080224 efficientalgorithms kulikov_lecture14

Начальная вершина

Начальная вершинаПока что каждый раз мы использовали начало координат вкачестве начальной вершины.

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 63 / 72

Page 244: 20080224 efficientalgorithms kulikov_lecture14

Начальная вершина

Начальная вершинаПока что каждый раз мы использовали начало координат вкачестве начальной вершины.Но начало координат может и не быть допустимым решением.

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 63 / 72

Page 245: 20080224 efficientalgorithms kulikov_lecture14

Начальная вершина

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

Для этого запишем нашу задачу в таком виде:min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 63 / 72

Page 246: 20080224 efficientalgorithms kulikov_lecture14

Начальная вершина

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 63 / 72

Page 247: 20080224 efficientalgorithms kulikov_lecture14

Начальная вершина

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 63 / 72

Page 248: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершины

Запишем тогда такую задачу:I Для каждого равенства системы Ax = b введем новую переменную

zi ≥ 0.I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 249: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 250: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 251: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.

I В качестве целевой функции, которую нужно минимизировать,рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 252: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 253: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.

Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 254: 20080224 efficientalgorithms kulikov_lecture14

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 64 / 72

Page 255: 20080224 efficientalgorithms kulikov_lecture14

Решение новой задачи

Решение новой задачи

Итак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 65 / 72

Page 256: 20080224 efficientalgorithms kulikov_lecture14

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.

Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 65 / 72

Page 257: 20080224 efficientalgorithms kulikov_lecture14

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0

Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 65 / 72

Page 258: 20080224 efficientalgorithms kulikov_lecture14

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.

Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 65 / 72

Page 259: 20080224 efficientalgorithms kulikov_lecture14

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.

Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 65 / 72

Page 260: 20080224 efficientalgorithms kulikov_lecture14

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 65 / 72

Page 261: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 66 / 72

Page 262: 20080224 efficientalgorithms kulikov_lecture14

Вырожденная вершина

x1

x2

x3

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).Такая вершина являетсясвоим собственнымсоседом.Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 67 / 72

Page 263: 20080224 efficientalgorithms kulikov_lecture14

Вырожденная вершина

x1

x2

x3

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).

Такая вершина являетсясвоим собственнымсоседом.Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 67 / 72

Page 264: 20080224 efficientalgorithms kulikov_lecture14

Вырожденная вершина

x1

x2

x3

B

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).Такая вершина являетсясвоим собственнымсоседом.

Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 67 / 72

Page 265: 20080224 efficientalgorithms kulikov_lecture14

Вырожденная вершина

x1

x2

x3

B

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).Такая вершина являетсясвоим собственнымсоседом.Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 67 / 72

Page 266: 20080224 efficientalgorithms kulikov_lecture14

Как симплекс-метод распознает неограниченные задачи?

Как симплекс-метод распознает неограниченные задачи?

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 68 / 72

Page 267: 20080224 efficientalgorithms kulikov_lecture14

Как симплекс-метод распознает неограниченные задачи?

Как симплекс-метод распознает неограниченные задачи?При поиске соседней вершины алгоритм заменяет одно изравенств, задающих текущую вершину.

Полученная система может иметь бесконечное число решений.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 68 / 72

Page 268: 20080224 efficientalgorithms kulikov_lecture14

Как симплекс-метод распознает неограниченные задачи?

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 68 / 72

Page 269: 20080224 efficientalgorithms kulikov_lecture14

План лекции

1 Введение

2 Потоки в сетях

3 Максимальное паросочетание в двудольном графе

4 Двойственность

5 Симплекс-методАлгоритмНачальная вершинаВырожденные вершиныВремя работы

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 69 / 72

Page 270: 20080224 efficientalgorithms kulikov_lecture14

Время работы

Время работы

В общем случае количество вершин, которые алгоритму придетсяперебрать ограничено сверху числом

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.Такие задачи, однако, на практике не возникают, и напрактических задачах симплекс-метод работает довольно быстро.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 70 / 72

Page 271: 20080224 efficientalgorithms kulikov_lecture14

Время работы

Время работыВ общем случае количество вершин, которые алгоритму придетсяперебрать ограничено сверху числом

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.Такие задачи, однако, на практике не возникают, и напрактических задачах симплекс-метод работает довольно быстро.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 70 / 72

Page 272: 20080224 efficientalgorithms kulikov_lecture14

Время работы

Время работыВ общем случае количество вершин, которые алгоритму придетсяперебрать ограничено сверху числом

(︀m+nn

)︀.

Но это выражение экспоненциально от n.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 70 / 72

Page 273: 20080224 efficientalgorithms kulikov_lecture14

Время работы

Время работыВ общем случае количество вершин, которые алгоритму придетсяперебрать ограничено сверху числом

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 70 / 72

Page 274: 20080224 efficientalgorithms kulikov_lecture14

Время работы

Время работыВ общем случае количество вершин, которые алгоритму придетсяперебрать ограничено сверху числом

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.Такие задачи, однако, на практике не возникают, и напрактических задачах симплекс-метод работает довольно быстро.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 70 / 72

Page 275: 20080224 efficientalgorithms kulikov_lecture14

Время работы

Время работыВ общем случае количество вершин, которые алгоритму придетсяперебрать ограничено сверху числом

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.Такие задачи, однако, на практике не возникают, и напрактических задачах симплекс-метод работает довольно быстро.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 70 / 72

Page 276: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?

Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 277: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.

Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 278: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.

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

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 279: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.

Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 280: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.

Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 281: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.

Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 282: 20080224 efficientalgorithms kulikov_lecture14

Что мы узнали за сегодня?

Что мы узнали за сегодня?Задачей линейного программирования называется задача, вкоторой требуется выполнить линейные ограничения имаксимизировать линейную функцию.Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 71 / 72

Page 283: 20080224 efficientalgorithms kulikov_lecture14

Спасибо за внимание!

А. Куликов (CS клуб при ПОМИ) 14. Линейное программирование 72 / 72