You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.)
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
):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.
The text was updated successfully, but these errors were encountered: