Проблема с ограничениями Matlab QuadProg

У меня есть портфель весов, я использую quadprog в Matlab. У меня есть все входы для оптимизатора quadprog. У меня просто возникают проблемы с формулировкой ограничений

Я хотел бы, чтобы у моих ограничений была нижняя граница 0 или 1%, есть ли способ сделать это, поддерживая мою целевую функцию

Спасибо!

1 ответ

Я не уверен, хорошо ли я понимаю ваш вопрос.

Если ваши веса уже определены в процентах, это непосредственно определение quadprog:

x = quadprog(H, f, [], [], [], [], lb, [])

Так H, e, а также f Должно быть предоставлено описание Matlab:

quadprog(H,f) - возвращает вектор x что сводит к минимуму 1/2 * x' * H * x + f' * x, H должно быть положительно определенным, чтобы задача имела конечный минимум ".

А также lb вектор ограничений. Например, если x это вектор 3 x 1, затем lb = [0.01; 0.01; 0.01] в случае желаемого процента 0.01 (1%)

С другой стороны, давайте предположим, что sum_{i=1}^{n} w_i не равно 1, Следовательно, w_i не определяется в процентах.

Таким образом, ограничение, которое вам нужно, p_i (percentage)= w_i / (sum w_i) >= 0.01 (в случае нижней границы 1%).

Обратите внимание, что ограничение в этом случае

w_i >= 0.01 * (sum w_i)

Или же

-0.01 * (sum_{j=1}^{i-1} w_j) + 0.99 * w_i - 0.01 * (sum_{j=i+1}^{n} w_j) >= 0

Или же

0.01 * (sum_{j=1}^{i-1} w_j) - 0.99 w_i + 0.01 * (sum_{j=i+1}^{n} w_j) <= 0

Следовательно, это ограничение типа Ax <= b,

Так

A_ij = 0.01 когда i отличается от j

A_ij = -0.99 когда i = j а также b = zeros(n, 1)

В этом случае вы используете

x = quadprog(H, f, A, b)

Я надеюсь, что помог тебе!

Даниил

Другие вопросы по тегам