Минимальное значение переменной оптимизации меньше нижней границы - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь решить следующую проблему оптимизации в 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

Хотя решатель говорит, что ответ является оптимальным, нижняя граница отрицательна, когда ограничение говорит, что онодолжен лежать между нулем и единицей.Может кто-нибудь сказать, что не так с кодом?

...