Как я могу решить Unit Commitment, вызвав CPLEX методом Mix Integer Quadratic Programming

Функция в CPLEX может решить только квадратичную задачу. А если функция затрат квадратична и ее нужно умножить на вектор обязательств, то она становится уравнением третьего порядка. Во многих статьях объясняется, как преобразовать квадратичную функцию в ступенчатую, и математический способ прост для понимания. Однако я не знаю, как поместить переданные функции в cplexmiqp() в Cplex, потому что матрицу коэффициентов трудно определить. Может ли кто-нибудь сказать мне, как реализовать этот вопрос в функции cplex, и, если возможно, образец программы будет очень полезен! Спасибо!


person Dear Darcy    schedule 04.11.2013    source источник


Ответы (1)


Вы не умножаете стоимость на двоичную переменную. Вместо этого вы используете логические импликации для моделирования.

Вместо записи d*P^2, где d — двоичное число, а P — непрерывная переменная, вы вводите новую переменную, назовем ее B. Если d равно 0, то B должно быть равно нулю, иначе оно должно быть равно P. Ваша новая цель — B^2. Осталось только смоделировать логику

d = 0 implies B = 0
d = 1 implies B = P

Обычно это делается с использованием методов big-M. Если вы знаете, что P неотрицательно и ограничено сверху, скажем, 100, вы можете записать его как

0 <= B <= 100*d
-100*(1-d) <= P-B <= 100*(1-d)

Единственный образец кода, который я могу предоставить, — это пример слоя моделирования на основе MATLAB YALMIP, который можно использовать для интерфейса cplex http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Examples.UnitCommitment

person Johan Löfberg    schedule 05.11.2013