libprima / prima

PRIMA is a package for solving general nonlinear optimization problems without using derivatives. It provides the reference implementation for Powell's derivative-free optimization methods, i.e., COBYLA, UOBYQA, NEWUOA, BOBYQA, and LINCOA. PRIMA means Reference Implementation for Powell's methods with Modernization and Amelioration, P for Powell.
http://libprima.net
BSD 3-Clause "New" or "Revised" License
306 stars 40 forks source link

Make LINCOA and COBYLA respect bounds #42

Open zaikunzhang opened 1 year ago

zaikunzhang commented 1 year ago

The same as BOBYQA and COBYQA, it will be desirable to make LINCOA and COBYLA respect bounds, meaning that they never visit points that violate the bound constraints. This is because such constraints often represent mathematical or physical restrictions that cannot be lifted, and the objective/constraint functions may be undefined if they are violated.

This will first be implemented in the Fortran version. We will adopt the approach used by Powell in BOBYQA. See https://github.com/libprima/prima/pull/28#issuecomment-1663554409.

N.B.:

  1. Both LINCOA and COBYLA are infeasible methods, which can visit points that do not satisfy the constraints. Nevertheless, the iterates are expected to satisfy the constraints asymptotically (i.e., after infinitely many iterations, which is only on theoretical interests). This type of method is not uncommon in optimization. Unless there is a failure, a point returned by these methods should approximately satisfy the constraints.

  2. Here, we are only concerned about the bound constraints. We hope to make the iterates always respect the bounds, although they may still violate other linear or nonlinear constraints. This is because bound constraints often represent mathematical or physical restrictions that cannot be lifted, and the objective/constraint functions may be undefined if they are violated.