Согласно методу наискорейшего спуска, поиск оптимального решения начинается с допустимого решения и продолжается в направлении вектор -градиента целевой функции до тех пор, пока не будет достигнута точка границы допустимой области. В этой точке направление поиска меняется в соответствии с определенными правилами. Исходное движение в направлении вектор - градиента F обосновано тем, что в этом направлении увеличение F происходит в наибольшей степени.
Рассмотрим применение этого метода к задачам линейного программирования. Необходимо максимизировать целевую функцию
F(x1, x2,…, xn) = c1x1 + c2x2 +…+ cnxn (101)
при линейных ограничениях
а11х1 + а12х2 + … + а1nхn = b1,
а21х1 + а22х2 + … + а2nхn = b2,
…………………………………
аm1х1 + аm2х2 + … + аmnхn = bm, (102)
где сj, аij, bi – константы.
Предполагается, что в ограничениях (102) могут быть как ограничения- равенства, так и ограничения-неравенства со знаками ≥ или ≤. В этом случае ограничения-неравенства со знаками ≥ необходимо преобразовывают к виду неравенств со знаком ≤, умножая обе части ограничений на —1. Ограничения-равенства, если они есть, остаются без изменений.
Предположим, что вектор {x0} = {x1,0, x2,0, …, xn,0} является допустимым решением и не лежит на границе области допустимых решений. Лучшее решение { x 1 } при F1 > F0 получается по формуле
{x1} = { x0} + λ {d0}, (103)
где λ — длина шага, 0 ≤ λ ≤ ε.
Вектор столбец {d0} есть вектор, транспонированный к вектору-градиенту f ( x0 ), определяемому выражением
f ( x ) = [∂f/∂x1, ∂f/∂x2, …, ∂f/∂xn] (104)
Другими словами, элементы вектор - градиента есть частные производные от целевой функции по каждой из переменных. В случае линейной функции
f ( x ) = [c1, c2, …, cn] (105)
|
и {d0} = { c1, c2, …, cn} (106)
Элементы вектора {x1} лучше всего выбрать при максимально возможном значении λ так, чтобы вектор {x1} остался внутри допустимой области. Таким образом, выбранная величина ограничена двумя факторами.
Во-первых, с увеличением λ одна или несколько переменных xj ,1могут уменьшиться до нуля. Далее, поскольку условие неотрицательности xj ,1задано неравенством xj,1 = xj ,0 + λdj ,0 ≥ 0, то для каждого dj ,0 < 0 значение λ ограничено величиной — xj ,0 / dj,0. Для dj ,0 = 0 значение λ становится бесконечно большой величиной, тогда как для положительных dj,0 λ становится отрицательным и потому неприемлемо. По этой причине значение λ ограничено сверху величиной λ1 заданной соотношением
λ1 = min [– xj,0 / dj,0], (107)
в котором рассматриваются лишь положительные xj,0 и отрицательные d j,0. Уравнение (107) дает наибольшее значение λ, при котором ни одно из положительных xj не превращается в отрицательное.
Во-вторых, при увеличении λ можно достигнуть одной или нескольких границ допустимой области. Каждое некритическое ограничение получается умножением 1-й строки [ a i] матрицы A на вектор нового решения { x i}. Это решение допустимо, если [ai] ( {x0} + λ {d0} ) ≤ bi. Отсюда следует, что для каждого некритического ограничения значение λ ограничено величиной ( bi – [ ai] {x0} ) / ([ ai] {d0} ) при условии, что [ a i] { d0 } есть положительное число.
Таким образом, λ ограничено также величиной λ2, которая задана соотношением
λ2 = min (bi – [ ai] { x0} ) / ([ ai] {d0} ) , (108)
в котором рассмотрены лишь положительные [ a i] { d0 } и некритические неравенства.
|
Если λ > λ1, то некоторые переменные станут отрицательными, а если
λ > λ2, то перестанут выполняться некоторые ограничения. Поэтому за длину шага принимают наименьшее из двух чисел λ1 и λ2. В случае линейной целевой функции λ равна верхнему пределу ε.
По достижении границы значение Fможно улучшить, лишь изменив направление поиска. Если двигаться от точки {xv} в направлении {r}, то скорость изменения F равна f(x {r}, где { r } имеет длину, равную единице, т. е. [r] {r} = 1. Так как при достижении границы одна из переменных xjv обращается в нуль, то, для того чтобы не выйти из допустимой области, rj и λ следует выбрать таким образом, чтобы новые значения xj удовлетворяли условиям
xj = xjv + λ rj ≥ 0, (109)
но поскольку xjv = 0 и λ > 0, то отсюда следует, что rj ≥ 0.
С другой стороны, в случае, когда при {x} = {xv} достигается граница, определяемая i-м ограничением, то [ai] {xv} = bi. Чтобы не выйти из допустимой области, {r} и λ следует выбрать так, чтобы новое значение {x} удовлетворяло условию
[ai] {x} = [ ai] ({ xv} + λ {r} ) ≤ bi (110)
Но так как [ai] ({ xv} = bi,то для λ > 0 [ai] {r} ≤ 0. В случае ограничения-равенства [ai] {r} = 0.
Наилучшее направление, удовлетворяющее вышеприведенным условиям, есть направление, в котором максимальна скорость изменения F, т. е. его можно получить, решая следующую задачу линейного программирования, если выбрать {r} так, чтобы для переменных xjv = 0 выполнялось условие 0 ≤ r j ≤ 1, а для других, отличных от нуля переменных r j0, принимало значение -1 ≤ r j ≤ 1.
Необходимо максимизировать скорость изменения F при {x} = {xv}
= f ( x v) { r} (111)
при ограничениях
|
[ai] {r} {≤, =} 0,
0 ≤ r j ≤ 1 для xjv = 0
-1 ≤ r j ≤ 1 для xjv > 0 (112)
В результате выбираем не самый лучший, но допустимый вектор {r}.
Найдя {r}, по наименьшему из λ1 и λ2, заданным формулами (107)
и (108), снова получаем значение λ. Когда f( x v) { r} отрицательно,
процесс завершается, это означает, что найдено оптимальное значение
Необходимо отметить, что в случае линейных ограничений вектор { r } выбирается таким образом, чтобы поиск продолжался вдоль границы критического ограничения.
Этот метод можно проиллюстрировать следующей диаграммой (рис. 10). Поиск решения можно начать с допустимой точки, например a, в направлении вектор - градиента ab, ортогонального к линии постоянного значе-
ния целевой функции F 0 в точке а. Точка b является границей допустимой области, в которой целевая функция F имеет значение F 1большее, чем F 0 Легко видеть, что любое движение в том же направлений от точки а неосуществимо, и потому выбираем новое направление поиска. Это направление выбирается вдоль линии bc на одной из границ, определяе -
мой ограничениями допустимой области. Это направление снова меняется на направление cd, пока, наконец, в точке d достигается максимальное значение целевой функции.
|