File Exchange

image thumbnail

slp_trust, sqp

version 1.2.2 (808 KB) by

Sequential Linear Programming (SLP) with trust region and Sequential Quadratic Programming (SQP)

26 Downloads

Updated

View License

Solve constrained, nonlinear parameter optimization problems using sequential linear programming with a trust region strategy (slp_trust) or sequential quadratic programming (sqp), similarly to fmincon in the Optimization Toolbox. SQP is a second-order method, implementing Schittkowski's NLPQL Fortran algorithm. SLP is a first-order method, but may be more efficient for large numbers of design variables. Both are implemented using the original calling sequence of the obsolete MATLAB constr.m function from Version 1 of the optim toolbox, but may alternatively accept a problem data structure used by fmincon as an input argument. The original calling sequence had the advantage that one user function computed the objective and constraint values together, with a separate function for their gradients when finite differences were not used. Both slp_trust and sqp offer the feature of complex step derivatives, which can be accurate to machine precision, in place of finite difference derivatives, when the user does not supply a function that computes the derivatives.

Comments and Ratings (17)

In trying to run "runfHaftka4p2p1.m", I was unable to do so because 'trust_adapt' was not available for use in "slp_trust". Could you please include it? Thanks,

Flavio

Flavio (view profile)

Sorry.. I've seen the example with the dummy constraint, nice job

Flavio

Flavio (view profile)

very good for bounded constrained optimizations, but is it possible to perform bounded unconstrained optimization?

Payal Thukral

Hi Robert. Really great job !
Can you tell me if The SLP_Trust can be used for nonlinear equality constraints? I am trying to use it. Thanks!!

Robert Canfield

Inequality constraints are supported. Equality constraints are supported in sqp, but not in sip_trust. The user returns both in the same vector for sqp. See documentation on how to specify them.

Óscar

Óscar (view profile)

Hi Robert, Thank you for sharing such an interesting code. One quick question. Do you maybe have an updated version that supports inequality constraints? Thank you very much.

Robert Canfield

By default slp_trust and sqp request gradients of all constraints from the user, which should handle hundreds of constraints, but may falter for more than that (depending partly on number of design variables). A user may code gradient functions to take advantage of an active set strategy, which is implemented differently in the two codes. For slp_trust the user may code his gradient function to compute only active constraint gradients based on an optional input argument. Only the first iteration requires all gradients. For sqp the user may code her gradient function to compute only active constraint gradients based on a global variable, ACTIVE_CONSTRAINTS. The documentation in the help folder provides the details.

lala

lala (view profile)

Hi Robert ,Thanks for your share. Does the toolbox can solve the large-scale NLP problem,which means it has hundreds of constrains?

Marco, the basic trust region strategy is classical (e.g., Moré, J.J. and D.C. Sorensen, "Computing a Trust Region Step," SIAM Journal on Scientific and Statistical Computing, Vol. 3, pp 553–572, 1983); however, the detailed implementation, including how to treat constraints, is original.

Marco

Marco (view profile)

Hi Robert, I am also tryng to find a reference for the slp_trust algorithm you implemented. I am particulary interested in the trust region update phase, can you help me out? I have serched extensively on scholar but I do not found anything.

Robert Canfield

Marco, thank you. Yes, you did catch a typo: gradg should be gradf on that line. I will correct with next upload.

Marco

Marco (view profile)

Hi Robert,
at line 290 of slp_trust is really
gradf=gradg(:)';

or it should be
gradf=gradf(:)' ?

Thank you for sharing this good piece of code!

Robert Canfield

slp_trust requires lp and sqp requires qp from optimization toolbox to solve respective search direction sub-problems.

Marc Matten

Okay, then I mixed up some downloads.
I had a look on your scipts, aswell. Is it possible to use them without the optimization toolbox?

Robert Canfield

Marc, not sure what you mean about modQPM.m (not one of my m-files). This implementation handles nonlinear and equality constraints.

Marc Matten

Hi Robert,
I really like your SQP program. I found that the current version of 'modSQP.m' handles only inequality and bound constraints. Is there an updated version or a simple way to respect equality and nonlinear constraints?

Updates

1.2.2

Trust region filter is new default for sip_trust. sqp handles quadprog error return better.

1.2.2

Trust region filter is new default for sip_trust. sqp handles quadprog error return better.

1.2.1

Compatible with R2016b Optimization Toolbox version 7.5 optimoptions function.

1.2

Adds trust region filter. [Nocedal and Wright, Numerical Optimization, 2006] Algorithms 4.1, 15.1. See also [Fletcher and Leafier, Mathematical Programming Vol. 91, No. 2, 2002] doi: 10.1007/s101070100244

1.1

Set options.TrustRegion='TRAM' instead of 'on' or 'off' in sip_trust to exercise variable move limit reduction and expansion. Loosely implements trust region approximation method: Wujek, B. A., and Renaud, J. E., AIAA J., 1988.

1.0

Removed .git folder

1.0

Removed .git folder

MATLAB Release
MATLAB 9.1 (R2016b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video