- •1. Введение
- •Основные разделы курса
- •3. Основная задача линейного программирования. Различные формы записи задачи.
- •6. Алгоритм симплекс-метода.
- •1.3. Реализация симплекс-метода в виде симплексных таблиц.
- •8Транспортная задача. Описание и примеры применения метода потенциалов.
- •29.Метод ветвей и границ. Задача о рюкзаке.
- •Задача о рюкзаке
- •30. Метод ветвей и границ. Задача коммивояжера.
- •28. Методы перебора вариантов. Метод вариаций.
- •31.Задачей целочисленного программирования называется задача линейного программирования, в которой имеется дополнительное условие, требующее, чтобы часть переменных принимала только целые значения.
- •35.Общие принципы дискретного динамического программирования. Уравнение Беллмана.
- •36. Задача распределения ресурсов.
- •38. Построение кратчайшего пути на сети.
- •37. Задача оптимального планирования. Обработка деталей на двух станках.
- •10. Выпуклые множества и выпуклые функции.
- •13.Двойственность в задачах выпуклого программирования
- •14. Квадратичное программирование
- •12. Постановка задачи. Теорема Куна – Таккера.
- •16. Геометрическое программирование
- •11. Свойства выпуклых множеств и выпуклых функций
- •19. Общая задача нелинейного программирования.
- •22.Свойства дифференцируемых функций.
- •24. Дифференцируемость оператора Немыцкого.
- •25. Необходимый признак экстремума в задачах без ограничений первого и второго порядков.
- •27 . Правило множителей Лагранжа для гладких нелинейных задач.
- •41. Простейшая вариационная задача (пвз), исследование необходимых условий экстремума первого порядка.
- •45. Вариационная задача с кусочно-гладкими кривыми.
- •46. Исследование необходимых условий экстремума второго порядка. Условия Лежандра и Якоби.
- •42.. Алгоритм Гюйгенса исследования пвз.
- •48.. Поле экстремалей. Достаточные условия сильного экстремума.
- •Задача Больца.
- •6.9. Изопериметрические задачи.
- •51. Принцип максимума Понтрягина.
31.Задачей целочисленного программирования называется задача линейного программирования, в которой имеется дополнительное условие, требующее, чтобы часть переменных принимала только целые значения.
z=cTx→max Ax =b, (2.4.1)x ≥ 0, xi∈Z, i∈I.
Примером такой задачи может служить задача о рюкзаке, в которой все переменные должны быть целыми и имеется одно ограничение-равенство.
Для решения задачи (2.4.1) можно применять метод ветвей и границ.
1. Способ вычисления оценок. Для вычисления оценки в задаче (2.4.1) уберем условия целочисленности переменных (получится обычная задача линейного программирования). Поскольку число допустимых планов увеличится, следовательно, оптимальное значение целевой функции в полученной задаче будет оценкой сверху для целевой функции в задаче (2.4.1). Если при этом решение x* новой задачи будет иметь целочисленные координаты x*i, i∈I, то этот же вектор будет и решением (2.4.1).
2. Способ ветвления. Пусть координата x*J не является целой, C=[x*J]≠x*J. Все допустимые планы в задаче (2.4.1) можно разбить на две части по следующему признаку: одни планы удовлетворяют условию
xJ≤ С, (2.4.2)
другие – условию xJ≥ С+1(2.4.3)
Для получения оценок мы также будем решать задачи линейного программирования. При этом найденное на предыдущем шаге решение x* не является допустимым планом ни для одной из этих задач. Однако в каждой из них возможно применение двойственного симплекс-метода.
35.Общие принципы дискретного динамического программирования. Уравнение Беллмана.
Динамическое программирование – это метод решения задач оптимизации, характеризующийся наличием следующих этапов:
1. Инвариантное погружение. Исходная задача P оптимизации помещается в семейство аналогичных задач P(t), t∈T, каждая из которых состоит в нахождении оптимального элемента x∈X с учетом некоторых ограничений (P = P(t0), t0∈T).
2. Уравнение Беллмана. Пусть x*(t) – решение задачи оптимизации P(t), t∈T, B(t) – оптимальное значение целевой функции в этой задаче.
Функция B(t) называется функцией Беллмана. Уравнением Беллмана называется уравнение, в которое входят функции B(t) и x*(t) для различных значений параметра t.
3. Решение семейства задач. Среди задач семейства Т есть более простые, решить которые не представляет большого труда. Подставляя найденные значения функций B(t) и x*(t) для этих задач в уравнение Беллмана, мы получаем возможность найти эти функции и для других задач семейства. Постепенно расширяя круг решенных задач семейства, мы стремимся найти решение исходной задачи, также являющейся элементом семейства.
Применение метода динамического программирования фактически состоит в удачном составлении уравнения Беллмана.
Реализация идеологии динамического программирования для конкретной задачи – это скорее искусство, чем наука. Научиться этому можно, рассмотрев достаточное количество примеров. Ниже мы рассмотрим примеры использования динамического программирования в комбинаторных задачах. Позже, при изучении теории оптимального управления, мы рассмотрим исторически первый пример динамического программирования, предложенный Р.Беллманом.
36. Задача распределения ресурсов.
Имеется С единиц некоторого ресурса и n производственных процессов. При использовании в i-ом производственном процессе x единиц ресурса, прибыль составляет fi(x).
Необходимо найти оптимальное распределение ресурсов по производственным процессам, дающее максимальную прибыль.
Формально задачу можно записать в виде
f1(x1)+…+ fn(xn) → max
x1+…+ xn ≤ C, (3.2.1)
x1,…, xn ≥ 0 – целые.
Задача похожа на задачу целочисленного программирования, только целевая функция у нее не является линейной. Функции fk часто задаются не формулой, а таблицей значений.
Решение задачи методом динамического программирования
I. Инвариантное погружение. Рассмотрим семейство задач P(k;Y), k=1..n, Y∈[0;C], где P(k;Y) – задача об оптимальном распределении Y единиц продукции между первыми k производственными процессами. Исходная задача запишется в виде P(n;C).
II. Функция Беллмана. Пусть B(k;Y) – оптимальная прибыль в задаче P(k;Y), x*(k;Y) оптимальное распределение ресурсов в этой задаче. Тогда
B(k;y) = max { f1(x1)+…+ fk(xk) | x1+…+ xk ≤ Y, x1,…, xk,≥ 0 – целые},
x*(k;Y) = (x*1(k;Y), …, x*k(k;Y)) – k-мерный вектор.
III. Уравнение Беллмана (связь между решениями задач семейства). Рассмотрим задачу P(k+1;Y), считая, что решение задач вида P(k;Y) мы уже знаем. Распределяя ресурсы между (k+1) процессами, выделим отдельно Z ресурсов на первые k и оставшиеся Y–Z на последний, k+1-й. Первую часть мы умеем распределять оптимально, поэтому
B(k+1,Y) = max{B(k,Z)+fk+1(Y–Z) | 0 ≤ Z ≤ Y}, (3.2.2)
причем если Z* - точка максимума, то
x*(k+1;Y) = (x*(k; Z*); Y–Z*), (3.2.3)
т.е. для нахождения вектора x*(k+1;Y) нужно дополнить вектор (x*(k; Z*) еще одной координатой – элементом Y–Z*.
IV. Решение семейства задач. 1) Решаем самые простые задачи, которые связаны только с первым производственным процессом P(1;Y) (k=1) для всех Y∈[0;C].
B(1;Y) =max {f1(Z) | 0 ≤ Z ≤ Y} = f1(Z*), x*1(1;Y) = Z*. (3.2.4)
2) Зная решение задач P(k;Y) при всех Y∈[0;C], мы по уравнению Беллмана (3.2.2) – (3.2.3) находим решение задачи P(k+1;Y) для всех же Y.
Повторяем 2) до тех пор, пока не дойдём до номера k=n и Y=C.