C------------------------------------------------------------------------------ C C SQP METHOD SOLVES NONLINEAR OPTIMIZATION PROBLEMS OF TYPE C C MINIMIZE F(X) C C S.T. L <= ( X ) <= U C ( G(X) ) C C L IS A LOWER BOUND, U IS AN UPPER BOUND C F AND G ARE AT LEAST CONTINUOUSLY DIFFERENTIABLE C C CALL TO SQP: C C CALL SQP(OBJ,CON,MERIT,IMETHOD,N,M,X,LAMBDA,PARAM,IPARAM, C + L,U,F,GRAD,G,LDJ,GJAC,N+1,HESS,ACTIVE, C + LRW,WORK,LIW,IWORK,IUSER,USER,IER) C C PARAMETERS TO SQP: C C OBJ : EXTERNAL FUNCTION THAT DEFINES F AND THE GRADIENT OF F C C SUBROUTINE OBJ( IMODE,N,X,F,GRAD,IUSER,USER ) C IMPLICIT NONE C INTEGER IMODE,N,IUSER(*) C DOUBLEPRECISION X(*),GRAD(*),F,USER(*) C C IMODE : IF IMODE IS SET TO ONE, THEN THE SQP METHOD RETURNS TO THE C CALLING PROGRAM WITH ERROR MESSAGE IER=-4 C C C CON : EXTERNAL FUNCTION THAT DEFINES G AND THE JACOBIAN OF G C C SUBROUTINE CON(IMODE,N,M,X,G,LDJ,GJAC,IUSER,USER ) C IMPLICIT NONE C INTEGER IMODE,N,M,LDJ,IUSER(*) C DOUBLEPRECISION X(*),G(*),GJAC(LDJ,*),USER(*) C C IMODE : IF IMODE IS SET TO ONE, THEN THE SQP METHOD RETURNS TO THE C CALLING PROGRAM WITH ERROR MESSAGE IER=-4 C C MERIT : CHAR ARRAY C MERIT FUNCTION C 'L1SQP' : L1-PENALTY FUNCTION IN COMBINATION WITH A C SEQUENTIAL QUADRATIC PROGRAMMING METHOD C 'L1SLP' : L1-PENALTY FUNCTION IN COMBINATION WITH A C SEQUENTIAL LINEAR PROGRAMMING METHOD C 'AUSQP' : AUGMENTED LAGRANGIAN PENALTY FUNCTION IN COMBINATION C WITH A SEQUENTIAL QUADRATIC PROGRAMMING METHOD C 'AUSLP' : AUGMENTED LAGRANGIAN PENALTY FUNCTION IN COMBINATION C WITH A SEQUENTIAL LINEAR PROGRAMMING METHOD C IMETHOD: INTEGER C UPDATE FORMULA FOR PENALTY-PARAMETER C 0 : POWELL'S UPDATE FORMULA C 1 : QP-MULTIPLIER+UPDATE C 2 : QP-MULTIPLIER C 3 : SCHITTKOWSKI'S UPDATE FORMULA I C 4 : SCHITTKOWSKI'S UPDATE FORMULA II C 0-2 ARE SUITABLE FOR 'L1SQP' AND 'L1SLP', WHILE 3-4 ARE C SUITABLE FOR 'AUSQP' AND 'AUSLP' C N : INTEGER C NUMBER OF VARIABLES (DIMENSION OF X) C M : INTEGER C NUMBER OF NONLINEAR CONSTRAINTS (DIMENSION OF G) C X : DOUBLEPRECISION ARRAY OF DIMENSION >=N C INPUT : INITIAL GUESS FOR VARIABLES C OUTPUT : RESULT OF SQP METHOD C LAMBDA : DOUBLEPRECISION ARRAY OF DIMENSION >=N+M C INPUT : INITIAL GUESS FOR LAGRANGE MULTIPLIERS C OUTPUT : RESULT OF SQP METHOD C PARAM : DOUBLEPRECISION ARRAY OF DIMENSION >=12 C CONSTANTS USED IN SQP C PARAM(1) = OPTIMALITY TOLERANCE C PARAM(2) = FEASIBILITY TOLERANCE C PARAM(3) = INFINITY C PARAM(4) = FUNCTION PRECISION C PARAM(5) = STEP SIZE FACTOR IN ARMIJO RULE (0=4 C CONSTANTS USED IN SQP C IPARAM(1)= MAXIMAL NUMBER OF ITERATIONS C IPARAM(2)= PRINT LEVEL (0=NO OUTPUT,1=NORMAL OUTPUT, C 10=QP-OUTPUT,20=COMPLETE OUTPUT) C IPARAM(3)= FILE NUMBER FOR OUTPUT (6=SCREEN) C IPARAM(4)= SWITCH FOR NONMONOTONE STEP SIZE ALGORITHM C (0=OFF, 1=ON) C L : DOUBLEPRECISION ARRAY OF DIMENSION >=N+M C LOWER BOUNDS FOR X AND G C U : DOUBLEPRECISION ARRAY OF DIMENSION >=N+M C UPPER BOUNDS FOR X AND G C F : DOUBLEPRECISION C OUTPUT: OBJECTIVE FUNCTION VALUE C GRAD : DOUBLEPRECISION ARRAY OF DIMENSION >=N+1 C GRADIENT OF OBJECTIVE FUNCTION C G : DOUBLEPRECISION ARRAY OF DIMENSION >=M C NONLINEAR CONSTRAINTS C LDJ : INTEGER >=M C LEADING DIMENSION OF THE ARRAY GJAC(LDJ,N) C LDR : INTEGER >=N+1 C LEADING DIMENSION OF THE ARRAY HESS(LDR,N+1) C HESS : DOUBLEPRECISION ARRAY OF DIMENSION >= (N+1,N+1) C BFGS-UPDATE MATRIX C ACTIVE : CHAR*2 ARRAY >=N+M+1 C STATUS OF THE CONSTRAINTS C 'IA' = INACTIVE, 'UB' = UPPER BOUND, 'LB' = LOWER BOUND C LRW : INTEGER C LENGTH OF DOUBLEPRECISION WORK ARRAY C WORK : DOUBLEPRECISION ARRAY OF DIMENSION LRW C DOUBLEPRECISION WORK ARRAY C LIW : INTEGER C LENGTH OF INTEGER WORK ARRAY C IWORK : INTEGER ARRAY OF DIMENSION LIW C INTEGER WORK ARRAY C IUSER : INTEGER WORK ARRAY FOR USER DATA C USER : DOUBLEPRECISION WORK ARRAY FOR USER DATA C IER : INTEGER FOR ERROR MESSAGES C ON ENTRY: C 1 = HOT START: BFGS MATRIX AND WEIGHTS IN MERIT FUNCTION C ARE TAKEN FROM PREVIOUS RUN C <>1 = BFGS MATRIX IS INITIALIZED BY IDENTITY MATRIX; C WEIGHTS IN MERIT FUNCTION ARE INITIALIZED BY ONE C ON EXIT: C 0 = SUCCESSFUL, KKT POINT FOUND TO THE REQUESTED ACCURACY C 1 = SUCCESSFUL, SEARCH DIRECTION ZERO, KKT POINT FOUND, C MAYBE NOT TO THE REQUESTED ACCURACY C 2 = SUCCESSFUL, D*BK*D <= EPS^2 => SEARCH DIRECTION C SUFFICIENTLY SMALL, KKT POINT FOUND, C MAYBE NOT TO THE REQUESTED ACCURACY C 3 = SUCCESSFUL, STATIONARY POINT OF MERIT FUNCTION FOUND C 4 = MAXIMUM NUMBER OF ITERATIONS REACHED C 6 = FAILED, PROBLEM PROBABLY INFEASIBLE C -1 = ERROR IN DIMENSIONS C -2 = NOT ENOUGH WORKING SPACE IN RWORK OR IWORK C -3 = ERROR IN LINE SEARCH, NO STEP SIZE FOUND C -4 = USER REQUESTED BREAK (IMODE IS SET TO ONE IN OBJ OR CON) C QP ERROR MESSAGES: C -10 = NOT ENOUGH REAL WORKING SPACE FOR QP SUBROUTINE C -20 = NOT ENOUGH INTEGER WORKING SPACE FOR QP SUBROUTINE C -30 = LOWER BOUND GREATER THAN UPPER BOUND C -300 = ERROR IN PHASE 1 OF QP SUBPROBLEM: NO FEASIBLE POINT C POINT C -100 = ERROR IN PHASE 1 OF QP SUBPROBLEM: LINEAR SYSTEM NOT C SOLVABLE C -200 = ERROR IN PHASE 1 OF QP SUBPROBLEM: PROBLEM NOT SOLVABLE C -1000 = NOT ENOUGH REAL WORKING SPACE IN QRLGS C -2000 = QR DECOMPOSITION FAILED IN QRLGS C -3000 = DORMQR (LEFT) FAILED IN QRLGS C -4000 = DORMQR (RIGHTS) FAILED IN QRLGS C -5000 = CHOLESKY DECOMPOSITION FAILED IN QRLGS C -6000 = FORWARD SUBSTITUTION FAILED IN QRLGS C -7000 = BACKWARD SUBSTITUTION FAILED IN QRLGS C -8000 = R IS SINGULAR IN QRLGS C -9000 = DORMQR (DX) FAILED IN QRLGS C C-----------------------------------------------------------------------------