Skip to content

For bound-constrained and linearly constrained problems, project the starting point to the feasible region #10

@zaikunzhang

Description

@zaikunzhang

The Fortran code of LINCOA requires the starting point to be (nearly) feasible. If it is not feasible, then the Fortran code will modify the right-hand sides of the linear constraints to make it become "feasible". This is quite unreasonable, but Powell designed the algorithm in this way.

To avoid this unreasonable modification to the linear constraints, we should make sure that the Fortran code receives a (nearly) feasible starting point. To this end, the Julia interface (or any other interface) should project the starting point to the feasible region if the problem is bound-constrained and linearly constrained. This can be done by solving the following strongly convex QP using the "default optimization solver" of Julia (what is the solver? In Python, it is scipy.optimize.minimize):

$\min_{x\in\mathbb{R}^n} ~ (x - x_0)^T(x-x_0)$ subject to the bound and linear constraints.

Note that we do not take the projection for nonlinearly constrained problems. For those problems, PRIMA will call COBYLA, which does not need the starting point to be feasible. (Anyway, projecting the starting point to a nonlinear feasible region is nontrivial, let alone a feasible region defined by black-box constraints.)

For more information, see
https://github.com/libprima/prima/blob/9c3007bba40c0fcf7227650b18a99919037a9668/fortran/lincoa/lincoa.f90#L618-L621
https://github.com/libprima/prima/blob/9c3007bba40c0fcf7227650b18a99919037a9668/matlab/interfaces/private/preprima.m#L268-L295

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions