Skip to contents

The core of the IPOPT algorithm: a barrier subproblem solved approximately for a decreasing sequence of mu, by Newton steps with a backtracking line search that keeps the iterate strictly feasible. Derivatives are central differences with a fixed step, so no symbolic gradient is required and both language arms follow the same trajectory. When a difference stencil would step outside the feasible set the barrier subproblem is declared finished: the iterate is then within one difference step of the boundary, which is the accuracy a barrier method offers there anyway.

Usage

Ipfsfa(f, constraints, x0, mu0 = 1, outer = 8, inner = 30)

Arguments

f

Objective function of a numeric vector.

constraints

List of functions g_i with g_i(x) <= 0 feasible.

x0

Strictly feasible starting point.

mu0

Initial barrier parameter.

outer

Number of mu reductions.

inner

Newton steps per barrier subproblem.

Value

List with estimate, x, objective, max_violation, mu_final, n, method.

Details

Formula: minimise f(x) - mu sum_i log(-g_i(x)) with g_i(x) <= 0.

References

Waechter and Biegler (2006), On the implementation of an interior-point filter line-search algorithm for large-scale nonlinear programming, Mathematical Programming 106(1):25-57. doi:10.1007/s10107-004-0559-y

Examples

# minimise (x - 2)^2 + (y - 1)^2 subject to x + y <= 2
f <- function(z) (z[1] - 2)^2 + (z[2] - 1)^2
r <- Ipfsfa(f, list(function(z) z[1] + z[2] - 2), x0 = c(0, 0))
round(r$x, 3)   # (1.5, 0.5)
#> [1] 1.5 0.5