Общий вид задачи:
целевая функция
ограничения
Здесь
- матрица размера
- вектор коэффициентов целевой функции (строка)
- вектор переменных (столбец)
Хочется решить эту задачу методом проекции градиентов, кажется такая адаптация для ЗЛП называется методом Карамаркаре....
Сразу замечу, что речь не о симплекс методе, его экспоненциальная скорость сходимости меня не устроит.
Идея в том, чтобы каждый раз делать шаг в сторону проекции градиента целевой функции на многообразие
Станет понятно если посмотреть на рисунок:
Здесь:
Чёрные тонкие линии это ограничения.
Жирный многоугольник это множество допустимых переменных
.
Красные линии это линии уровня целевой функции.
Красная стрелка указывает направление градиента.
Чёрная стрелка - это проекция градиента на линейное многообразие.
Алгоритм:1) В начальный момент есть допустимая точка
Её можно найти проверив всевозможные пересечения ограничений, на попадание в многообразие
.
2) Дальше проверяем если шаг по градиенту не выводит из множества допустимых переменных, то пользуемся градиентным методом
- длина шага, находится как решение задачи минимизации функции одной переменной
иначе
пользуемся методом проекции градиентов
, где
- оператор проектирования
B - матрица из транспонированных градиентов тех ограничений, которые обратились в равенства (грани многообразия на которых находится точка).
3) Если
, то мы нашли максимум.
Вопросы. Когда я попытался решить задачу таким способом обнаружил:
1) Не могу спроектировать градиент.
не работает, в случае одного активного ограничения матрица
не обращается.
2) Для поиска длинны шага непонятно как решить задачу минимизации.
ИсточникЧтобы понять как работает метод проекций градиента я использовал
статью.