优化变量的最小值小于下限

时间:2019-07-08 11:08:40

标签: cvxr

我正在尝试使用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

尽管求解器说答案是最优的,但是当约束条件说答案必须在零和一之间时,下界为负。 谁能告诉我代码有什么问题吗?

0 个答案:

没有答案