Какую функцию минимизирует InteriorPointSolver Фонда Microsoft Solver? - PullRequest
1 голос
/ 25 января 2012

Я пытаюсь использовать InteriorPointSolver для решения стандартной задачи квадратичного программирования с линейными ограничениями (согласно определению, которое можно найти здесь ).В моей задаче нет линейного члена (вектор «с» в определении).Я настраиваю матрицу «Q», используя SetCoefficient (Int32, Rational, Int32, Int32) по всем моим переменным (передавая строку «goal» как vidRow).Правильно ли я считаю, что InteriorPointSolver минимизирует целевую функцию, как это определено в стандартном определении задачи квадратичного программирования?

Я спрашиваю об этом, потому что, когда я сам вычисляю x ^ T * Q * x (используяРешение для х, которое я получаю от решателя), я получаю значение, которое существенно отличается от того, что решатель утверждает, что оптимальное значение целевой функции (через Statistics.Primal или GetValue (цель)).Единственный раз, когда мои вычисления и оптимальное значение решателя совпадают, это когда я использую единичную матрицу для Q. Я предполагаю, что я что-то настраиваю неправильно или не понимаю точно, какая функция минимизируется.

У меня естьознакомился со всей документацией, которую я могу найти, и не могу найти хорошего объяснения, какую именно функцию решает внутренняя точка.Кто-нибудь может направить меня в правильном направлении?

1 Ответ

2 голосов
/ 26 января 2012

Как оказалось,

SetCoefficient(goal, 2.0, x, y)

Имеет тот же эффект, что и

SetCoefficient(goal, 2.0, y, x)

Результатом обоих вызовов является установка коэффициента члена x * y в вашей целевой функции, а второй вызов просто перезаписывает коэффициент, который вы установили в первом вызове. Решатель не рассматривает член xy в отличие от члена yx, а не добавляет коэффициенты (как я ожидал). Итак, если ваша цель состоит в том, чтобы в вашей целевой функции был термин 4xy, вы должны сделать следующий вызов:

SetCoefficient(goal, 4.0, x, y)

вместо двух вызовов, перечисленных выше.

...