- •1. Введение в оптимизацию 4
- •2. Безусловная оптимизация функции одной переменной 13
- •1. Введение в оптимизацию
- •Ограничения на допустимое множество
- •Структура оптимизационных задач математического программирования
- •Примеры постановки задачи оптимизации для решения методами математического программирования
- •Классификация методов оптимизации
- •2. Безусловная оптимизация функции одной переменной
- •Свойства функции одной переменной
- •Идентификация экстремумов функции одной переменной
- •Прямые методы поиска экстремума функции одной переменной
- •Метод равномерного поиска
- •Метод золотого сечения
- •Сравнение методов исключения интервалов
- •Полиномиальная аппроксимация
- •Методы с использованием производных
- •Метод Ньютона-Рафсона
- •Метод средней точки
- •Метод секущих
- •3. Безусловная оптимизация функции нескольких переменных
- •Критерии оптимальности для функции нескольких переменных
- •Методы прямого поиска для нескольких переменных
- •Метод эволюционной оптимизации
- •Метод поиска по симплексу ( метод)
- •Градиентные методы
- •Метод Коши (Наискорейшего спуска)
- •Метод покоординатного спуска.
- •С хема метода Гаусса – Зейделя
- •4. Условная оптимизация. Линейное программирование
- •Общие сведения о линейном программировании
- •Постановка задачи линейного программирования
- •Пример постановки задачи линейного программирования
- •Геометрическая интерпретация задачи линейного программирования
- •Симплекс-метод решения задачи линейного программирования.
- •5. Классическое вариационное исчисление
- •Критерий оптимизации в задачах вариационного исчисления
- •Вариация функционала
- •Необходимые условия экстремума. Уравнение Эйлера.
- •Уравнение Эйлера и условия Лежандра для функционалов, зависящих от нескольких функций и от высших производных
- •6. Динамическое программирование
- •Задача о Черепашке
- •Оптимальное управление представляет собой вектор, определяемый последовательностью оптимальных пошаговых управлений
- •Организация процесса оптимизации в динамическом программировании
6. Динамическое программирование
Динамическое программирование — это вычислительный метод для решения задач определенной структуры. Возникло и сформировалось в 1950-1953 гг. благодаря работам Р. Беллмана над динамическими задачами управления запасами. В упрощенной формулировке динамическое программирование представляет собой направленный последовательный перебор вариантов, который обязательно приводит к глобальному максимуму.
Применим следующий вариант знакомства с методом динамического программирования. Сначала решим конкретную простую задачу, а потом обобщим метод на весь круг задач, решаемых этим методом.
Задача о Черепашке
Постановку задачи динамического программирования рассмотрим на примере классической задачи о Черепашке. Черепашке необходимо попасть из пункта в пункт . На каждом углу она может поворачивать только вверх или только вправо. Время движения по каждому отрезку пути указано на рисунке 6.1. Требуется найти минимальное время, за которое Черепашка может попасть из пункта в пункт .
Рис. 6.1 Задача о Черепашке
Путь, показанный на рисунке жирными линиями со стрелкой, требует 21 единицу времени. Отметим, что каждый путь состоит из 6 шагов: трех вверх и трех вправо. Количество возможных путей Черепашки – 20. Мы можем перебрать все пути и выбрать самый быстрый. Это метод полного перебора (ответ - 21). Для вычисления каждого времени требуется пять операций сложения, а для нахождения ответа 100 операций сложения и 19 операций сравнения. Задача решается вручную. Однако при N равном 8, у Черепашки уже 12870 путей. Подсчет времени для каждого пути требует 15 операций сложения, а в целом - 193050 сложений и 12869 сравнений, то есть порядка 200000 операций. Компьютер при быстродействии 1000000 операций в секунду найдет решение за 0.2 секунды, а человек? Предположим, что N равно 30, тогда количество различных путей 60!*(30!*30!). Это очень большое число, его порядок 1017. Количество операций, необходимых для поиска решения, равно 60*1017. Компьютер с быстродействием 1000000 операций в секунду выполнит за год порядка 3.2*1013 операций. Не трудно прикинуть количество лет, требуемых для решения задачи.
Вернемся к исходной
задаче. Начнем строить путь Черепашки
от пункта
.
Каждому углу присвоим вес, равный
минимальному времени движения Черепашки
от этого угла до пункта
.
Как его находить? От углов
,
очевидно. Для угла
время движения Черепашки в пункт
через угол
15 единиц, а через угол
11 единиц. Берем минимальное значение,
то есть вес угла будет равен 11. Продолжим
вычисления. Их результаты приведены на
рисунке. Путь, отмеченный стрелками,
является ответом задачи. Оценим количество
вычислений. Для каждого угла необходимо
выполнить не более двух операций сложения
и одной операции сравнения, то есть три
операции. При N, равном 300, количество
операций - 3*301*301, это меньше 1000000, и
компьютеру потребуется меньше одной
секунды. Итак, много лет при N=30 и 1 секунда
при N=300.
Выделим особенность задачи, которая позволяет решить ее описанным способом. Мы начинаем с угла , и для каждого угла найденное число является решением задачи меньшей размерности. Поясним эту мысль. Если бы мы решали задачу поиска пути Черепашки из пункта в пункт , то найденное число 17 - решение задачи. Для каждого угла найденное значение времени не изменяется и может быть использовано на следующих этапах.
Постановка задачи динамического программирования
В технике существует обширный класс объектов и процессов, управление которыми осуществляется на основе ограниченного числа решений, принимаемых последовательно в некоторые фиксированные моменты времени. Определение закона управления для таких процессов связано с решением, так называемой задачи многокритериального выбора. В отличие от обычной вариационной задачи, когда управление ищется в форме некоторой функциональной зависимости (от времени или координат), сразу переводящей объект из одного состояния в другое, здесь рассматриваются процессы управления, состоящие из ряда шагов. При этом управляющие воздействия генерируются на каждом шаге и в течение этого шага остаются неизменными.
Подобные законы управления характерны для объектов дискретных по своей физической природе. Например, путешествие черепашки четко распадается на ряд этапов, в начале каждого из которых необходимо принять решение, в какую сторону двигаться.
К подобной схеме может быть сведен и процесс управления непрерывным объектом, если он управляется дискретным регулятором.
Рассмотрим
задачу общего вида, характерную для
метода динамического программирования.
Пусть это будет задача о распределении
ресурсов между предприятиями. В
результате управления инвестициями
система последовательно переводится
из начального состояния
в конечное
.
Предположим, что управление можно
разбить на
шагов и решение принимается последовательно
на каждом шаге, а управление представляет
собой совокупность
пошаговых управлений. На каждом шаге
необходимо определить два типа переменных
- переменную управления
и новую переменную состояния системы
.
(Если сравнивать с Черепашкой, то это
время в пути и дальнейшее направление
движения из каждой клетки). Переменная
определяет, в каких состояниях может
оказаться система на рассматриваемом
-м
шаге. При этом предполагается,
,
где
некоторое множество состояний, в которые
объект может оказаться в результате
всех
предыдущих шагов. В зависимости от
состояния
на этом шаге следует применить некоторые
управления, которые характеризуются
переменной
.
Все переменные управления удовлетворяют
определенным ограничениям, т.е. являются
допустимыми. Пусть
- управление, переводящее систему из
состояния
в состояние
,
a
- состояние системы на k-м
шаге управления. Тогда последовательность
состояний системы можно представить в
виде графа, представленного на рис. 6.2.
Рис. 6.2.
Применение
управляющего воздействия
на каждом шаге переводит систему в новое
состояние
и приносит некоторый результат
.
Функционал, оптимизацию которого необходимо обеспечить путем выбора оптимального управления, выражается суммой
.
Сформулированную
задачу можно интерпретировать как
отыскание экстремума сложной функции
большого числа (в данном случае
)
переменных
.
При значительном числе переменных эта
задача представляет очень большие
сложности. Вместо этого в методе ДП
рассматривается многошаговый процесс
принятия решений на основе так называемого
принципа
оптимальности,
впервые сформулированного в 1953 г.
Р.Э.Беллманом: каково
бы ни было состояние системы в результате
какого-либо числа шагов, на ближайшем
шаге нужно выбирать управление так,
чтобы оно в совокупности с оптимальным
управлением на всех последующих шагах
приводило к оптимальному выигрышу на
всех оставшихся шагах, включая выигрыш
на данном шаге.
Следуя
принципу оптимальности для каждого
возможного состояния на каждом шаге
среди всех возможных управлений
выбирается оптимальное управление
,
такое, чтобы результат, который достигается
за шаги с k-го
по последний n-й,
оказался бы оптимальным.
Пример. Пусть Вам необходимо пробежать 3 километра. Пусть 1 километр Вы уже пробежали и нужно принять решение как бежать дальше. Если вы хотите показать максимальный результат, Вы должны принять решение, которое будет оптимальным на данный момент, исходя из Вашего состояния и оставшейся части дистанции. Вы не можете резко ускориться в угоду сиюминутному результату. Вы должны бежать так, чтобы показать наилучший результат на всей дистанции.
Здесь нужно отметить два фактора.
Ваша дальнейшая стратегия бега зависит только от того, как вы чувствуете себя на данный момент.
Начальный участок дистанции не являлся оптимальным с точки зрения преодоления 1 километра. Т.е. оптимальная траектория не есть сумма оптимальных участков. Оптимальным является только последний участок траектории.
Числовая
характеристика этого результата
называется функцией Беллмана и зависит
от номера шага
и состояния системы
.
Задача динамического программирования
формулируется следующим образом:
требуется
определить такое управление
,
переводящее систему из начального
состояния
в конечное состояние
,
при котором целевая функция принимает
наибольшее (наименьшее) значение
.
Особенности математической модели динамического программирования
Основные необходимые свойства задач, к которым возможно применить этот принцип:
задача оптимизации формулируется как конечный многошаговый процесс управления;
целевая функция (выигрыш) является аддитивной и равна сумме целевых функций каждого шага:
;
выбор управления на каждом шаге зависит только от состояния системы к этому шагу
,
и не влияет на предшествующие шаги (нет
обратной связи);
состояние системы после каждого шага управления зависит только от предшествующего состояния системы и этого управляющего воздействия (отсутствие последействия) и может быть записано в виде уравнения состояния:
;
