|
2 | 2 | { |
3 | 3 | switch(solver, |
4 | 4 | "solnp" = sol$pars, |
| 5 | + "csolnp" = sol$pars, |
5 | 6 | "nloptr" = sol$solution, |
6 | 7 | "optim" = sol$par) |
7 | | - |
8 | 8 | } |
9 | 9 |
|
10 | 10 | .default_options <- function(solver, control = list(trace = 1)) |
11 | 11 | { |
12 | 12 | control <- switch(solver, |
13 | 13 | "solnp" = .solnp_defaults(control), |
| 14 | + "csolnp" = .csolnp_defaults(control), |
14 | 15 | "nloptr" = .nloptr_defaults(control), |
15 | 16 | "optim" = .lbfgsb_defaults(control)) |
16 | 17 | } |
|
46 | 47 | return(control) |
47 | 48 | } |
48 | 49 |
|
| 50 | +.csolnp_defaults <- function(control) |
| 51 | +{ |
| 52 | + if (is.null(control$trace)) control$trace <- 0 |
| 53 | + if (is.null(control$rho)) control$rho <- 1.0 |
| 54 | + if (is.null(control$max_iter)) control$max_iter <- 400 |
| 55 | + if (is.null(control$min_iter)) control$min_iter <- 600 |
| 56 | + if (is.null(control$tol)) control$tol <- 1e-8 |
| 57 | + return(control) |
| 58 | +} |
| 59 | + |
49 | 60 |
|
50 | 61 | .solver_extract_solution <- function(sol, solver = "solnp") |
51 | 62 | { |
52 | 63 | switch(solver, |
53 | 64 | "solnp" = sol$values[length(sol$values)], |
| 65 | + "csolnp" = sol$objective, |
54 | 66 | "nloptr" = sol$objective, |
55 | 67 | "optim" = sol$value) |
56 | 68 | } |
|
61 | 73 | sol <- try(solnp(pars = pars, fun = fun, ineqfun = arglist$inequality_cons, |
62 | 74 | ineqLB = -1.0, ineqUB = 0.0, LB = lower, UB = upper, |
63 | 75 | control = control, arglist = arglist), silent = TRUE) |
| 76 | + } else if (solver == "csolnp") { |
| 77 | + sol <- try(csolnp(pars = pars, fn = fun, ineq_fn = arglist$inequality_cons, |
| 78 | + ineq_lower = -1.0, ineq_upper = 0.0, lower = lower, upper = upper, |
| 79 | + control = control, arglist = arglist), silent = TRUE) |
64 | 80 | } else if (solver == "nloptr") { |
65 | 81 | sol <- try(nloptr(x0 = pars, eval_f = fun, eval_grad_f = arglist$grad, |
66 | 82 | lb = lower, ub = upper, eval_g_ineq = arglist$inequality_cons, |
|
75 | 91 | sol <- try(solnp(pars = pars, fun = fun, ineqfun = arglist$inequality_cons, |
76 | 92 | LB = lower, UB = upper, |
77 | 93 | control = control, arglist = arglist), silent = TRUE) |
| 94 | + } else if (solver == "csolnp") { |
| 95 | + sol <- try(csolnp(pars = pars, fn = fun, ineq_fn = arglist$inequality_cons, |
| 96 | + ineq_lower = -1.0, ineq_upper = 0.0, lower = lower, upper = upper, |
| 97 | + control = control, arglist = arglist), silent = TRUE) |
78 | 98 | } else if (solver == "nloptr") { |
79 | 99 | sol <- try(nloptr(x0 = pars, eval_f = fun, eval_grad_f = arglist$grad, |
80 | 100 | lb = lower, ub = upper, opts = control, |
|
0 commit comments