Feasible Sequential Quadratic Programming in Matlab

3 views (last 30 days)
Hi all, I have encountered a problem regarding optimisation that the design variables at the end of an iteration updated from optimizer fmincon (SQP) are not within the feasible domain defined by a non-linear constraint.
Particularly, my constraint has the similar form to a quadratic function,
e.g. c[1] = x_1^2 + x_2^2 <= 1.
c[2] = x_3^2 + x_4^2 <= 1.
...
c[n] = x_n-1^2 + x_n^2 <= 1.
However, every time I printed the values of my constraint function, there would be some (not all) of those which are greater than 0, which means the design variables computed by SQP were not strictly restrained by the constraints at the beginning of an iteration. This would cause analysis abortion as variables outside feasible domain can cause illogical objective function values in my case.
I have found some statements on the website saying that Matlab built-in SQP is not able to generate feasible iterates (iterations in which design variables are strictly bounded by constraints) but FSQP (Feasible Sequential Quadratic Programming in Matlab) can. But I failed to find FSQP within Matlab-2017b optimisation toolbox. Is there anyone having doable suggestion to deal with this problem?

Answers (1)

Alan Weiss
Alan Weiss on 9 Feb 2018
There is no solver in Optimization Toolbox™ or Global Optimization Toolbox that guarantees that intermediate iterates will be feasible with respect to nonlinear constraints. Sorry. If there is something on the File Exchange that does it, well, I don't know about it, but feel free to search there or on Google.
Alan Weiss
MATLAB mathematical toolbox documentation
  2 Comments
FEI YU
FEI YU on 11 Feb 2018
Thank you Alan! For the problem in my case, if the new variables from previous iterates are out of the feasible domain, can I just simply use the old design variables rather those updated to compute the value of the objective function to avoid ill objective, and let the optimizer do self-correction? Do you have any method that can somehow tell the optimizer that it is a wrong direction to follow?
Alan Weiss
Alan Weiss on 12 Feb 2018
I am not sure that I understand what you are asking. If your objective function is undefined at some points, then I suggest that you have the objective function return NaN and you should just use the fmincon 'interior-point' solver (or maybe 'sqp' after things are working with 'interior-point') and let fmincon decide how to recover from NaN values. Make sure that you start from a feasible initial point.
If I misunderstand you, please try asking again.
Alan Weiss
MATLAB mathematical toolbox documentation

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!