- •Н.Г. Лядина, е.А. Ермакова, л.В. Уразбахтина
- •Математические методы в экономике апк
- •Нелинейное и выпуклое программирование
- •Учебное пособие
- •Содержание
- •Введение
- •Нелинейное программирование Постановка и особенности задач нелинейного программирования
- •4. Точки, соответствующие оптимальному решению, могут находиться как на границе, так и внутри области допустимых решений.
- •5. Целевая функция может иметь несколько локальных экстремумов, из которых затем находят точку глобального оптимума.
- •2. Область допустимых решений может иметь несколько оптимальных решений, находящихся в отличие от линейного программирования не на отрезке. Пример на рисунке 1.
- •3. Область допустимых решений может состоять из нескольких частей.
- •Контрольные вопросы
- •Экстремум функции1
- •Нахождение безусловных экстремумов непрерывных дифференцируемых функций
- •Контрольные вопросы
- •Индивидуальные задания 1
- •Нахождение условных экстремумов. Метод множителей Лагранжа5
- •Б) Алгоритм метода множителей Лагранжа
- •Контрольные вопросы
- •Выпуклое программирование
- •Свойства выпуклых и гладких функций
- •Классификация задач выпуклого программирования
- •Экономические показатели производства культур
- •Формы записи задачи выпуклого программирования
- •Градиент и производная по направлению
- •Алгоритм решения специальной задачи выпуклого программирования. Метод Франка-Вульфа 10
- •Индивидуальные задания 3
- •Методы поиска – методы решения задач выпуклого программирования Метод последовательного изменения аргументов (координат)
- •Индивидуальные задания 4
- •Индивидуальные задания 5
- •Градиентные методы Метод наискорейшего подъема (для самостоятельного изучения)
- •Метод наискорейшего спуска
- •Различные алгоритмы градиентного метода (для самостоятельного изучения)
- •Индивидуальные задания 6
- •Индивидуальные задания 7
- •Алгоритм нелокального случайного поиска на минимум целевой функции
- •Индивидуальные задания 8
- •Особенности метода локального случайного поиска
- •Индивидуальные задания 9
- •Метод штрафных функций
- •Индивидуальные задания 10
- •Квадратичное программирование (кп) Графический метод
- •Контрольные вопросы
- •Индивидуальные задания 11
- •Квадратичный симплекс-метод
- •Индивидуальные задания 12
- •Контрольные вопросы и задания
- •Тестовые задания Тесты - выпуклое программирование
- •Тесты - квадратичное программирование
- •Рекомендуемая литература
- •Словарь терминов
- •Приложение
- •Индивидуальные задания 1 - 30
- •127550, Москва, ул. Тимирязевская, 44
Алгоритм решения специальной задачи выпуклого программирования. Метод Франка-Вульфа 10
Пусть задана исходная форма специальной задачи выпуклого программирования:
min Z = f(X) = f(x1, x2,...,xn),
где f(X) – выпуклая функция.
I шаг. Считаем, что исходное допустимое решение X0(x01, x02,...,x0n) найдено.
II шаг.
I. Направление спуска Y ищется в следующем виде
Y=(X - X0)=(x1-x01, x2-x02,...,xn-x0n), где X(x1, x2,...,xn) , - область допустимых решений (ОДР). Y = X - X0 . Необходимо найти координаты точки X(x1, x2,...,xn) такой, чтобы: 1) grad Z Y = grad Z (X - X0 ) < 0, при этом Z убывает; 2) кроме того X(x1, x2,...,xn) .
II. Составим вспомогательную задачу.
Запишем min Z = grad Z(X0) Y = grad Z(X0 ) (X - X0 ) =
= [Z(X0)/(x1)] (x1-x01) + [Z(X0)/(x2)] (x2-x02) + [Z(X0)/(x3)] (x3-x03) + ∙∙∙ +[Z(X0) (xn)] (xn-x0n)
,
i = 1
m.
X(x1, x2,...,xn) 0.
3. Решаем вспомогательную задачу, являющуюся задачей линейного программирования постоянных размеров.
Так как ищется min Z = grad Z(X0) Y = grad Z(X0 ) (X - X0 ), то при отрицательном значении Z во вспомогательной задаче в окрестности точки X0 целевая функция f(X) по направлению Y = X - X0 будет убывать. Этот минимум ищется с учетом системы ограничений. Система ограничений с условием неотрицательности переменных требует, чтобы точки X и X0 принадлежали области допустимых решений. Вспомогательная задача линейного программирования позволяет среди всех направлений спуска выбрать направление с максимально возможным спуском. Таким образом, определение направления спуска сводится к определению координат точки X(x1, x2,...,xn). Эти решения можно получить, решая вспомогательную задачу любым известным методом (графическим, симплексным, двойственным и так далее).
III шаг. Движение по направлению спуска осуществляется шагами до тех пор, пока функция убывает. Точка X* c минимальным значением направления спуска принимается за начальную (исходную) X0 для следующего приближения Х тек. = X0 +t ·Y = X0 +t · (X - X0 ), где t[0, 1].
IV шаг. Критерий оптимальности - признак оптимальности решения.
Первый признак. Градиент целевой функции равен нулю grad f(X0) = 0. Это условие является необходимым условием экстремума функции без ограничений. Более подробная и привычная запись - система дифференциальных уравнений:
f(X0)/(x1) = 0;
f(X0)/(x2) = 0;
f(X0)/(x3) = 0;
……………….
f(X0)/ (xn) = 0.
Так как в задаче выпуклого программирования любой локальный минимум совпадает с глобальным (абсолютным), то необходимое условие экстремума функции можно принять в качестве признака (критерия) оптимальности. Классические методы математики позволяют выявить, является ли седловая точка точкой минимума, точкой максимума или точкой перегиба. При решении на ПК получить точное равенство нулю очень трудно, поэтому при расчетах принимают |f(X0)/(xj)| ≤ ε (j = 1 n), где ε – малая величина, заданная точность расчета.
Второй признак. Расстояние между двумя точками (между двумя последовательно полученными приближенными решениями) меньше либо равно заданного числа – точности расчета ε: |X0t - X0t+1 | ≤ ε.
Второй признак (критерий) может считаться основным, так как он включает в себя первый признак (критерий), как частный случай.
Укрупненная схема алгоритма
Определение исходного (начального) допустимого решения.
Формулировка и решение вспомогательной задачи линейного программирования постоянных размеров. Нахождение вектора Y. Y = X - X0 .
Определение величины шага по направлению Y, задача на поиск минимума функции от одной переменной.
Признак (критерий) оптимальности. Если решение не оптимально, то переход к пункту 2.
Пример 14. min Z = х12+х22
х1+х2 ≤ 2
х1 ≤ 2
х2 ≤ 1
х1 0, х2 0
Выполним решение по блокам схемы.
I шаг. Возьмем за начальную точку приближения исходное допустимое решение X0(1;1). Зададим точность расчета ε = 0,02.
II шаг.
1) Найдем grad Z(X) в общем виде: grad Z(X ) =
={ Z(X)/(x1); Z(X)/(x2)} = {2x1; 2x2}.
Вычислим значение grad Z в точке X0 gradZ(X0)={2 · 1;2 · 1}={2; 2}.
2) Составим вспомогательную задачу линейного программирования. Определим целевую функцию
min Zвсп = grad Z(X0) Y = grad Z(X0 ) (X - X0 ) = [Z(X0)/(x1)] (x1-x01) + +[Z(X0)/(x2)] (x2-x02) ={2; 2}· [(x1-1); (x2-1)] = 2x1 –2+2x2 –2 = 2x1 +2x2 –4.
К этой целевой функции припишем систему ограничений и условия неотрицательности переменных основной задачи:
min Zвсп = 2x1 +2x2 –4.
х1+х2 ≤ 2
х1 ≤ 2
х2 ≤ 1
х1 0, х2 0.
3) Решаем вспомогательную задачу, являющуюся задачей линейного программирования постоянных размеров.
Решим вспомогательную задачу графическим методом:
1) х1+х2 ≤ 2 – полуплоскость;
х1+х2 = 2 - граничная прямая. Строим ее по двум точкам.
хj |
Первая точка |
Вторая точка |
х1 |
0 |
2 |
х2 |
2 |
0 |
Точка «начало координат» (0,0) принадлежит полуплоскости.
2) х1 ≤ 2, точка (0,0) принадлежит полуплоскости.
3) х2 ≤ 2, точка (0,0) принадлежит полуплоскости.
Рис. 8. Решение вспомогательной задачи графическим методом
4) х1 0,
х2 0 I четверть.
5) Область допустимых решений - четырехугольник ABCD.
6) Z всп = 2x1 +2x2 –4 – целевая функция
antigrad Z всп = - grad Z всп ={(Z)/(x1); (Z)/(x2)} = {2; 2 }. Начало вектора антиградиента – начало координат, точка (0; 0). Конец вектора антиградиента – точка (2; 2). Вектор антиградиент показывает направление минимизации.
7) Строим линию уровня Z = 2x1 + 2x2 – 4 = const, перпендикулярную вектору антиградиенту. Таких линий уровня бесчисленное множество. Все они параллельны между собой. Перемещаем линию уровня в направлении вектора антиградиента до первого соприкосновения с областью допустимых решений ABCD. Первое соприкосновение - точка A(0;0) – оптимальное решение, в котором вспомогательная задача имеет минимальное значение: min Zвсп (A)= Zвсп (0;0)= 2 0 +2 0 – 4 = - 4. Следовательно, направление спуска есть, так как скалярное произведение grad Z(X) Y = grad Z(X) (X - X0 ) = {2; 2}· [(0 - 1); (0 - 1)] = -4 имеет отрицательное значение. Точка X*(0,0) оптимальное решение вспомогательной задачи.
I
)
Находим координаты текущей точки приближения
Х тек. = X0 +t ·Y = X0 +t · (X - X0 ), где t[0, 1], а точка X0 = (1;1).
Общий вид приближения Х тек. = (1;1) +t ·[(x1-1); (x2-1)], где t[0, 1].
x1тек = 1 + t · (x1-1);
x2тек = 1 + t · (x2-1);
Х тек. = [x1тек; x2тек ] = [1 + t · (x1-1); 1 + t · (x2-1) ].
Однако из решения вспомогательной задачи мы нашли, что решение вектор X имеет значение Х (x1; x2), так как Х (0; 0) – оптимальное решение вспомогательной задачи. Подставим в Х тек. значение точек X0 (1;1) и Х (0; 0), получим x1тек = 1 + t · (0 - 1);
x2тек = 1 + t · (x2 - 1);
Х тек. = [x1тек; x2тек ] = [1 + t · (0 - 1); 1 + t · (0 - 1) ] или
x1тек = 1 - t; x2тек = 1 - t;
имеем Х тек. = [x1тек; x2тек ] = [1 - t; 1 - t ].
Составим таблицу нахождения текущих точек, меняющихся в зависимости от значения t, t[0, 1].
Таблица 4
Нахождение текущих точек
Номер текущей точки |
Значение t[0, 1]. |
Координаты текущей точки Х тек. |
Значение целевой функции основной задачи Z = х12+х22 |
|
x1тек = 1 - t; |
x2тек = 1 - t; |
|||
1 |
0 |
1 |
1 |
2 |
2 |
0,5 |
0,5 |
0,5 |
0,5 |
3 |
0,7 |
0,3 |
0,3 |
0,18 |
4 |
1 |
0 |
0 |
0 |
Точка Х(0,0) при t=1 является начальной точкой для следующего приближения, то есть является X0 (0; 0). Проверяем эту точку на признак (критерий) оптимальности, для этого находим Z(X)/(x1); Z(X)/(x2) в точке X0 основной задачи.
Z(X)/(x1)
=2·
х1;
Z(X0)/(x1)
= 2 · 0
= 0;
Z(X)/(x2) =2· х2; Z(X0)/(x2) = 2 · 0 = 0;
По первому признаку (критерию) получено оптимальное решение X* (0; 0). Проверим решение по второму признаку (критерию)
min Zвсп (X0) = grad Z(X0) Y = grad Z(X0 ) (X - X0 ) = [ Z(X0)/(x1)] (x1-x01) + +[ Z(X0)/(x2)] (x2-x02) ={0; 0}· [(x1-0); (x2-0)] = 0
х1+х2 ≤ 2
х1 ≤ 2
х2 ≤ 1
х1 0, х2 0.
Получили, что Zвсп (X0) = 0, не зависит от Х, направления спуска нет. Поэтому любое допустимое решение является оптимальным. Например, возьмем за оптимальное решение Xопт = X* (2; 0).
Переходим к отысканию координат текущей точки Х тек. = X0 +t ·Y = X0 +t · (X - X0 ), где t[0, 1], а точка X0 = (0;0),
получим x1тек = 0 + t · (х1 - 0); x2тек = 0 + t · (x2-0);
Х тек. = [x1тек; x2тек ] = [0 + t · (х1 - 0); 0 + t · (х2 -0) ] или
x1тек = t · х1; x2тек = t · х2;
имеем Х тек. = [x1тек; x2тек ] = [ t · х1; t · х2 ].
Подставляем в Х тек. = [x1тек; x2тек ] = [ t · х1; t · х2 ] координаты точки X* (2; 0), которую мы приняли за Xопт . Получаем Х тек. (2·t ; 0· t).
Составим таблицу нахождения текущих точек, меняющихся в зависимости от значения t, t[0, 1] и X0 = (0;0).
Таблица 5
Нахождение текущих точек
Номер текущей точки |
Значение t[0, 1]. |
Координаты текущей точки Х тек. |
Значение целевой функции основной задачи Z = х12+х22 |
|
x1тек = 2·t |
x2тек = 0 |
|||
1 |
0 |
0 |
0 |
0 |
2 |
0,01 |
0,02 |
0 |
0,0004 |
3 |
0,1 |
0,2 |
0 |
0,04 |
… |
… |
… |
… |
… |
Проверим полученные решения Х тек. t по второму признаку (критерию) оптимальности: |X0t - X0t+1 | ≤ ε, где ε = 0,02 ?
|X0t - X0t+1 | = |X0t - X0 | = √[ (x1t-x10)2 + (x2t-x20)2 ].
|X01 - X0 | = √[ (0 - 0)2 + (0 - 0)2 ] = 0; 0 <0,02 = ε, испытание удачное.
|X02 - X0 | = √[ (0,02 - 0)2 + (0 - 0)2 ] = √ 0,0004 = 0,02; 0,02=0,02= ε, испытание удачное.
|X03 - X0 | = √[ (0,2 - 0)2 + (0 - 0)2 ] = √ 0,04 = 0,2; 0,2>0,02= ε, испытание неудачное.
Примем за оптимальное решение точку Xопт = X* (0,02; 0). Но точка X01(0;0) тоже удовлетворяет второму признаку (критерию). Кроме того, она удовлетворяет первому признаку оптимальности (критерию), поэтому ее и необходимо принять за оптимальное решение.
Замечание. В отличие от алгоритма общей задачи выпуклого программирования алгоритм решения специальной задачи выпуклого программирования обладает следующей особенностью: вспомогательная задача линейного программирования имеет постоянную размерность и не надо решать нелинейные уравнения. Это существенно упрощает программирование алгоритма для реализации решения на ПК.
П
ример
15
min Z =9х12+9х22 +12х1 - 6х2
0 ≤ х1 ≤ 4
1 ≤ х2 ≤ 5
х1 0, х2 0
Выполним решение по блокам схемы.
I шаг. Возьмем за начальную точку приближения исходное допустимое решение X0(3;4). Зададим точность расчета ε = 0,02.
II шаг.
1) Найдем grad Z(X) в общем виде:
grad Z(X ) ={ Z(X)/(x1); Z(X)/(x2)} = {18x1+12; 18x2 - 6}.
Вычислим значение grad Z в точке X0:
grad Z(X0) = {18 · 3+12+18 · 4 - 6}=132.
2) Составим вспомогательную задачу линейного программирования. Определим целевую функцию
min Zвсп = grad Z(X0) Y = grad Z(X0 ) (X - X0 ) = [Z(X0)/(x1)] (x1-x01) + +[Z(X0)/(x2)] (x2-x02) ={18·3+12; 18·4 - 6}· [(x1-3); (x2-4)] ={66; 66}· [(x1 -
-3); (x2-4)] = 66x1 –198 + 66x2 –264 = 66x1 +66x2 –462.
К этой целевой функции припишем систему ограничений и условия неотрицательности переменных основной задачи:
m
in
Zвсп =
66x1 +66x2
–462.
0 ≤ х1 ≤ 4
1 ≤ х2 ≤ 5
х1 0, х2 0
3) Решаем вспомогательную задачу, являющуюся задачей линейного программирования постоянных размеров.
Решим вспомогательную задачу графическим методом:
1. х1 ≤ 4 – полуплоскость;
х1 = 4 - граничная прямая, проходящая через точку (4;0), параллельно оси ОХ2. Точка «начало координат» (0,0) принадлежит полуплоскости.
2. х2 ≤ 5 – полуплоскость;
х2 = 5 - граничная прямая, проходящая через точку (0;5), параллельно оси ОХ1. Точка (0,0) принадлежит полуплоскости.
3. х2 1 – полуплоскость;
х2 = 1 - граничная прямая, проходящая через точку (0;1), параллельно оси ОХ1. Точка (0,0) не принадлежит полуплоскости.
4 . х1 0,
х2 0, I четверть.
5. Область допустимых решений - четырехугольник ABCD.
6. Zвсп = 66x1 +66x2 –462 – целевая функция
antigrad Z всп = - grad Z всп ={(Z)/(x1); (Z)/(x2)} = {66; 66}. Начало вектора антиградиента – начало координат, точка (0; 0). Конец вектора антиградиента – точка (66; 66). Можно вектор антиградиент масштабировать в 11 раз, тогда конец вектора антиградиента – точка (6; 6). Вектор антиградиент показывает направление минимизации.
7. Строим линию уровня Z = 66x1 +66x2 – 462 = const, перпендикулярную вектору антиградиенту. Таких линий уровня бесчисленное множество. Все они параллельны между собой. Перемещаем линию уровня в направлении вектора антиградиента до первого соприкосновения с областью допустимых решений ABCD. Первое соприкосновение - точка A(0;1) – оптимальное решение, в котором вспомогательная задача имеет минимальное значение: min Zвсп (A)= Zвсп (0;1)= 66 0 +66 1 – 462 = - 396 < 0. Следовательно, направление спуска есть, так как скалярное произведение grad Z(X) Y = grad Z(X) (X - X0 ) ={18x1+12; 18x2 - 6}· [(x1-3); (x2-4)]= 66x1 +66x2 – 462 = 66 0 +66 1 –462 = - 396 имеет отрицательное значение. Точка X*(0,1) - оптимальное решение вспомогательной задачи.
III шаг. Движение по направлению спуска осуществляется шагами до тех пор, пока функция убывает. Точка X* c минимальным значением направления спуска принимается за начальную (исходную) для следующего приближения.
Находим координаты текущей точки приближения
Х тек. = X0 +t ·Y = X0 +t · (X - X0 ), где t[0, 1], а точка X0 = (3;4).
Общий вид приближения Х тек. = [(3;4) +t ·[(x1-3); (x2-4)], где t[0, 1].
Рис. 9. Решение графическим методом вспомогательной задачи
x1тек = 3 + t · (x1-3);
x2тек = 4 + t · (x2-4);
Х тек. = [x1тек; x2тек ] = [3 + t · (x1-3); 4 + t · (x2-4) ].
Однако из решения вспомогательной задачи мы нашли, что решение X имеет значение Х (x1; x2), так как Х(0; 1) – оптимальное решение вспомогательной задачи. Подставим в Х тек. значение точек X0 (3;4) и Х(0; 1), получим x1тек = 3 + t · (0-3);
x2тек = 4 + t · (1-4);
Х тек. = [x1тек; x2тек ] = [3 + t · (0-3); 4 + t · (1-4) ] или
x1тек = 3 - 3t; x2тек = 4 - 3t; имеем
Х тек. = [x1тек; x2тек ] = [3 - 3t; 4 - 3t].
Составим таблицу нахождения текущих точек, меняющихся в зависимости от значения t, t[0, 1].
Таблица 6
Нахождение текущих точек
Номер текущей точки |
Значение t[0, 1]. |
Координаты текущей точки Х тек. |
Значение целевой функции основной задачи Z = = 9х12+9х22+12 х1-6 х2 |
|
x1тек = 3 - 3t; |
x2тек = 4 -3t; |
|||
1 |
0 |
3 |
4 |
237 |
2 |
0,4 |
1,8 |
2,8 |
118,12 |
3 |
0,8 |
0,6 |
1,6 |
29,08 |
4 |
1 |
0 |
1 |
3 |
Точка Х(0,1) при t=1 является начальной точкой для следующего приближения, то есть является X0 (0; 1). Проверяем эту точку на критерий оптимальности, для этого находим Z(X)/(x1); Z(X)/(x2) в точке X0 основной задачи.
Z(X)/(x1) =18· х1 + 12; Z(X0)/(x1) = 18 · 0 + 12= 12;
Z(X0)/(x2) =18· х2 - 6; Z(X0)/(x2) = 18 · 1 - 6 = 12.
По первому признаку (критерию) получено оптимальное решение X* (0; 1). Проверим решение по второму признаку (критерию):
min Zвсп (X0) = grad Z(X0) Y = grad Z(X0) (X - X0) = [Z(X0)/(x1)] (x1-x01) + [Z(X0)/(x2)] (x2-x02) ={12; 12}· [(x1-0); (x2-1)] ={12 x1; 12 x2 -12}
min Zвсп = 12 x1+ 12 x2 -12
min Zвсп = 12· 0+ 12· 1 –12 =0
Получили , что Zвсп (X0) = 0, не зависит от Х, направления спуска нет. Поэтому любое допустимое решение является оптимальным. Например, возьмем за оптимальное решение Xопт = X* (2; 0).
Переходим к отысканию координат текущей точки Х тек. = X0 +t ·Y = X0 +t · (X - X0 ), где t[0, 1], а точка X0 = (0;1),
получим x1тек = 0 + t · (х1 - 0); x2тек = 1 + t · (x2-1);
Х тек. = [x1тек; x2тек ] = [0 + t · (х1 -0); 1 + t · (х2 -1) ] или
x1тек = t · х1; x2тек = 1 + t · (х2 -1);
имеем Х тек. = [x1тек; x2тек ] = [ t · х1; 1 + t · (х2 -1)].
Подставляем в Х тек. = [x1тек; x2тек ] = [ t · х1; 1 + t · (х2 -1) ] координаты точки X* (2; 0), которую мы приняли за Xопт . Получаем Х тек. (2·t ; 1 + t · (0 -1) ) =(2·t ; 1 - t).
Составим таблицу нахождения текущих точек, меняющихся в зависимости от значения t, t[0, 1] и X0 = (0;1).
Таблица 7
Нахождение текущих точек
Номер текущей точки |
Значение t[0, 1] |
Координаты текущей точки Х тек. |
Значение целевой функции основной задачи Z = 9х12+9х22+ +12х1 - 6х2 |
|
x1тек =2·t |
x2тек = 1 - t ; |
|||
0 |
- |
0 |
1 |
3 |
1 |
0 |
0 |
1 |
3 |
2 |
0,01 |
0,02 |
0,99 |
3,2055 |
3 |
0,1 |
0,2 |
0,9 |
4,65 |
4 |
1 |
2 |
0 |
12 |
Точка Х(0,1) при t=0 является начальной точкой для следующего приближения, то есть является X0 (0; 1).
Проверим полученные решения Хтек.t и Хтек.t+1 по второму признаку оптимальности: |X0t - X0t+1 | ≤ ε, ε = 0,02?
|X0t - X0t+1 | = |X0t - X0 | = √[ (x1t-x10)2 + (x2t-x20)2 ].
|X01 - X0 | = √[ (0 - 0)2 + (1 - 1)2 ] = 0; 0 <0,02 = ε, испытание удачное.
|X02 - X01 | = √[ (0 – 0,02)2 + (1 – 0,99)2 ] =√ 0,0004+0,0001=√ 0,0005; √ 0,0005 > 0,02 = ε, испытание неудачное.
|X03 - X02 | = √[ (0,02 – 0,2)2 + (0,99 – 0,9)2 ] =√0,0324+0,0081= √ 0,0405 > 0,02= ε, испытание неудачное.
|X04 - X03| = √[ (2 - 0,2)2 + (0 – 0,9)2 ] = =√3,24+0,81= √ 4,05 > 0,02= ε, испытание неудачное.
Примем за оптимальное решение точку Xопт = X* (0; 1). Но точка X01(0;1) тоже удовлетворяет второму признаку (критерию)оптимальности; кроме того, она удовлетворяет первому признаку оптимальности (критерию), поэтому ее и необходимо принять за оптимальное решение.
min Z = 3, оптимальное решение X*(0;1)
