Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 1218 / 121 | Оценка: 4.73 / 4.45 | Длительность: 18:17:00
ISBN: 978-5-94774-546-7
Специальности: Программист

Лекция 6: Некоторые задачи нелинейного программирования и нахождение опорного плана для задачи линейного программирования

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >
Аннотация: Предлагаются параллельные методы решения задач нелинейного программирования с линейными ограничениями, произвольной "плоской" задачи нелинейного программирования, а также метод нахождения опорного плана для задачи линейного программирования на основе анализа нормалей к поверхности многогранника допустимых решений.

Параллельное решение задач НП при линейных ограничениях

Пусть решается задача

f(x1, ... ,xn) -> max

при ограничениях

g1(x1, ... ,xn) >= 0

g2(x1, ... ,xn) >= 0

...

gm(x1, ... ,xn) >= 0

и при условиях: gi — линейны, xi >= 0, i = 1, ... ,m.

Предположим, что гиперплоскости gi, i = 1, ... ,m, возможно, совместно с координатными плоскостями, образуют в n -мерном пространстве выпуклый многогранник R допустимых решений, т.е. область задания функции f.

Определим, как и ранее, все вершины {X1, ... ,Xn}, Xl =(x1(l) , ... ,xn(l) ), l = 1, ... ,N, этого многогранника в результате решения Cm + nn систем n линейных уравнений на основе всех заданных и возможных его граней

\begin{gathered}
g_1 = 0\\
\ldots\\
g_m = 0\\
x_1 = 0\\
\ldots\\
x_n = 0.
\end{gathered}
Тогда множество точек X = (x1,x2, ... ,xn) этого многогранника описывается как X=\sum_{l=1}^Nk_lX_l, где 0 <= kl<= 1, \sum_{l=1}^Nk_l=1. Или:
\left\{ \begin{gathered}
  x_1  = k_1 x_1^{(1)}  + k_2 x_1^{(2)}  + ... + k_{N - 1} x_1^{(N - 1)}  + (1
-
\sum\limits_{l = 1}^{N - 1} {k_l )x_1^{(N)} }  \\
\ldots\\
  x_n  = k_1 x_n^{(1)}  + k_2 x_n^{(2)}  + ... + k_{N - 1} x_n^{(N - 1)}  + (1
-
\sum\limits_{l = 1}^{N - 1} {k_l )x_n^{(N)} } . \\
\end{gathered}  \right.
а целевая функция на многограннике R становится функцией параметров f(x1, ... ,x_n) = f*(k1, ... ,k_{N-1}).

Т.е., задавая разные значения k1, k2, ... ,k_{N-1} так, чтобы выполнялось условие 0<= kl <= 1, так же как и для

k_N 
= 1 - \sum\limits_{l = 1}^{N - 1} {k_l  \geqslant 0,}
мы можем организовать перебор всех точек R с некоторым шагом h по всем параметрам. Этим мы накладываем N -мерную "сетку" на многогранник R. В каждой точке-узле этой сетки мы будем находить значение функции f* и выберем максимальное. Шаг h должен быть выбран так, чтобы обеспечить необходимую точность решения задачи.

Распараллеливание возможно на двух этапах решения:

  1. Распределение систем линейных уравнений между процессорами для нахождения всех вершин многогранника допустимых решений. (Эквивалентно прямому перебору при решении задачи линейного программирования.)
  2. Распределение между процессорами узлов сетки — точек многогранника допустимых решений для нахождения и анализа в них значений целевой функции.

Метод допускает развитие и совершенствование.

Например, движение в сторону возрастания функции f может быть направленным, определяемым с помощью конечно-разностных значений частных производных по параметрам kl в точке текущего анализа функции f. Это вариант так называемого градиентного метода. Эти же значения частных производных могут определять переменный шаг h.

Пример (рис. 6.1)

f(x,y)=x2+y -> max

при ограничениях

-x-2y+12 >= 0

-3x-y+21 >= 0

и при условии x,y >= 0.

Нелинейная задача с линейными ограничениями

Рис. 6.1. Нелинейная задача с линейными ограничениями

Решая попарно уравнения границ, находим

Xl=(0,0), X2=(0,6), X3=(6,3), X4=(7,0).

Уравнение многогранника R:

\begin{gathered}
  x = k_1  \cdot 0 + k_2  \cdot 0 + k_3  \cdot 6 + k_4  \cdot 7 \\
  y = k_1  \cdot 0 + k_2  \cdot 6 + k_3  \cdot 3 + k_4  \cdot 0 \\
  \quad 0 \le k_1 ,k_2 ,k_3 ,k_4  \le 1,\quad \sum\limits_{i =
1}^4 {k_i
}  = 1, \\
  f(x,\;y) = f^*(k_1 ,\,k_2 ,\,k_3 ),\quad k_4  = 1 - \sum\limits_{i = 1}^3
{k_i .}  \\
\end{gathered}

Пусть h — шаг изменения каждого ki для получения испытываемой точки X многогранника R. Будем перебирать точки

k1 = 0, k2 = 0, k3 = 0 ( тем самым k4 = 1);

k1 = h, k2 = 0, k3 = 0 (k4 = 1-h);

k1 = h, k2 = h, k3 = 0 (k4 = 1-2h);

k1 = h, k2 = h, k3 = h (k4 = 1-3h);

k1 = 2h, k2 = h, k3 = h (k4 = 1-4h);

...

Однако нам надо следить, чтобы величина k4 = 1 - k1 - k2 - k3 оставалась неотрицательной.

Выполнив такой перебор, например, для h = 0,1, получим max f(x,y) = f*(k1 = 0, k2 = 0, k3 = 0, k4 = 1) = f(7,0) = 49.

< Лекция 5 || Лекция 6: 123456 || Лекция 7 >