Я пытаюсь решить следующую проблему оптимизации в CVXR с помощью MOSEK solver. Objective_Fn Матрица ввода - data_C2 (50 X 30), а clust_center_C2 - матрица столбцов (50 X 1).S_C2 - это матрица (50 х 50), которую я пытаюсь минимизировать.Это мой код R
library(CVXR)
N <- ncol(data_C2)
predictors <- nrow(data_C2)
ones <- matrix(1, nrow = predictors, ncol = 1)
lambda <- 20
#==================================================================#
# Optimization variable
S_C2 <- Variable(rows = predictors, cols = predictors)
X_C2 <- data_C2
# Constraint
constr_C2 <- list(norm1(S_C2 %*% ones) <= lambda_req, S_C2[,] >= 0, S_C2[,] <= 1)
# Objective Function
objective_C2 <- 0
for (i in 1:N) {
objective_C2 <- objective_C2 +
square(norm2(clust_center_C2 - S_C2 %*% X_C2[,i]))
}
# CVXR
prob_C2 <- Problem(Minimize(objective_C2), constr_C2)
CVXR_result_C2 <- solve(prob_C2, solver = "MOSEK", verbose = TRUE)
# solution status by solver
CVXR_result_C2$status
# optimal value of beta
cvxrBeta_C2 <- CVXR_result_C2$getValue(S_C2)
min(cvxrBeta_C2)
max(cvxrBeta_C2)
Вывод, полученный в консоли R
> CVXR_result_C2$status
[1] "optimal"
> min(cvxrBeta_C2)
[1] -2.11832e-09
> max(cvxrBeta_C2)
[1] 0.4402582
Хотя решатель говорит, что ответ является оптимальным, нижняя граница отрицательна, когда ограничение говорит, что онодолжен лежать между нулем и единицей.Может кто-нибудь сказать, что не так с кодом?