Лекция 6: Некоторые задачи нелинейного программирования и нахождение опорного плана для задачи линейного программирования
Параллельное решение задач НП при линейных ограничениях
Пусть решается задача
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}](/sites/default/files/tex_cache/6e3cf207744c900985f019bd796b7715.png)
![X=\sum_{l=1}^Nk_lX_l](/sites/default/files/tex_cache/543521a863870a5f127cf5c848e65e01.png)
![\sum_{l=1}^Nk_l=1](/sites/default/files/tex_cache/02552146e02209aba23b01f7fdc85f6c.png)
![\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.](/sites/default/files/tex_cache/8df230400d0b79407f25cdc7c9109302.png)
Т.е., задавая разные значения k1, k2, ... ,k_{N-1} так, чтобы выполнялось условие 0<= kl <= 1, так же как и для
![k_N
= 1 - \sum\limits_{l = 1}^{N - 1} {k_l \geqslant 0,}](/sites/default/files/tex_cache/93790ee1140866ac1bee7e5974839cba.png)
Распараллеливание возможно на двух этапах решения:
- Распределение систем линейных уравнений между процессорами для нахождения всех вершин многогранника допустимых решений. (Эквивалентно прямому перебору при решении задачи линейного программирования.)
- Распределение между процессорами узлов сетки — точек многогранника допустимых решений для нахождения и анализа в них значений целевой функции.
Метод допускает развитие и совершенствование.
Например, движение в сторону возрастания функции f может быть направленным, определяемым с помощью конечно-разностных значений частных производных по параметрам kl в точке текущего анализа функции f. Это вариант так называемого градиентного метода. Эти же значения частных производных могут определять переменный шаг h.
Пример (рис. 6.1)
f(x,y)=x2+y -> max
при ограничениях
-x-2y+12 >= 0
-3x-y+21 >= 0
и при условии x,y >= 0.
Решая попарно уравнения границ, находим
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}](/sites/default/files/tex_cache/4ac4b24c039cb71fcbc2c03ca114b3aa.png)
Пусть 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.