Я пытаюсь закодировать проблему выпуклой оптимизации, используя пакет CVXR
в R, и пытаюсь переформулировать целевую функцию в нечто выпуклое, если, на самом деле, это возможно.
Вот как выглядит моя математическая формулировка задачи.Прошу прощения за то, что я смешиваю матрицу и обычные обозначения, но в приведенной ниже F есть матрица возвратов.
Таким образом, это в основном фактор-ориентир, заключенный в оптимизацию наименьших квадратов с ограничением.Я надеюсь, что это можно сделать как задачу выпуклой оптимизации, потому что я минимизирую сумму квадратов ошибок во внешней функции, но внутренние бета-версии оказались проблематичными до сих пор.
Вот воспроизводимая попытка кодирования этого:
library(CVXR)
# number of inner beta variables
IB <- 4
# number of outer beta variables
OB <- 3
n <- 102
Y <- rnorm(n-2,mean=1,sd=2)
# F Matrix
F.mat <- matrix(rnorm(n * IB),ncol=IB)
# establish variables for optimization
InnerBetas <- Variable(IB)
OuterBetas <- Variable(OB)
# Set up objective function
OB_IB.obj <- Minimize(sum((Y - (OuterBetas[1] * (F.mat %*% InnerBetas)[1:100] +
OuterBetas[2] * (F.mat %*% InnerBetas)[2:101] +
OuterBetas[3] * (F.mat %*% InnerBetas)[3:102]))^2))
#> Error in OuterBetas[1] * (F.mat %*% InnerBetas)[1:100]:
#> Cannot multiply elementwise AFFINE and AFFINE
Это работает, если я подключаю номера для внутренних или внешних бета-версий и оптимизирую для других, но вы увидите, когда я попробуючтобы сформулировать эту целевую функцию я получаю вышеуказанную ошибку.Есть ли способ сформулировать это так, чтобы оно было выпуклым?