Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zaikunzhang opened this issue Oct 18, 2023 · 0 comments

Comments

@zaikunzhang
Copy link
Member

zaikunzhang commented Oct 18, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant