Общий вид задачи:
целевая функция
![$ Cx \to extr $ $ Cx \to extr $](https://dxdy-02.korotkov.co.uk/f/9/c/1/9c151bfdba25a4e6089b76eb2b9f044d82.png)
ограничения
![$ Ax \leqslant 0 $ $ Ax \leqslant 0 $](https://dxdy-03.korotkov.co.uk/f/2/f/7/2f7c4e205baa4e8b49969d7ca315e30082.png)
Здесь
![$ A $ $ A $](https://dxdy-01.korotkov.co.uk/f/4/d/d/4ddffcd42610c451b271272b7ec5350582.png)
- матрица размера
![$ (m \times n) $ $ (m \times n) $](https://dxdy-03.korotkov.co.uk/f/6/5/1/6514c716082697482e14d55502e9812182.png)
![$ C \in R^n $ $ C \in R^n $](https://dxdy-04.korotkov.co.uk/f/7/f/6/7f6de1c9fb744b5a1585c2266ec977ad82.png)
- вектор коэффициентов целевой функции (строка)
![$ x \in R^n $ $ x \in R^n $](https://dxdy-03.korotkov.co.uk/f/e/d/3/ed3a0602f1e44771d114238936d6039382.png)
- вектор переменных (столбец)
Хочется решить эту задачу методом проекции градиентов, кажется такая адаптация для ЗЛП называется методом Карамаркаре....
Сразу замечу, что речь не о симплекс методе, его экспоненциальная скорость сходимости меня не устроит.
Идея в том, чтобы каждый раз делать шаг в сторону проекции градиента целевой функции на многообразие
![$ \left\{ x | Ax \leqslant 0 \right\} $ $ \left\{ x | Ax \leqslant 0 \right\} $](https://dxdy-04.korotkov.co.uk/f/b/1/7/b172a4384084e68c2781a666b9ab282282.png)
Станет понятно если посмотреть на рисунок:
![Изображение](https://lh6.googleusercontent.com/_MGfXVFY-eQw/TWuQg1gjckI/AAAAAAAAADk/86Y2Gq2Bijk/lpSolv.jpg)
Здесь:
Чёрные тонкие линии это ограничения.
Жирный многоугольник это множество допустимых переменных
![$ x $ $ x $](https://dxdy-03.korotkov.co.uk/f/e/4/f/e4fd027188c5ecbf6abde58e5b94bcd582.png)
.
Красные линии это линии уровня целевой функции.
Красная стрелка указывает направление градиента.
Чёрная стрелка - это проекция градиента на линейное многообразие.
Алгоритм:1) В начальный момент есть допустимая точка
Её можно найти проверив всевозможные пересечения ограничений, на попадание в многообразие
![$ \left\{ x | Ax \leqslant 0 \right\} $ $ \left\{ x | Ax \leqslant 0 \right\} $](https://dxdy-04.korotkov.co.uk/f/b/1/7/b172a4384084e68c2781a666b9ab282282.png)
.
2) Дальше проверяем если шаг по градиенту не выводит из множества допустимых переменных, то пользуемся градиентным методом
![$\alpha$ $\alpha$](https://dxdy-01.korotkov.co.uk/f/c/7/4/c745b9b57c145ec5577b82542b2df54682.png)
- длина шага, находится как решение задачи минимизации функции одной переменной
иначе
пользуемся методом проекции градиентов
![$U_{k+1} = U_k + \alpha * P(C)$ $U_{k+1} = U_k + \alpha * P(C)$](https://dxdy-04.korotkov.co.uk/f/f/b/e/fbe02c871862eff03ac857ee8c1230d582.png)
, где
![$P$ $P$](https://dxdy-02.korotkov.co.uk/f/d/f/5/df5a289587a2f0247a5b97c1e8ac58ca82.png)
- оператор проектирования
![$P=B^T(B^TB)^{-1}B$ $P=B^T(B^TB)^{-1}B$](https://dxdy-04.korotkov.co.uk/f/7/7/8/7785932c82b77656b49b6adfe65ee92782.png)
B - матрица из транспонированных градиентов тех ограничений, которые обратились в равенства (грани многообразия на которых находится точка).
3) Если
![$U_{k+1} = U_{k}$ $U_{k+1} = U_{k}$](https://dxdy-02.korotkov.co.uk/f/9/e/b/9eb725414a66c74508124227f49e626982.png)
, то мы нашли максимум.
Вопросы. Когда я попытался решить задачу таким способом обнаружил:
1) Не могу спроектировать градиент.
![$P(C)$ $P(C)$](https://dxdy-02.korotkov.co.uk/f/9/3/c/93cab70f2377e7a8facca81dcc5f914282.png)
не работает, в случае одного активного ограничения матрица
![$B^TB$ $B^TB$](https://dxdy-02.korotkov.co.uk/f/d/7/7/d77ceda74372f930009242cf0051c95f82.png)
не обращается.
2) Для поиска длинны шага непонятно как решить задачу минимизации.
ИсточникЧтобы понять как работает метод проекций градиента я использовал
статью.