Я пытаюсь использовать CVXR для решения моей проблемы оптимизации, код, который я написал (я использовал ECOS_BB по умолчанию):
w = Variable(nrow(sigma))
n = Int(nrow(pweights))
objective = Minimize(quad_form(w,sigma-diag(specRisk^2)))
constraints1 = list(w+maxTradeSize*n >= pweights$pctEquity, #Constraint 1
w-maxTradeSize*n <= pweights$pctEquity, #Constraint 2
w*sign(pweights$pctEquity) >= 0, #Constraint 3
sum_entries(n)<=numTrades, #Constraint 4
sum_entries(sign(pweights$pctEquity)*w)<=1.01*grossExposure, #Constraint 5
sum_entries(sign(pweights$pctEquity)*w)>=.99*grossExposure, #Constraint 6
quad_form(w,sigma) <= (volTarget^2), #Constraint 7
n<=1, #Constraint 8
n>=0) #Constraint 9
problem = Problem(objective, constraints1)
result <- psolve(problem, MAXIT=as.integer(2000))
result$status
Это дает мне статус как оптимальный, но когда я проверяю Выходное ограничение 7 не выполняется. Значение (quad_form (w, sigma)) оказывается равным 0,002733956, когда ограничение требует, чтобы оно было ниже 0,0025. Я попробовал следующий код с меньшими ограничениями (здесь ограничение 7 из предыдущего кода было сделано 1-м):
w = Variable(nrow(sigma))
n = Int(nrow(pweights))
objective = Minimize(quad_form(w,sigma-diag(specRisk^2)))
constraints2 = list(quad_form(w,sigma) <= (volTarget^2), #Constraint 1
sum_entries(sign(pweights$pctEquity)*w)<=1.01*grossExposure, #Constraint 2
sum_entries(sign(pweights$pctEquity)*w)>=.99*grossExposure) #Constraint 3
problem = Problem(objective, constraints1)
result <- psolve(problem, MAXIT=as.integer(2000))
result$status
Это дает мне оптимальный вывод с удовлетворением ограничения. Я не могу понять, в чем проблема. Любая помощь по этому вопросу будет принята с благодарностью.