## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## -----------------------------------------------------------------------------
set.seed(123)
n <- 100
p <- 10
beta <- -4:5

X <- matrix(rnorm(n * p), nrow = n)
Y <- X %*% beta + rnorm(n)

## -----------------------------------------------------------------------------
ls.model <- lm(Y ~ 0 + X)

## -----------------------------------------------------------------------------
library(CVXR)

betaHat <- Variable(p)
objective <- Minimize(sum((Y - X %*% betaHat)^2))
problem <- Problem(objective)
result <- psolve(problem) ## use default solver

## -----------------------------------------------------------------------------
cat("Optimal value:", result, "\n")
cbind(CVXR = round(value(betaHat), 3),
      lm   = round(coef(ls.model), 3))

## -----------------------------------------------------------------------------
problem <- Problem(objective, constraints = list(betaHat >= 0))
result <- psolve(problem, solver = "CLARABEL")
round(value(betaHat), 3)

## -----------------------------------------------------------------------------
A <- matrix(c(0, 1, 1, rep(0, 7)), nrow = 1)
B <- diag(c(1, 0, 0, rep(1, 7)))

constraint1 <- A %*% betaHat <= 0
constraint2 <- B %*% betaHat >= 0

problem <- Problem(objective, constraints = list(constraint1, constraint2))
result <- psolve(problem, solver = "CLARABEL", verbose = TRUE) ## verbose = TRUE for details
round(value(betaHat), 3)

## -----------------------------------------------------------------------------
installed_solvers()

## ----eval = FALSE-------------------------------------------------------------
# psolve(problem, solver = "CLARABEL")

## -----------------------------------------------------------------------------
sessionInfo()

