Проблема с ограничениями 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)
Я надеюсь, что помог тебе!
Даниил