![]() |
§ 6. Задачи с линейными ограничениями и выпуклыми (вогнутыми) функциями целиРассмотрим теперь решение еще одного вида упрощенных задач, у которых нелинейной (выпуклой или вогнутой) является только функция цели. Будем, например, искать решение задачи с линейными ограничениями вида ![]() (2.28) обращающее в максимум вогнутую функцию цели f (X) = f(x1, ..., xn).
Предположим, что функция f (X) имеет непрерывные первые частные производные в каждой точке множества допустимых решений. Выберем некоторое допустимое решение X0 и определим градиент
Будем искать точку X1, обеспечивающую лучшее приближение к оптимальному решению, чем точка X0, следующим образом. Положим X1 = X0 + αd0, где α - некоторое число, d0 = При переходе от X0 к X1, очевидно, имеются две возможности: Случай 1. Существует такое ε, что X1 = X0 + αd0 является допустимым решением при всех α, определяемых неравенством 0≤α≤ε. Случай 2. Не существует α>0 такого, чтобы X1 = X0 + αd0 было допустимым решением. Рассмотрим сначала первый случай и покажем, что существует α>0, при котором X1 = X0 + αd0 является допустимым решением и f (X1)>f(X0). По условию X1 = X0 + αd0 - допустимое решение для всех 0≤α≤ε; однако это еще не значит, что для всех этих αf (X1)>f(X0). Согласно теореме Лагранжа можно написать [см. 16]: ![]() где ξ = X1 = X0 + αθd0, 0≤θ≤1. Неравенство f (X1)>f(X0) выполняется, если ∇f (ξ) d0>0, что справедливо в задаче на максимум по крайней мере для X1 и некоторого δ>0, таких, что |X1-X0|<δ. Следовательно, если α удовлетворяет соотношению 0<α< min (ε, δ), то X1 ≡ X0 + αd0 является допустимым решением и f (X1)>f(X0). Ясно, что желательно получить возможно большее значение f (X1), но так, чтобы X1 оставалось допустимым решением. Поэтому найдем наибольшее αmax ≡ ε0, для которого X1 ≡ X0 + ε0d0 является еще допустимым решением. Для этого подставим X1 в ограничения задачи и условие xj≥0: ![]() (2.29) Величина а должна выбираться такой, чтобы, во-первых, не нарушались ограничения и, во-вторых, все компоненты xj оставались неотрицательными. Поэтому из (2.29) получаем два условия, которым должна удовлетворять максимальная величина α: ![]() (2.30) ![]() Очевидно, следует принять ε0 = min (ρ, γ). Однако неправильно было бы сразу положить α = ε0, поскольку ∇f (X) меняется при разных X1 и может случиться, что при большом а, когда |X1 - X0|>δ, будет f (X0 + αd0)<f (X0). Поэтому следует взять такое α, 0<α<ε00, которое максимизирует f (X0 + αd0).
Самый простой метод определения необходимого α состоит в делении интервала 0<α≤ε0 на равные части по Δα точками αk = kΔα и вычислении f (X0 + αkd0) для каждого k. Из всех f (X0 + αkd0) следует выбрать наибольшее, и αk, дающее этот максимум, как раз и является искомым. В частности, для задачи линейного программирования, когда Вернемся теперь ко второму случаю, когда сразу не существует α>0, при котором X1 = X0 + αd0 является допустимым решением, т. е. решение X0 находится на границе множества допустимых решений. При этом некоторые из ограничений или условий неотрицательности xj будут сразу нарушаться, если пытаться двигаться по направлению градиента. Определим, в каком направлении нужно двигаться, чтобы ограничения не нарушались, а значения функции цели f увеличивались. Отметим, что к случаю 2 можно прийти также после одного или нескольких изменений значений xj, согласно процедуре случая 1. Поскольку в случае 2 мы лишены возможности двигаться вдоль направления ∇f (X), выберем другое направление, задаваемое некоторым вектором r, |r| = 1, r ≡ (r1, ..., rn). Скорость изменения функции f (X) при движении из точки X0 в направлении r определяется выражением ![]()
т. е. скалярным произведением векторов Запишем изменение переменной X в виде X1 = X0 + αr, считая, что α>0. Поскольку X1 должно быть допустимым решением, можно написать: ![]() (2.31)
Так как точка X0, по определению, находится на границе множества допустимых решений, т. е. ![]() (2.32) Теперь для того чтобы определить направление возрастания f (X) без нарушения ограничений, необходимо решить следующую задачу: ![]() (2.33)
найти максимум z = Можно использовать и более простые способы нахождения возможного r, например, потребовать выполнения условия ![]() (2.34) Предположим, что найден некоторый вектор r0, удовлетворяющий задаче (2.33) или условию (2.34) с ограничениями (2.32) Далее необходимо определить ρ и γ в соответствии с (2.30) и найти ε0, чтобы x1 = x0 + αr0 было допустимым решением задачи (2.28). Процесс движения из точки x1 в точку x2 продолжается, если из точки x1, можно найти направление, для которого ∇f(X1)r1>0. Когда некоторой точке окажется, что ∇f(Xk)rk≤0 для любого rk, которое не приводит к нарушению ограничений,процесс решения заканчивается. Исписанную картину итерационного процесса можно проиллюстрировать геометрически на примере задачи с двумя переменными. Пусть надо найти максимум вогнутой функции f (X) на множестве М переменных (x1, x2). Линии уровня функции f (X) = const (c1<c2<c3) на плоскости переменных (x1, x2) изображены на рис. 2.5. ![]() Рис. 2.5
Пусть за исходную точку взята точка X0. Градиент Из точки X1 уже нельзя двигаться в направлении градиента d1, так как при этом мы выйдем из области допустимых решений. Поэтому ищем вектор r1, решая задачу (2.33), вторая для точки X1 имеет только одно ограничение, задаваемое уравнением прямой, на которой находится эта точка. На рис. 2.5 легко видеть, что вектор r1, составляющий меньший угол с d1, направлен вдоль соответствующего ограничения. Двигаясь в этом направлении, мы приходим в точку X2, где необходимо выбрать другой вектор r2. Далее, двигаясь вдоль вектора r2, приходим в точку X3 = X2 + αr2, в которой f (X) достигает максимума. Процедура определения величины α, для которого решение X3 является оптимальным, описана ранее. Поясним сказанное выше численным примером. Возьмем уже рассматривавшуюся выше (см. § 6, гл. I и § 5, гл. II) задачу распределения ресурсов. Пренебрежем нелинейностью в ограничениях, сохранив нелинейность в функции цели. В результате имеем следующую задачу: найти max f = 2 x1 - 0,1x12 + 3x2 - 0,1 x22
при ограничениях ![]() Выбираем в области допустимых решений начальную точку x01 = 1, x02 = 1, для которой f0 = 4,8. Вектор градиента в этой точке имеет компоненты ![]() ![]() Движемся из точки (x01, x02) в направлении градиента: ![]() где α1 выбирается так, чтобы не нарушались ограничения: ![]()
В соответствии с (2.30) найти max z = (2 - 0,2 x11)r1 + (3 - 0,2x12)r2 = 1,459r1 + 2,270r2
при ограничениях ![]() где r1 и r2 - компоненты вектора направления r. Решение этой задачи есть r1 = 0,894, r2 = -0,447. Таким образом, следует продолжать движение вдоль r, определяя α2 = 1,975 согласно (2.30), а также из второго и третьего ограничений, в которые подставляются значения x21 = 2,703 + 0,894α2 и x22 = 3,649 - 0,447α2. для различных значений α2 имеем: ![]() Таким образом, мы видим, что максимум f достигается где-то в окрестности α2 ≈ 1,5, причем само значение максимума очень слабо зависит от конкретных величин x1 и x2. Значение (α2)max, соответствующее этому максимуму, проще найти из условия ∇f*r = 0, или в нашем случае из выражения (2 - 0,2x1)*0,894 - (3 - 0,2x2)*0,447 = 0, где x1 = 2,703 + 0,894α2, x2 = 3,649 - 0,447α2. Решая это уравнение относительно α2, имеем (α2) = 1,452, x1 = 4,001, x2 = 3,069, fmax = 14,666. На этом процесс решения заканчивается. Итак, мы в общих чертах рассмотрели метод решения задачи максимизации вогнутой функции при линейных ограничениях. Решение подобной задачи минимизации выпуклой функции проводится аналогично, с той лишь разницей, что для минимизации функции цели приходится двигаться в сторону, противоположную градиенту, т. е. брать α<0. |
![]()
|
|||
![]() |
|||||
© MATHEMLIB.RU, 2001-2021
При копировании материалов проекта обязательно ставить ссылку на страницу источник: http://mathemlib.ru/ 'Математическая библиотека' |