我正在尝试使用MOSEK求解器解决CVXR中的以下优化问题。 Objective_Fn 输入矩阵是data_C2(50 X 30),clust_center_C2是列矩阵(50 X 1)。 S_C2是我要最小化的矩阵(50 X 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
尽管求解器说答案是最优的,但是当约束条件说答案必须在零和一之间时,下界为负。 谁能告诉我代码有什么问题吗?