2012 04 02_algorithms2012_lecture08

272
План лекции 1 Введение 2 Потоки в сетях 3 Максимальное паросочетание в двудольном графе 4 Двойственность 5 Симплекс-метод Алгоритм Начальная вершина Вырожденные вершины Время работы А. Куликов (CS центр) Линейное программирование 02.04.2012 1 / 65

Transcript of 2012 04 02_algorithms2012_lecture08

Page 1: 2012 04 02_algorithms2012_lecture08

План лекции

1 Введение

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 1 / 65

Page 2: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 2 / 65

Page 3: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 2 / 65

Page 4: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 2 / 65

Page 5: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 2 / 65

Page 6: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 2 / 65

Page 7: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 2 / 65

Page 8: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 3 / 65

Page 9: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 4 / 65

Page 10: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 4 / 65

Page 11: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 4 / 65

Page 12: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 4 / 65

Page 13: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 4 / 65

Page 14: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 4 / 65

Page 15: 2012 04 02_algorithms2012_lecture08

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

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

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

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

x1 + x2 ≤ 400x1, x2 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 5 / 65

Page 16: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 6 / 65

Page 17: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 6 / 65

Page 18: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 6 / 65

Page 19: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 6 / 65

Page 20: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS центр) Линейное программирование 02.04.2012 7 / 65

Page 21: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS центр) Линейное программирование 02.04.2012 7 / 65

Page 22: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 8 / 65

Page 23: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 8 / 65

Page 24: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 8 / 65

Page 25: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 8 / 65

Page 26: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 8 / 65

Page 27: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS центр) Линейное программирование 02.04.2012 9 / 65

Page 28: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

c = 600

А. Куликов (CS центр) Линейное программирование 02.04.2012 9 / 65

Page 29: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

c = 600

c = 1200

А. Куликов (CS центр) Линейное программирование 02.04.2012 9 / 65

Page 30: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

c = 600

c = 1200

c = 1500

А. Куликов (CS центр) Линейное программирование 02.04.2012 9 / 65

Page 31: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

c = 600

c = 1200

c = 1500

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 9 / 65

Page 32: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 10 / 65

Page 33: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

max x1 + x2x1, x2 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 10 / 65

Page 34: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 10 / 65

Page 35: 2012 04 02_algorithms2012_lecture08

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

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

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

x ≤ 1, x ≥ 2.

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

max x1 + x2x1, x2 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 10 / 65

Page 36: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 10 / 65

Page 37: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 11 / 65

Page 38: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 11 / 65

Page 39: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 11 / 65

Page 40: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 11 / 65

Page 41: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 11 / 65

Page 42: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

А. Куликов (CS центр) Линейное программирование 02.04.2012 12 / 65

Page 43: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

200

А. Куликов (CS центр) Линейное программирование 02.04.2012 12 / 65

Page 44: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

200

1400

А. Куликов (CS центр) Линейное программирование 02.04.2012 12 / 65

Page 45: 2012 04 02_algorithms2012_lecture08

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

x1

x2

100 200 300 400

100

200

300

400

200

1400

1900

А. Куликов (CS центр) Линейное программирование 02.04.2012 12 / 65

Page 46: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 13 / 65

Page 47: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 13 / 65

Page 48: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 13 / 65

Page 49: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 13 / 65

Page 50: 2012 04 02_algorithms2012_lecture08

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

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

x1 ≤ 200x2 ≤ 300

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 14 / 65

Page 51: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 15 / 65

Page 52: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 15 / 65

Page 53: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 15 / 65

Page 54: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 15 / 65

Page 55: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 15 / 65

Page 56: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 15 / 65

Page 57: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

А. Куликов (CS центр) Линейное программирование 02.04.2012 16 / 65

Page 58: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

200

А. Куликов (CS центр) Линейное программирование 02.04.2012 16 / 65

Page 59: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

200

1400

А. Куликов (CS центр) Линейное программирование 02.04.2012 16 / 65

Page 60: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

200

1400

2800

А. Куликов (CS центр) Линейное программирование 02.04.2012 16 / 65

Page 61: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

200

1400

2800

3100

А. Куликов (CS центр) Линейное программирование 02.04.2012 16 / 65

Page 62: 2012 04 02_algorithms2012_lecture08

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

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

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 центр) Линейное программирование 02.04.2012 17 / 65

Page 63: 2012 04 02_algorithms2012_lecture08

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

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

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 центр) Линейное программирование 02.04.2012 17 / 65

Page 64: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 18 / 65

Page 65: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 18 / 65

Page 66: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 18 / 65

Page 67: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 18 / 65

Page 68: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 18 / 65

Page 69: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 18 / 65

Page 70: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 19 / 65

Page 71: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 19 / 65

Page 72: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 19 / 65

Page 73: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 19 / 65

Page 74: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 19 / 65

Page 75: 2012 04 02_algorithms2012_lecture08

Вариации

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 20 / 65

Page 76: 2012 04 02_algorithms2012_lecture08

Вариации

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 20 / 65

Page 77: 2012 04 02_algorithms2012_lecture08

Вариации

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 20 / 65

Page 78: 2012 04 02_algorithms2012_lecture08

Вариации

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 20 / 65

Page 79: 2012 04 02_algorithms2012_lecture08

Вариации

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 20 / 65

Page 80: 2012 04 02_algorithms2012_lecture08

Сведения

Сведения

Чтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −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 центр) Линейное программирование 02.04.2012 21 / 65

Page 81: 2012 04 02_algorithms2012_lecture08

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −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 центр) Линейное программирование 02.04.2012 21 / 65

Page 82: 2012 04 02_algorithms2012_lecture08

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −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 центр) Линейное программирование 02.04.2012 21 / 65

Page 83: 2012 04 02_algorithms2012_lecture08

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −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 центр) Линейное программирование 02.04.2012 21 / 65

Page 84: 2012 04 02_algorithms2012_lecture08

Сведения

СведенияЧтобы изменить минимизационную задачу на максимизационную,достаточно домножить коэффициенты целевой функции на −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 центр) Линейное программирование 02.04.2012 21 / 65

Page 85: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 22 / 65

Page 86: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 23 / 65

Page 87: 2012 04 02_algorithms2012_lecture08

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

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

max cT xAx ≤ bx ≥ 0

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

⎛⎜⎝ 1 00 11 1

⎞⎟⎠(︃ x1

x2

)︃≤

⎛⎜⎝ 200300400

⎞⎟⎠

А. Куликов (CS центр) Линейное программирование 02.04.2012 24 / 65

Page 88: 2012 04 02_algorithms2012_lecture08

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

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

max cT xAx ≤ bx ≥ 0

max x1 + 6x2

x1 ≤ 200x2 ≤ 300

x1 + x2 ≤ 400x1, x2 ≥ 0

⎛⎜⎝ 1 00 11 1

⎞⎟⎠(︃ x1

x2

)︃≤

⎛⎜⎝ 200300400

⎞⎟⎠

А. Куликов (CS центр) Линейное программирование 02.04.2012 24 / 65

Page 89: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 25 / 65

Page 90: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 25 / 65

Page 91: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 25 / 65

Page 92: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 25 / 65

Page 93: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 25 / 65

Page 94: 2012 04 02_algorithms2012_lecture08

План лекции

1 Введение

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 26 / 65

Page 95: 2012 04 02_algorithms2012_lecture08

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

Определение

Сетью (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 центр) Линейное программирование 02.04.2012 27 / 65

Page 96: 2012 04 02_algorithms2012_lecture08

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

ОпределениеСетью (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 центр) Линейное программирование 02.04.2012 27 / 65

Page 97: 2012 04 02_algorithms2012_lecture08

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

ОпределениеСетью (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 центр) Линейное программирование 02.04.2012 27 / 65

Page 98: 2012 04 02_algorithms2012_lecture08

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

Определение

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 28 / 65

Page 99: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 28 / 65

Page 100: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 28 / 65

Page 101: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 28 / 65

Page 102: 2012 04 02_algorithms2012_lecture08

Пример сети

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 центр) Линейное программирование 02.04.2012 29 / 65

Page 103: 2012 04 02_algorithms2012_lecture08

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

сеть поток

3 10

3

4

5

2

1

11

2

5

2 0

1

4

5

2

1

01

2

5

А. Куликов (CS центр) Линейное программирование 02.04.2012 30 / 65

Page 104: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 31 / 65

Page 105: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 31 / 65

Page 106: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 31 / 65

Page 107: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 31 / 65

Page 108: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 31 / 65

Page 109: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 110: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1 1

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 111: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1 1

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 112: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1 1

1 1

0

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 113: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1 1

1 1

0

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 114: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1

1

1

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 115: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1

1

1

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 116: 2012 04 02_algorithms2012_lecture08

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

1 1

1 1

1

1 1

1 1

0

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 32 / 65

Page 117: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 33 / 65

Page 118: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 33 / 65

Page 119: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 33 / 65

Page 120: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 33 / 65

Page 121: 2012 04 02_algorithms2012_lecture08

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

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 33 / 65

Page 122: 2012 04 02_algorithms2012_lecture08

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

ОпределениеОстаточной сетью (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 центр) Линейное программирование 02.04.2012 34 / 65

Page 123: 2012 04 02_algorithms2012_lecture08

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

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

10

3

4

1

1

23

2

1

5

5

А. Куликов (CS центр) Линейное программирование 02.04.2012 35 / 65

Page 124: 2012 04 02_algorithms2012_lecture08

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

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

1

1

1

1

1

1

1

1

41

1

10

3

4

1

1

22

1

1

4

А. Куликов (CS центр) Линейное программирование 02.04.2012 35 / 65

Page 125: 2012 04 02_algorithms2012_lecture08

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

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

2

2

1

1

2

1

21

2

1

41

2

10

3

4

1

1

2

4

4

3

А. Куликов (CS центр) Линейное программирование 02.04.2012 35 / 65

Page 126: 2012 04 02_algorithms2012_lecture08

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

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

2

3

2

1

4

5

1

3

21

2

1

4

5

10

3

4

1

1

2

1

1

1

2

А. Куликов (CS центр) Линейное программирование 02.04.2012 35 / 65

Page 127: 2012 04 02_algorithms2012_lecture08

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

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

2

4

2

1

5

5

1

4

21

2

1

5

1

1

5

101 2

3

1 1

А. Куликов (CS центр) Линейное программирование 02.04.2012 35 / 65

Page 128: 2012 04 02_algorithms2012_lecture08

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

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

2

4

1

2

1

1

5

5

2 12

21

2

110

4

1

5

1

2

5

А. Куликов (CS центр) Линейное программирование 02.04.2012 35 / 65

Page 129: 2012 04 02_algorithms2012_lecture08

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

Определение

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 36 / 65

Page 130: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 36 / 65

Page 131: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 36 / 65

Page 132: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 36 / 65

Page 133: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 36 / 65

Page 134: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 36 / 65

Page 135: 2012 04 02_algorithms2012_lecture08

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

3 10

3

4

5

2

1

11

2

5

А. Куликов (CS центр) Линейное программирование 02.04.2012 37 / 65

Page 136: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 137: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 138: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 139: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 140: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 141: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 142: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 143: 2012 04 02_algorithms2012_lecture08

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

ЛеммаВеличина максимального потока равна пропускной способностиминимального (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 центр) Линейное программирование 02.04.2012 38 / 65

Page 144: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 39 / 65

Page 145: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 39 / 65

Page 146: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 39 / 65

Page 147: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 39 / 65

Page 148: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 39 / 65

Page 149: 2012 04 02_algorithms2012_lecture08

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 39 / 65

Page 150: 2012 04 02_algorithms2012_lecture08

План лекции

1 Введение

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 40 / 65

Page 151: 2012 04 02_algorithms2012_lecture08

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

Определение

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 41 / 65

Page 152: 2012 04 02_algorithms2012_lecture08

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 41 / 65

Page 153: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 41 / 65

Page 154: 2012 04 02_algorithms2012_lecture08

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 41 / 65

Page 155: 2012 04 02_algorithms2012_lecture08

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 42 / 65

Page 156: 2012 04 02_algorithms2012_lecture08

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

1

1

1

11

1

1

1

1

1

1

1

1

1

1

1

А. Куликов (CS центр) Линейное программирование 02.04.2012 42 / 65

Page 157: 2012 04 02_algorithms2012_lecture08

Однако

Однако

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 158: 2012 04 02_algorithms2012_lecture08

Однако

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 159: 2012 04 02_algorithms2012_lecture08

Однако

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 160: 2012 04 02_algorithms2012_lecture08

Однако

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 161: 2012 04 02_algorithms2012_lecture08

Однако

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 162: 2012 04 02_algorithms2012_lecture08

Однако

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 163: 2012 04 02_algorithms2012_lecture08

Однако

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 43 / 65

Page 164: 2012 04 02_algorithms2012_lecture08

План лекции

1 Введение

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 44 / 65

Page 165: 2012 04 02_algorithms2012_lecture08

Неформально

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 45 / 65

Page 166: 2012 04 02_algorithms2012_lecture08

Неформально

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 45 / 65

Page 167: 2012 04 02_algorithms2012_lecture08

Неформально

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 45 / 65

Page 168: 2012 04 02_algorithms2012_lecture08

Неформально

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 45 / 65

Page 169: 2012 04 02_algorithms2012_lecture08

Неформально

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 45 / 65

Page 170: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 46 / 65

Page 171: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 46 / 65

Page 172: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 46 / 65

Page 173: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 46 / 65

Page 174: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 46 / 65

Page 175: 2012 04 02_algorithms2012_lecture08

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

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 центр) Линейное программирование 02.04.2012 46 / 65

Page 176: 2012 04 02_algorithms2012_lecture08

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

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

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 центр) Линейное программирование 02.04.2012 47 / 65

Page 177: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?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 центр) Линейное программирование 02.04.2012 47 / 65

Page 178: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?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 центр) Линейное программирование 02.04.2012 47 / 65

Page 179: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?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 центр) Линейное программирование 02.04.2012 47 / 65

Page 180: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?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 центр) Линейное программирование 02.04.2012 47 / 65

Page 181: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?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 центр) Линейное программирование 02.04.2012 47 / 65

Page 182: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?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 центр) Линейное программирование 02.04.2012 47 / 65

Page 183: 2012 04 02_algorithms2012_lecture08

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

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

Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 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 центр) Линейное программирование 02.04.2012 48 / 65

Page 184: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 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 центр) Линейное программирование 02.04.2012 48 / 65

Page 185: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 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 центр) Линейное программирование 02.04.2012 48 / 65

Page 186: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 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 центр) Линейное программирование 02.04.2012 48 / 65

Page 187: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 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 центр) Линейное программирование 02.04.2012 48 / 65

Page 188: 2012 04 02_algorithms2012_lecture08

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

Как найти такой сертификат?Мы же хотим найти как можно лучшую оценку, то есть найтиминимум функции 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 центр) Линейное программирование 02.04.2012 48 / 65

Page 189: 2012 04 02_algorithms2012_lecture08

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

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

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

min yTbyTA ≥ cT

y ≥ 0

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 49 / 65

Page 190: 2012 04 02_algorithms2012_lecture08

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

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

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

min yTbyTA ≥ cT

y ≥ 0

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 49 / 65

Page 191: 2012 04 02_algorithms2012_lecture08

План лекции

1 Введение

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

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 50 / 65

Page 192: 2012 04 02_algorithms2012_lecture08

Общая схема

Общая схема

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 51 / 65

Page 193: 2012 04 02_algorithms2012_lecture08

Общая схема

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

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 51 / 65

Page 194: 2012 04 02_algorithms2012_lecture08

Общая схема

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 51 / 65

Page 195: 2012 04 02_algorithms2012_lecture08

Общая схема

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 51 / 65

Page 196: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 197: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200

x2 ≤ 300x1 + x2 + x3 ≤ 400

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 198: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 199: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 200: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 201: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0

x2 ≥ 0x3 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 202: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0

x3 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 203: 2012 04 02_algorithms2012_lecture08

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

x1

x2

x3

Задачаmax x1 + 6x2 + 13x3

x1 ≤ 200x2 ≤ 300

x1 + x2 + x3 ≤ 400x2 + 3x3 ≤ 600

x1 ≥ 0x2 ≥ 0x3 ≥ 0

А. Куликов (CS центр) Линейное программирование 02.04.2012 52 / 65

Page 204: 2012 04 02_algorithms2012_lecture08

Вершина

x1

x2

x3

Вершина — это точкапересечения несколькихгиперплоскостей.Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS центр) Линейное программирование 02.04.2012 53 / 65

Page 205: 2012 04 02_algorithms2012_lecture08

Вершина

x1

x2

x3

Вершина — это точкапересечения несколькихгиперплоскостей.

Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS центр) Линейное программирование 02.04.2012 53 / 65

Page 206: 2012 04 02_algorithms2012_lecture08

Вершина

x1

x2

x3

AВершина — это точкапересечения несколькихгиперплоскостей.Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.

А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS центр) Линейное программирование 02.04.2012 53 / 65

Page 207: 2012 04 02_algorithms2012_lecture08

Вершина

x1

x2

x3

Вершина — это точкапересечения несколькихгиперплоскостей.Например, A — точка, вкоторой неравенстваx2 ≤ 300,x1 + x2 + x3 ≤ 400,x3 ≥ 0 превращаются вравенства.А вот гиперплоскости,задаваемыенеравенствамиx2 + 3x3 ≤ 600 и x2 ≥ 0,пересекаются не поточке, а по прямой.

А. Куликов (CS центр) Линейное программирование 02.04.2012 53 / 65

Page 208: 2012 04 02_algorithms2012_lecture08

Формально

Формально

Итак, если некоторое подмножество ограничений обращаются вравенства в единственной точке, то эту точку мы будем называтьвершиной.Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS центр) Линейное программирование 02.04.2012 54 / 65

Page 209: 2012 04 02_algorithms2012_lecture08

Формально

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

Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS центр) Линейное программирование 02.04.2012 54 / 65

Page 210: 2012 04 02_algorithms2012_lecture08

Формально

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

Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS центр) Линейное программирование 02.04.2012 54 / 65

Page 211: 2012 04 02_algorithms2012_lecture08

Формально

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

Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS центр) Линейное программирование 02.04.2012 54 / 65

Page 212: 2012 04 02_algorithms2012_lecture08

Формально

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

Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS центр) Линейное программирование 02.04.2012 54 / 65

Page 213: 2012 04 02_algorithms2012_lecture08

Формально

ФормальноИтак, если некоторое подмножество ограничений обращаются вравенства в единственной точке, то эту точку мы будем называтьвершиной.Сколько нужно равенств для однозначного задания точки?Нужно n линейных уравнений.Значит, вершина задается множеством из n ограничений.Две вершины называются соседями, если множества задающих ихограничений пересекаются по n − 1-му ограничению.

А. Куликов (CS центр) Линейное программирование 02.04.2012 54 / 65

Page 214: 2012 04 02_algorithms2012_lecture08

Детали

Детали

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 55 / 65

Page 215: 2012 04 02_algorithms2012_lecture08

Детали

ДеталиНа каждой итерации алгоритм проверяет, является ли текущаявершина оптимальной, и, если нет, определяет, в какую вершинуперейти.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 55 / 65

Page 216: 2012 04 02_algorithms2012_lecture08

Детали

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

В противном же случае мы просто передвинем начало координат.

А. Куликов (CS центр) Линейное программирование 02.04.2012 55 / 65

Page 217: 2012 04 02_algorithms2012_lecture08

Детали

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 55 / 65

Page 218: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координат

Итак, рассмотрим задачу линейного программирования:max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 219: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 220: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.

Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 221: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).

Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 222: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .

Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 223: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.

Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 224: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?

Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 225: 2012 04 02_algorithms2012_lecture08

Начало координат

Начало координатИтак, рассмотрим задачу линейного программирования:

max cT xAx ≤ bx ≥ 0

Допустим, что x = (0, 0, . . . , 0) является допустимым решением.Очевидно, что тогда x является вершиной (в нем неравенстваx1 ≥ 0, . . . , xn ≥ 0 обращаются в равенства).Легко видеть, что x является оптимальной вершиной тогда итолько тогда, когда ci ≤ 0 для любого i .Если же ci > 0, то, увеличив xi , мы увеличим и значение целевойфункции.Но насколько можно увеличить xi?Пока одно из ограничений не обратится в равенство.

А. Куликов (CS центр) Линейное программирование 02.04.2012 56 / 65

Page 226: 2012 04 02_algorithms2012_lecture08

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?

Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS центр) Линейное программирование 02.04.2012 57 / 65

Page 227: 2012 04 02_algorithms2012_lecture08

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.

Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS центр) Линейное программирование 02.04.2012 57 / 65

Page 228: 2012 04 02_algorithms2012_lecture08

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .

Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS центр) Линейное программирование 02.04.2012 57 / 65

Page 229: 2012 04 02_algorithms2012_lecture08

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .

Все xi можно выразить через y и переписать систему.

А. Куликов (CS центр) Линейное программирование 02.04.2012 57 / 65

Page 230: 2012 04 02_algorithms2012_lecture08

Что делать, если мы не в начале координат?

Что делать, если мы не в начале координат?Рассмотрим текущую вершину u.Пусть она задается n неравенствами ai · x ≤ bi .Пусть yi = bi − ai · x .Все xi можно выразить через y и переписать систему.

А. Куликов (CS центр) Линейное программирование 02.04.2012 57 / 65

Page 231: 2012 04 02_algorithms2012_lecture08

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

Исходная задача

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 центр) Линейное программирование 02.04.2012 58 / 65

Page 232: 2012 04 02_algorithms2012_lecture08

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

Переписанная задача

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 центр) Линейное программирование 02.04.2012 58 / 65

Page 233: 2012 04 02_algorithms2012_lecture08

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

Переписанная задача

max 22 − 73z1 − 1

3z2

−13z1 +

53z2 ≤ 6 (1)z1 ≥ 0 (2)z2 ≥ 0 (3)

13z1 − 2

3z2 ≤ 1 (4)13z1 +

13z2 ≤ 4 (5)

текущая вершина: {(2), (3)}значение целевой функции: 22оптимальная вершинарешив (2), (3) в исходнойзадаче, найдем оптимальнуювершину (x1, x2) = (1, 4)

А. Куликов (CS центр) Линейное программирование 02.04.2012 58 / 65

Page 234: 2012 04 02_algorithms2012_lecture08

Начальная вершина

Начальная вершина

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS центр) Линейное программирование 02.04.2012 59 / 65

Page 235: 2012 04 02_algorithms2012_lecture08

Начальная вершина

Начальная вершинаПока что каждый раз мы использовали начало координат вкачестве начальной вершины.

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS центр) Линейное программирование 02.04.2012 59 / 65

Page 236: 2012 04 02_algorithms2012_lecture08

Начальная вершина

Начальная вершинаПока что каждый раз мы использовали начало координат вкачестве начальной вершины.Но начало координат может и не быть допустимым решением.

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS центр) Линейное программирование 02.04.2012 59 / 65

Page 237: 2012 04 02_algorithms2012_lecture08

Начальная вершина

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

Для этого запишем нашу задачу в таком виде:min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS центр) Линейное программирование 02.04.2012 59 / 65

Page 238: 2012 04 02_algorithms2012_lecture08

Начальная вершина

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS центр) Линейное программирование 02.04.2012 59 / 65

Page 239: 2012 04 02_algorithms2012_lecture08

Начальная вершина

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

min cT xAx = bx ≥ 0

НУО, считаем, что все координаты b неотрицательны.

А. Куликов (CS центр) Линейное программирование 02.04.2012 59 / 65

Page 240: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершины

Запишем тогда такую задачу:I Для каждого равенства системы Ax = b введем новую переменную

zi ≥ 0.I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 241: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 242: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 243: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.

I В качестве целевой функции, которую нужно минимизировать,рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 244: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 245: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.

Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 246: 2012 04 02_algorithms2012_lecture08

Поиск начальной вершины

Поиск начальной вершиныЗапишем тогда такую задачу:

I Для каждого равенства системы Ax = b введем новую переменнуюzi ≥ 0.

I Прибавим zi к левой части каждого из равенств.I В качестве целевой функции, которую нужно минимизировать,

рассмотрим функцию z1 + · · ·+ zm.

У полученной задачи, очевидно, есть допустимая вершина:zi = bi , xi = 0.Начав с нее, мы можем решить новую задачу.

А. Куликов (CS центр) Линейное программирование 02.04.2012 60 / 65

Page 247: 2012 04 02_algorithms2012_lecture08

Решение новой задачи

Решение новой задачи

Итак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS центр) Линейное программирование 02.04.2012 61 / 65

Page 248: 2012 04 02_algorithms2012_lecture08

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.

Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS центр) Линейное программирование 02.04.2012 61 / 65

Page 249: 2012 04 02_algorithms2012_lecture08

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0

Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS центр) Линейное программирование 02.04.2012 61 / 65

Page 250: 2012 04 02_algorithms2012_lecture08

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.

Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS центр) Линейное программирование 02.04.2012 61 / 65

Page 251: 2012 04 02_algorithms2012_lecture08

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.

Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS центр) Линейное программирование 02.04.2012 61 / 65

Page 252: 2012 04 02_algorithms2012_lecture08

Решение новой задачи

Решение новой задачиИтак, рассмотрим решение новой задачи.Если в нем z1 + · · ·+ zm = 0, то z1 = · · · = zm = 0Тогда значения координат x в этом решении дают намдопустимую вершину исходной задачи.Если же для новой задачи min z1 + · · ·+ zm > 0, то у начальнойзадачи просто нет ни одного допустимого решения.Именно таким образом симплекс-метод распознает задачи, укоторых нет ни одного допустимого решения.

А. Куликов (CS центр) Линейное программирование 02.04.2012 61 / 65

Page 253: 2012 04 02_algorithms2012_lecture08

Вырожденная вершина

x1

x2

x3

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).Такая вершина являетсясвоим собственнымсоседом.Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS центр) Линейное программирование 02.04.2012 62 / 65

Page 254: 2012 04 02_algorithms2012_lecture08

Вырожденная вершина

x1

x2

x3

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).

Такая вершина являетсясвоим собственнымсоседом.Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS центр) Линейное программирование 02.04.2012 62 / 65

Page 255: 2012 04 02_algorithms2012_lecture08

Вырожденная вершина

x1

x2

x3

B

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).Такая вершина являетсясвоим собственнымсоседом.

Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS центр) Линейное программирование 02.04.2012 62 / 65

Page 256: 2012 04 02_algorithms2012_lecture08

Вырожденная вершина

x1

x2

x3

B

Вершина B называетсявырожденной, посколькуона являетсяпересечением более чемn = 3 гиперплоскостей:(2), (3), (4), (5).Такая вершина являетсясвоим собственнымсоседом.Избавиться от такихвершин можно, слегкаизменив вектор b:bi ± 𝜖i .

А. Куликов (CS центр) Линейное программирование 02.04.2012 62 / 65

Page 257: 2012 04 02_algorithms2012_lecture08

Как симплекс-метод распознает неограниченные задачи?

Как симплекс-метод распознает неограниченные задачи?

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 63 / 65

Page 258: 2012 04 02_algorithms2012_lecture08

Как симплекс-метод распознает неограниченные задачи?

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

Полученная система может иметь бесконечное число решений.

А. Куликов (CS центр) Линейное программирование 02.04.2012 63 / 65

Page 259: 2012 04 02_algorithms2012_lecture08

Как симплекс-метод распознает неограниченные задачи?

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 63 / 65

Page 260: 2012 04 02_algorithms2012_lecture08

Время работы

Время работы

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

(︀m+nn

)︀.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 64 / 65

Page 261: 2012 04 02_algorithms2012_lecture08

Время работы

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

(︀m+nn

)︀.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 64 / 65

Page 262: 2012 04 02_algorithms2012_lecture08

Время работы

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

(︀m+nn

)︀.

Но это выражение экспоненциально от n.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 64 / 65

Page 263: 2012 04 02_algorithms2012_lecture08

Время работы

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

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 64 / 65

Page 264: 2012 04 02_algorithms2012_lecture08

Время работы

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

(︀m+nn

)︀.

Но это выражение экспоненциально от n.Более того, есть задачи, на которых симплекс-методдействительно будет работать экспоненциально долго.Такие задачи, однако, на практике не возникают, и напрактических задачах симплекс-метод работает довольно быстро.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 64 / 65

Page 265: 2012 04 02_algorithms2012_lecture08

Время работы

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

(︀m+nn

)︀.

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 64 / 65

Page 266: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

Что мы узнали за сегодня?

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65

Page 267: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

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

Если множество допустимых решений существует и ограничено,то оно является выпуклым многогранником.Симплекс-метод движется по вершинам многогранника, улучшаязначение целевой функции.Симплекс-метод хорошо решает практические задачи, но для негоесть экспоненицальные нижние оценки времени работы.Известны и алгоритмы с доказуемыми полиномиальнымиверхними оценками на время работы.Задача о нахождении максимального потока в сети — задачалинейного программирования.

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65

Page 268: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65

Page 269: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65

Page 270: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65

Page 271: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

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

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65

Page 272: 2012 04 02_algorithms2012_lecture08

Что мы узнали за сегодня?

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

А. Куликов (CS центр) Линейное программирование 02.04.2012 65 / 65