Я не уверен, насколько хорошо я понимаю ваш вопрос.
Если веса уже определены в процентном выражении, то есть непосредственно определение 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
не определен в процентном выражении.
Ther поэтому ограничение, которое вам нужно, - 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
Поэтому й is является ограничением типа Ax <= b
.
Так
A_ij = 0.01
когда i
отличается от j
A_ij = -0.99
когда i = j
и b = zeros(n, 1)
В этом случае вы используете
x = quadprog(H, f, A, b)
Я надеюсь, что я помог вам!
Daniel
Привет Даниил, Я пытаюсь установить минимальный быть либо 1% или 0 ничего в between..Thats, что я борюсь с – qfd
@hdg дать мне несколько часов, чтобы обновить свой ответ! ОК? – DanielTheRocketMan
@hdg Я не понимаю, что вы хотите, или вы не понимаете мое решение выше. Конкретно, если все веса больше 2%, например. В этом случае ограниченная и безусловная проблема имеют одинаковые решения. Теперь представьте себе, что неопределенная проблема имеет вес, равный 0,5%, а ваше ограничение составляет 1%. Таким образом, неограниченное решение неприемлемо. Таким образом, ограниченная проблема должна учитывать ограничения, представленные выше. Я не предполагаю, что нижняя граница - это число от 0 до 1%. Если у вас есть сомнения по поводу выше, просто спросите! – DanielTheRocketMan