Какую функцию минимизирует InteriorPointSolver Фонда Microsoft Solver?
Я пытаюсь использовать InteriorPointSolver для решения стандартной задачи квадратичного программирования с линейными ограничениями (согласно определению, которое можно найти здесь). В моей задаче нет линейного члена (вектор "с" в определении). Я настраиваю матрицу "Q", используя SetCoefficient(Int32, Rational, Int32, Int32) для всех моих переменных (передавая строку "goal" как vidRow). Правильно ли я предположил, что InteriorPointSolver минимизирует целевую функцию, как это определено в стандартном определении задачи квадратичного программирования?
Я спрашиваю об этом, потому что, когда я сам вычисляю x^T * Q * x (используя оптимальное решение для x, которое я получаю от решателя), я получаю значение, которое существенно отличается от того, что, по утверждению решателя, является оптимальным значением целевой функции (через Statistics.Primal или GetValue(цель)). Единственный раз, когда мои вычисления и оптимальное значение решателя совпадают, это когда я использую единичную матрицу для Q. Я предполагаю, что я что-то настраиваю неправильно или не понимаю точно, какая функция минимизируется.
Я ознакомился со всей документацией, которую могу найти, и не могу найти хорошего объяснения, какую именно функцию решает внутренняя точка. Кто-нибудь может направить меня в правильном направлении?
1 ответ
Как выясняется,
SetCoefficient(goal, 2.0, x, y)
Имеет точно такой же эффект, как
SetCoefficient(goal, 2.0, y, x)
Результатом обоих вызовов является установка коэффициента члена x*y в вашей целевой функции, а второй вызов просто перезаписывает коэффициент, который вы установили в первом вызове. Решатель не рассматривает член xy в отличие от члена yx и не добавляет коэффициенты (как я ожидал). Итак, если ваша цель состоит в том, чтобы в вашей целевой функции был термин 4xy, вы должны сделать следующий вызов:
SetCoefficient(goal, 4.0, x, y)
вместо двух вызовов, перечисленных выше.