2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему
 
 Метод проекций градиента для решения ЗЛП
Сообщение28.02.2011, 16:03 


29/10/09
14
Общий вид задачи:
целевая функция
$ Cx \to extr $
ограничения
$ Ax \leqslant 0 $
Здесь
$ A $ - матрица размера $ (m \times n) $
$ C \in R^n $ - вектор коэффициентов целевой функции (строка)
$ x \in R^n $ - вектор переменных (столбец)
Хочется решить эту задачу методом проекции градиентов, кажется такая адаптация для ЗЛП называется методом Карамаркаре....
Сразу замечу, что речь не о симплекс методе, его экспоненциальная скорость сходимости меня не устроит.
Идея в том, чтобы каждый раз делать шаг в сторону проекции градиента целевой функции на многообразие $ \left\{ x | Ax \leqslant 0 \right\} $
Станет понятно если посмотреть на рисунок:
Изображение
Здесь:
Чёрные тонкие линии это ограничения.
Жирный многоугольник это множество допустимых переменных $ x $.
Красные линии это линии уровня целевой функции.
Красная стрелка указывает направление градиента.
Чёрная стрелка - это проекция градиента на линейное многообразие.
Алгоритм:
1) В начальный момент есть допустимая точка
Её можно найти проверив всевозможные пересечения ограничений, на попадание в многообразие $ \left\{ x | Ax \leqslant 0 \right\} $.
2) Дальше проверяем если шаг по градиенту не выводит из множества допустимых переменных, то пользуемся градиентным методом
$U_{k+1} = U_k + \alpha * C$
$\alpha$ - длина шага, находится как решение задачи минимизации функции одной переменной
иначе
пользуемся методом проекции градиентов
$U_{k+1} = U_k + \alpha * P(C)$, где $P$ - оператор проектирования $P=B^T(B^TB)^{-1}B$
B - матрица из транспонированных градиентов тех ограничений, которые обратились в равенства (грани многообразия на которых находится точка).
3) Если $U_{k+1} = U_{k}$, то мы нашли максимум.

Вопросы. Когда я попытался решить задачу таким способом обнаружил:
1) Не могу спроектировать градиент. $P(C)$ не работает, в случае одного активного ограничения матрица $B^TB$ не обращается.
2) Для поиска длинны шага непонятно как решить задачу минимизации.
Источник
Чтобы понять как работает метод проекций градиента я использовал статью.

 Профиль  
                  
 
 Re: Метод проекций градиента для решения ЗЛП
Сообщение02.03.2011, 12:26 


29/10/09
14
Я понимаю, что довольно сложно переменить метод к задачи для которой он не предназначен.
Возможно кто-нибудь знает источник с описанием алгоритма Карамаркара в моём случае задачи. (т.е. без ограничений $ x_i \geqslant 0, i=0..n $)
Я смотрел "Введение в исследование операций" Хемди А. Таха, там есть описание метода. Оно мне не подходит - лишние ограничения на положительность переменных.

 Профиль  
                  
 
 Re: Метод проекций градиента для решения ЗЛП
Сообщение02.03.2011, 17:32 


14/07/10
206
1) Насколько я понимаю, Вы проектирует градиент на линейное пространство $L = \{ x \mid B x = 0 \}$. Так?
Если да, то у Вас неправильная формула для оператора проектирования. Пусть $P(c)$ - проекция вектора $c$ на $L$, тогда $c - P(c)$ ортогонально $L$. $L$ - есть ортогональное дополнение линейной оболочки строк матрицы $B$, поэтому $c - P(c)$ должно принадлежать линейной оболочке строк матрицы $B$, т.е. $c - P(c) = B^T y$, где $y$ - некоторый вектор. Тогда $B c - B P(c) = B B^T y$. Так как $P(c)$ проекция на $L$, то $B P(c) = 0$, отсюда, если строки матрицы $B$ линейно независимы, то находим $y$ и получаем, что
$$
P(c) = ( E - B^T (B B^T)^{-1} B ) c.
$$
В случае одного активного ограничения $B B^T$ будет числом.

2) Если вам нужна задача минимизации, то решается она очень легко. Если уже знаем $U_k$, то ищем следующую точку в виде $U_k - \alpha c$ (или $U_k - \alpha P(c)$. Если Вы решаете задачу максимизации, то будет "+", а не "-"). Подставим всё, получим, что надо найти минимум $c U_k - \alpha c^2$ на множестве $A U_k - \alpha A c \le 0$, а это есть задача нахождения минимума линейной функции на множестве заданном линейными ограничениями, которая решается совсем несложно (а если учесть, что $Ac \le 0$ или $A P(c) \le 0$, то решение почти очевидно).

 Профиль  
                  
 
 Re: Метод проекций градиента для решения ЗЛП
Сообщение02.03.2011, 20:20 
Заслуженный участник
Аватара пользователя


30/01/09
7068
Связи между методом проекции градиента и алгоритмом Кармаркара я не знаю. Смутно подозреваю, что предложенный метод будет иметь такую же эффективность (в смысле количества щагов), что и симплекс-метод, хотя трудоёмкость одного шага у симплекс-метода меньше. Что касается возможности применения алгоритма Кармаркара к предложенной задаче ЛП (не буду называть как она называется, потому как постоянно путаю названия), то, во-первых, можно перейти к двойственной задаче. Во-вторых, попробуйте применить к исходной задаче метод барьеров. При этом, на каждом шаге получается задача нелинейного программирования без ограничений, к которой можно применить метод Ньютона. Получим мы при этом полиномиальную сходимость - не знаю.

 Профиль  
                  
 
 Re: Метод проекций градиента для решения ЗЛП
Сообщение05.03.2011, 19:37 


29/10/09
14
Так получилось, что я спрятал существенный момент. Самая обыкновенная система ограничений:
$\begin{cases} a_{10}+a_{11}x_1+a_{12}x_2+...+a_{1n}x_n\leq0;\\
  a_{20}+a_{21}x_1+a_{22}x_2+...+a_{2n}x_n\leq0;\\
  ...\\
  a_{m0}+a_{m1}x_1+a_{m2}x_2+...+a_{mn}x_n\leq0.\end{cases}$
Когда у меня есть точка множества $(x_1^{'}; x_2^{'}; ... x_n^{'})$ (где-то на границе). Я имею набор активных ограничений:
$\begin{cases} a_{act_10}+a_{act_11}x_1^{'}+a_{act_12}x_2^{'}+...+a_{act_1n}x_n^{'}=0;\\
  a_{act_20}+a_{act_21}x_1^{'}+a_{act_22}x_2^{'}+...+a_{act_2n}x_n{'}=0;\\
  ...\\
  a_{act_p0}+a_{act_p1}x_1^{'}+a_{act_p2}x_2^{'}+...+a_{act_pn}x_n^{'}=0.\end{cases}$
И вот туда мне и нужно проецировать... если я правильно понимаю. Короче говоря есть свободный член.
мат-ламер писал(а):
Во-вторых, попробуйте применить к исходной задаче метод барьеров.

А есть источник. Мне надо подробно про метод прочитать.

 Профиль  
                  
 
 Re: Метод проекций градиента для решения ЗЛП
Сообщение05.03.2011, 20:06 
Заслуженный участник
Аватара пользователя


30/01/09
7068
Karoed в сообщении #419651 писал(а):
мат-ламер писал(а):
Во-вторых, попробуйте применить к исходной задаче метод барьеров.

А есть источник. Мне надо подробно про метод прочитать.

см. http://www.stanford.edu/~boyd/cvxbook/

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group