************************************************************************ * SUBROUTINE PMINU ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR UNCONSTRAINED MINIMAX OPTIMIZATION. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA NUMBER OF LINEAR APPROXIMATED FUNCTIONS. * RI X(NF) VECTOR OF VARIABLES. * RO AF(NA) VECTOR CONTAINING VALUES OF THE APPROXIMATED * FUNCTIONS. * II IPAR(5) INTEGER PAREMETERS: * IPAR(1) MAXIMUM NUMBER OF ITERATIONS. * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS. * IPAR(3) CORRECTION OF THE BFGS UPDATE IF A NEGATIVE CURVATURE * OCCURS. IPAR(3)=1-NO CORRECTION. IPAR(3)=2-POWELL'S * CORRECTION. * IPAR(4) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * IPAR(5) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * RI RPAR(6) REAL PARAMETERS: * RPAR(1) MAXIMUM STEPSIZE. * RPAR(2) TOLERANCE FOR CHANGE OF VARIABLES. * RPAR(3) TOLERANCE FOR CHANGE OF FUNCTION VALUES. * RPAR(4) TOLERANCE FOR THE FUNCTION VALUE. * RPAR(5) TOLERANCE FOR THE TERMINATION CRITERION. * RPAR(5) TOLERANCE FOR A DESCENT DIRECTION. * RPAR(6) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM PARTIAL DERIVATIVE. * II IEXT TYPE OF OBJECTIVE FUNCTION. IEXT<0-MAXIMUM OF POSITIVE * VALUES. IEXT=0-MAXIMUM OF ABSOLUTE VALUES. IEXT>0-MAXIMUM * OF NEGATIVE VALUES. * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT. * ABS(IPRNT)=1-PRINT OF FINAL RESULTS. * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS. * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL * RESULTS. * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION. * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN * MTESX (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN * MTESF (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB. * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * IF ITERM=-6, THEN THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY ACCEPTABLE. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NDECF NUMBER OF MATRIX DECOMPOSITION. * IO NRES NUMBER OF RESTARTS. * IO NRED NUMBER OF MINOR ITERATIONS. * IO NREM NUMBER OF CONSTRAINT DELETIONS. * IO NADD NUMBER OF CONSTRAINT ADDITIONS. * IO NIT NUMBER OF ITERATIONS. * IO NFV NUMBER OF FUNCTION EVALUATIONS. * IO NFG NUMBER OF GRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PMIN RECURSIVE QUADRATIC PROGRAMMING METHOD WITH THE BFGS * VARIABLE METRIC UPDATE. * * EXTERNAL SUBROUTINES : * SE FUN CONPUTATION OF THE VALUE OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL FUN(NF,KA,X,FA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND FA IS THE VALUE OF THE * APPROXIMATED FUNCTION. * SE DER CONPUTATION OF THE GRADIENT OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL DER(NF,KA,X,GA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND GA(NF) IS THE GRADIENT OF * THE APPROXIMATED FUNCTION. * SUBROUTINE PMINU(NF,NA,X,AF,IPAR,RPAR,F,GMAX,IEXT,IPRNT,ITERM) DOUBLE PRECISION F,GMAX INTEGER IEXT,ITERM,NA,NF DOUBLE PRECISION AF(*),RPAR(6),X(*) INTEGER IPAR(5) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES INTEGER LAFD,LAFO,LAG,LAR,LAZ,LG,LGA,LGO,LH,LIA,LIAA,LS,LXO,NB, + NC,IPRNT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA ALLOCATE (IA(NA+NF+1),RA((NF+NA+8)*NF+2*NA+4)) NB = 0 NC = 0 * * POINTERS FOR AUXILIARY ARRAYS * LAFO = 1 LAFD = LAFO + NA LGA = LAFD + NA LAG = LGA + NF LAR = LAG + NF*NA LAZ = LAR + (NF+1)* (NF+2)/2 LG = LAZ + NF + 1 LH = LG + NF + 1 LS = LH + NF* (NF+1)/2 LXO = LS + NF + 1 LGO = LXO + NF LIA = 1 LIAA = LIA + NA CALL PMIN(NF,NA,NB,NC,X,IA,RA,RA,RA,IA,RA,RA,RA,RA,AF,IA,RA(LAFO), + RA(LAFD),RA(LGA),RA(LAG),IA(LIAA),RA(LAR),RA(LAZ), + RA(LG),RA(LH),RA(LS),RA(LXO),RA(LGO),RPAR(1),RPAR(2), + RPAR(3),RPAR(4),RPAR(5),GMAX,F,IPAR(1),IPAR(2),IPAR(3), + IEXT,IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PMINS ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR MINIMAX OPTIMIZATION WITH SIMPLE BOUNDS. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA NUMBER OF LINEAR APPROXIMATED FUNCTIONS. * II NB CHOICE OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED. * NB>0-SIMPLE BOUNDS ACCEPTED. * RI X(NF) VECTOR OF VARIABLES. * II IX(NF) VECTOR CONTAINING TYPES OF BOUNDS. IX(I)=0-VARIABLE * X(I) IS UNBOUNDED. IX(I)=1-LOVER BOUND XL(I).LE.X(I). * IX(I)=2-UPPER BOUND X(I).LE.XU(I). IX(I)=3-TWO SIDE BOUND * XL(I).LE.X(I).LE.XU(I). IX(I)=5-VARIABLE X(I) IS FIXED. * RI XL(NF) VECTOR CONTAINING LOWER BOUNDS FOR VARIABLES. * RI XU(NF) VECTOR CONTAINING UPPER BOUNDS FOR VARIABLES. * RO AF(NA) VECTOR CONTAINING VALUES OF THE APPROXIMATED * FUNCTIONS. * II IPAR(5) INTEGER PAREMETERS: * IPAR(1) MAXIMUM NUMBER OF ITERATIONS. * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS. * IPAR(3) CORRECTION OF THE BFGS UPDATE IF A NEGATIVE CURVATURE * OCCURS. IPAR(3)=1-NO CORRECTION. IPAR(3)=2-POWELL'S * CORRECTION. * IPAR(4) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * IPAR(5) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * RI RPAR(6) REAL PARAMETERS: * RPAR(1) MAXIMUM STEPSIZE. * RPAR(2) TOLERANCE FOR CHANGE OF VARIABLES. * RPAR(3) TOLERANCE FOR CHANGE OF FUNCTION VALUES. * RPAR(4) TOLERANCE FOR THE FUNCTION VALUE. * RPAR(5) TOLERANCE FOR THE TERMINATION CRITERION. * RPAR(5) TOLERANCE FOR A DESCENT DIRECTION. * RPAR(6) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM PARTIAL DERIVATIVE. * II IEXT TYPE OF OBJECTIVE FUNCTION. IEXT<0-MAXIMUM OF POSITIVE * VALUES. IEXT=0-MAXIMUM OF ABSOLUTE VALUES. IEXT>0-MAXIMUM * OF NEGATIVE VALUES. * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT. * ABS(IPRNT)=1-PRINT OF FINAL RESULTS. * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS. * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL * RESULTS. * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION. * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN * MTESX (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN * MTESF (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB. * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * IF ITERM=-6, THEN THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY ACCEPTABLE. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NDECF NUMBER OF MATRIX DECOMPOSITION. * IO NRES NUMBER OF RESTARTS. * IO NRED NUMBER OF MINOR ITERATIONS. * IO NREM NUMBER OF CONSTRAINT DELETIONS. * IO NADD NUMBER OF CONSTRAINT ADDITIONS. * IO NIT NUMBER OF ITERATIONS. * IO NFV NUMBER OF FUNCTION EVALUATIONS. * IO NFG NUMBER OF GRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PMIN RECURSIVE QUADRATIC PROGRAMMING METHOD WITH THE BFGS * VARIABLE METRIC UPDATE. * * EXTERNAL SUBROUTINES : * SE FUN CONPUTATION OF THE VALUE OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL FUN(NF,KA,X,FA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND FA IS THE VALUE OF THE * APPROXIMATED FUNCTION. * SE DER CONPUTATION OF THE GRADIENT OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL DER(NF,KA,X,GA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND GA(NF) IS THE GRADIENT OF * THE APPROXIMATED FUNCTION. * * METHOD : * RECURSIVE QUADRATIC PROGRAMMING METHOD WITH THE VARIABLE METRIC * UPDATE. * SUBROUTINE PMINS(NF,NA,NB,X,IX,XL,XU,AF,IPAR,RPAR,F,GMAX,IEXT, + IPRNT,ITERM) DOUBLE PRECISION F,GMAX INTEGER IEXT,ITERM,NA,NB,NF DOUBLE PRECISION AF(*),RPAR(6),X(*),XL(*),XU(*) INTEGER IPAR(5),IX(*) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES INTEGER LAFD,LAFO,LAG,LAR,LAZ,LG,LGA,LGO,LH,LIA,LIAA,LS,LXO, + NC,IPRNT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA ALLOCATE (IA(NA+NF+1),RA((NF+NA+8)*NF+2*NA+4)) NC = 0 * * POINTERS FOR AUXILIARY ARRAYS * LAFO = 1 LAFD = LAFO + NA LGA = LAFD + NA LAG = LGA + NF LAR = LAG + NF*NA LAZ = LAR + (NF+1)* (NF+2)/2 LG = LAZ + NF + 1 LH = LG + NF + 1 LS = LH + NF* (NF+1)/2 LXO = LS + NF + 1 LGO = LXO + NF LIA = 1 LIAA = LIA + NA CALL PMIN(NF,NA,NB,NC,X,IX,XL,XU,RA,IA,RA,RA,RA,RA,AF,IA,RA(LAFO), + RA(LAFD),RA(LGA),RA(LAG),IA(LIAA),RA(LAR),RA(LAZ), + RA(LG),RA(LH),RA(LS),RA(LXO),RA(LGO),RPAR(1),RPAR(2), + RPAR(3),RPAR(4),RPAR(5),GMAX,F,IPAR(1),IPAR(2),IPAR(3), + IEXT,IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PMINL ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR MINIMAX OPTIMIZATION WITH SIMPLE BOUNDS * AND GENERAL LINEAR CONSTRAINTS. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA NUMBER OF LINEAR APPROXIMATED FUNCTIONS. * II NB CHOICE OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED. * NB>0-SIMPLE BOUNDS ACCEPTED. * II NC NUMBER OF LINEAR CONSTRAINTS. * RI X(NF) VECTOR OF VARIABLES. * II IX(NF) VECTOR CONTAINING TYPES OF BOUNDS. IX(I)=0-VARIABLE * X(I) IS UNBOUNDED. IX(I)=1-LOVER BOUND XL(I).LE.X(I). * IX(I)=2-UPPER BOUND X(I).LE.XU(I). IX(I)=3-TWO SIDE BOUND * XL(I).LE.X(I).LE.XU(I). IX(I)=5-VARIABLE X(I) IS FIXED. * RI XL(NF) VECTOR CONTAINING LOWER BOUNDS FOR VARIABLES. * RI XU(NF) VECTOR CONTAINING UPPER BOUNDS FOR VARIABLES. * RI CF(NC) VECTOR CONTAINING VALUES OF THE CONSTRAINT FUNCTIONS. * II IC(NC) VECTOR CONTAINING TYPES OF CONSTRAINTS. * IC(KC)=0-CONSTRAINT CF(KC) IS NOT USED. IC(KC)=1-LOVER * CONSTRAINT CL(KC).LE.CF(KC). IC(KC)=2-UPPER CONSTRAINT * CF(KC).LE.CU(KC). IC(KC)=3-TWO SIDE CONSTRAINT * CL(KC).LE.CF(KC).LE.CU(KC). IC(KC)=5-EQUALITY CONSTRAINT * CF(KC).EQ.CL(KC). * RI CL(NC) VECTOR CONTAINING LOWER BOUNDS FOR CONSTRAINT FUNCTIONS. * RI CU(NC) VECTOR CONTAINING UPPER BOUNDS FOR CONSTRAINT FUNCTIONS. * RI CG(NF*NC) MATRIX WHOSE COLUMNS ARE NORMALS OF THE LINEAR * CONSTRAINTS. * RO AF(NA) VECTOR CONTAINING VALUES OF THE APPROXIMATED * FUNCTIONS. * II IPAR(5) INTEGER PAREMETERS: * IPAR(1) MAXIMUM NUMBER OF ITERATIONS. * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS. * IPAR(3) CORRECTION OF THE BFGS UPDATE IF A NEGATIVE CURVATURE * OCCURS. IPAR(3)=1-NO CORRECTION. IPAR(3)=2-POWELL'S * CORRECTION. * IPAR(4) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * IPAR(5) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * RI RPAR(6) REAL PARAMETERS: * RPAR(1) MAXIMUM STEPSIZE. * RPAR(2) TOLERANCE FOR CHANGE OF VARIABLES. * RPAR(3) TOLERANCE FOR CHANGE OF FUNCTION VALUES. * RPAR(4) TOLERANCE FOR THE FUNCTION VALUE. * RPAR(5) TOLERANCE FOR THE TERMINATION CRITERION. * RPAR(5) TOLERANCE FOR A DESCENT DIRECTION. * RPAR(6) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PMIN. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM PARTIAL DERIVATIVE. * II IEXT TYPE OF OBJECTIVE FUNCTION. IEXT<0-MAXIMUM OF POSITIVE * VALUES. IEXT=0-MAXIMUM OF ABSOLUTE VALUES. IEXT>0-MAXIMUM * OF NEGATIVE VALUES. * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT. * ABS(IPRNT)=1-PRINT OF FINAL RESULTS. * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS. * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL * RESULTS. * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION. * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN * MTESX (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN * MTESF (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB. * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * IF ITERM=-6, THEN THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY ACCEPTABLE. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NDECF NUMBER OF MATRIX DECOMPOSITION. * IO NRES NUMBER OF RESTARTS. * IO NRED NUMBER OF MINOR ITERATIONS. * IO NREM NUMBER OF CONSTRAINT DELETIONS. * IO NADD NUMBER OF CONSTRAINT ADDITIONS. * IO NIT NUMBER OF ITERATIONS. * IO NFV NUMBER OF FUNCTION EVALUATIONS. * IO NFG NUMBER OF GRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PMIN RECURSIVE QUADRATIC PROGRAMMING METHOD WITH THE BFGS * VARIABLE METRIC UPDATE. * * EXTERNAL SUBROUTINES : * SE FUN CONPUTATION OF THE VALUE OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL FUN(NF,KA,X,FA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND FA IS THE VALUE OF THE * APPROXIMATED FUNCTION. * SE DER CONPUTATION OF THE GRADIENT OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL DER(NF,KA,X,GA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND GA(NF) IS THE GRADIENT OF * THE APPROXIMATED FUNCTION. * SUBROUTINE PMINL(NF,NA,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,AF,IPAR, + RPAR,F,GMAX,IEXT,IPRNT,ITERM) * * POINTERS FOR AUXILIARY ARRAYS * DOUBLE PRECISION F,GMAX INTEGER IEXT,ITERM,NA,NB,NC,NF DOUBLE PRECISION AF(*),CF(*),CG(*),CL(*),CU(*),RPAR(6),X(*), + XL(*),XU(*) INTEGER IC(*),IPAR(5),IX(*) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES INTEGER LAFD,LAFO,LAG,LAR,LAZ,LCFD,LG,LGA,LGO,LH,LIA,LIAA,LS, + LXO,IPRNT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA ALLOCATE (IA(NA+NF+1),RA((NF+NA+8)*NF+2*NA+NC+4)) LCFD = 1 LAFO = LCFD + NC LAFD = LAFO + NA LGA = LAFD + NA LAG = LGA + NF LAR = LAG + NF*NA LAZ = LAR + (NF+1)* (NF+2)/2 LG = LAZ + NF + 1 LH = LG + NF + 1 LS = LH + NF* (NF+1)/2 LXO = LS + NF + 1 LGO = LXO + NF LIA = 1 LIAA = LIA + NA CALL PMIN(NF,NA,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,RA,AF,IA,RA(LAFO), + RA(LAFD),RA(LGA),RA(LAG),IA(LIAA),RA(LAR),RA(LAZ), + RA(LG),RA(LH),RA(LS),RA(LXO),RA(LGO),RPAR(1),RPAR(2), + RPAR(3),RPAR(4),RPAR(5),GMAX,F,IPAR(1),IPAR(2),IPAR(3), + IEXT,IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PMIN ALL SYSTEMS 97/01/22 * PURPOSE : * GENERAL SUBROUTINE FOR MINIMAX OPTIMIZATION WITH SIMPLE BOUNDS * AND GENERAL LINEAR CONSTRAINTS. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA NUMBER OF LINEAR APPROXIMATED FUNCTIONS. * II NB CHOICE OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED. * NB>0-SIMPLE BOUNDS ACCEPTED. * II NC NUMBER OF LINEAR CONSTRAINTS. * RI X(NF) VECTOR OF VARIABLES. * II IX(NF) VECTOR CONTAINING TYPES OF BOUNDS. IX(I)=0-VARIABLE * X(I) IS UNBOUNDED. IX(I)=1-LOVER BOUND XL(I).LE.X(I). * IX(I)=2-UPPER BOUND X(I).LE.XU(I). IX(I)=3-TWO SIDE BOUND * XL(I).LE.X(I).LE.XU(I). IX(I)=5-VARIABLE X(I) IS FIXED. * RI XL(NF) VECTOR CONTAINING LOWER BOUNDS FOR VARIABLES. * RI XU(NF) VECTOR CONTAINING UPPER BOUNDS FOR VARIABLES. * RO CF(NC) VECTOR CONTAINING VALUES OF THE CONSTRAINT FUNCTIONS. * II IC(NC) VECTOR CONTAINING TYPES OF CONSTRAINTS. * IC(KC)=0-CONSTRAINT CF(KC) IS NOT USED. IC(KC)=1-LOVER * CONSTRAINT CL(KC).LE.CF(KC). IC(KC)=2-UPPER CONSTRAINT * CF(KC).LE.CU(KC). IC(KC)=3-TWO SIDE CONSTRAINT * CL(KC).LE.CF(KC).LE.CU(KC). IC(KC)=5-EQUALITY CONSTRAINT * CF(KC).EQ.CL(KC). * RI CL(NC) VECTOR CONTAINING LOWER BOUNDS FOR CONSTRAINT FUNCTIONS. * RI CU(NC) VECTOR CONTAINING UPPER BOUNDS FOR CONSTRAINT FUNCTIONS. * RI CG(NF*NC) MATRIX WHOSE COLUMNS ARE NORMALS OF THE LINEAR * CONSTRAINTS. * RA CFD(NA) VECTOR CONTAINING INCREMENTS OF THE CONSTRAINT * FUNCTIONS. * RO AF(NA) VECTOR CONTAINING VALUES OF THE APPROXIMATED * FUNCTIONS. * II IA(NA) VECTOR CONTAINING TYPES OF DEVIATIONS. * RA AFO(NA) VECTOR CONTAINING SAVED VALUES OF THE APPROXIMATED * FUNCTIONS. * RA AFD(NA) VECTOR CONTAINING INCREMENTS OF THE APPROXIMATED * FUNCTIONS. * RA GA(NF) GRADIENT OF THE SELECTED APPROXIMATED FUNCTION. * RO AG(NF*NA) MATRIX WHOSE COLUMNS ARE GRADIENTS OF THE * APPROXIMATED FUNCTIONS. * IO IAA(NF+1) VECTOR CONTAINING INDICES OF ACTIVE FUNCTIONS. * RO AR((NF+1)*(NF+2)/2) TRIANGULAR DECOMPOSITION OF KERNEL OF THE * ORTHOGONAL PROJECTION. * RO AZ(NF+1) VECTOR OF LAGRANGE MULTIPLIERS. * RO G(NF) GRADIENT OF THE OBJECTIVE FUNCTION. * RU H(NF*(NF+1)/2) TRIANGULAR DECOMPOSITION OR INVERSION OF THE * HESSIAN MATRIX APPROXIMATION. * RO S(NF+1) DIRECTION VECTOR. * RU XO(NF) VECTORS OF VARIABLES DIFFERENCE. * RI GO(NF) GRADIENTS DIFFERENCE. * RI XMAX MAXIMUM STEPSIZE. * RI TOLX TOLERANCE FOR CHANGE OF VARIABLES. * RI TOLF TOLERANCE FOR CHANGE OF FUNCTION VALUES. * RI TOLB TOLERANCE FOR THE FUNCTION VALUE. * RI TOLG TOLERANCE FOR THE GRADIENT OF THE LAGRANGIAN FUNCTION. * RO GMAX MAXIMUM PARTIAL DERIVATIVE. * RO F VALUE OF THE OBJECTIVE FUNCTION. * FUNCTIONS. * II MIT MAXIMUN NUMBER OF ITERATIONS. * II MFV MAXIMUN NUMBER OF FUNCTION EVALUATIONS. * II MEC CORRECTION IF THE NEGATIVE CURVATURE OCCURS. * MEC=1-CORRECTION SUPPRESSED. MEC=2-POWELL'S CORRECTION. * II IEXT TYPE OF OBJECTIVE FUNCTION. IEXT<0-MAXIMUM OF POSITIVE * VALUES. IEXT=0-MAXIMUM OF ABSOLUTE VALUES. IEXT>0-MAXIMUM * OF NEGATIVE VALUES. * II IPRNT PRINT SPECIFICATION. IPRNT=0-NO PRINT. * ABS(IPRNT)=1-PRINT OF FINAL RESULTS. * ABS(IPRNT)=2-PRINT OF FINAL RESULTS AND ITERATIONS. * IPRNT>0-BASIC FINAL RESULTS. IPRNT<0-EXTENDED FINAL * RESULTS. * IO ITERM VARIABLE THAT INDICATES THE CAUSE OF TERMINATION. * ITERM=1-IF ABS(X-XO) WAS LESS THAN OR EQUAL TO TOLX IN * MTESX (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=2-IF ABS(F-FO) WAS LESS THAN OR EQUAL TO TOLF IN * MTESF (USUALLY TWO) SUBSEQUEBT ITERATIONS. * ITERM=3-IF F IS LESS THAN OR EQUAL TO TOLB. * ITERM=4-IF GMAX IS LESS THAN OR EQUAL TO TOLG. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * IF ITERM=-6, THEN THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY ACCEPTABLE. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NDECF NUMBER OF MATRIX DECOMPOSITION. * IO NRES NUMBER OF RESTARTS. * IO NRED NUMBER OF MINOR ITERATIONS. * IO NREM NUMBER OF CONSTRAINT DELETIONS. * IO NADD NUMBER OF CONSTRAINT ADDITIONS. * IO NIT NUMBER OF ITERATIONS. * IO NFV NUMBER OF FUNCTION EVALUATIONS. * IO NFG NUMBER OF GRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PDDXQ1 DETERMINATION OF THE DESCENT DIRECTION. * S PA1MX2 COMPUTATION OF THE VALUE AND THE GRADIENT OF THE * OBJECTIVE FUNCTION WHICH IS DEFINED AS A MAXIMUM OF THE * APPROXIMATED FUNCTIONS. * S PS0LA2 LINE SEARCH USING ONLY FUNCTION VALUES. * S PYTRFD DETERMINATION OF DIFFERENCES FOR VARIABLE METRIC * UPDATES. * S PUDBG1 VARIABLE METRIC UPDATE AFTER GILL-MURRAY DECOMPOSITION. * S MXDSMI SYMMETRIC MATRIX IS REPLACED BY THE UNIT MATRIX. * RF MXVDOT DOT PRODUCT OF TWO VECTORS. * S MXVCOP COPYING OF A VECTOR. * RF MXVMAX L-INFINITY NORM OF A VECTOR. * * EXTERNAL SUBROUTINES : * SE FUN CONPUTATION OF THE VALUE OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL FUN(NF,KA,X,FA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND FA IS THE VALUE OF THE * APPROXIMATED FUNCTION. * SE DER CONPUTATION OF THE GRADIENT OF THE APPROXIMATED FUNCTION. * CALLING SEQUENCE: CALL DER(NF,KA,X,GA) WHERE NF IS A NUMBER * OF VARIABLES, KA IS THE INDEX OF THE APPROXIMATED FUNCTION, * X(NF) IS A VECTOR OF VARIABLES AND GA(NF) IS THE GRADIENT OF * THE APPROXIMATED FUNCTION. * * METHOD : * RECURSIVE QUADRATIC PROGRAMMING METHOD WITH THE BFGS VARIABLE METRIC * UPDATE. * SUBROUTINE PMIN(NF,NA,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,CFD,AF,IA, + AFO,AFD,GA,AG,IAA,AR,AZ,G,H,S,XO,GO,XMAX,TOLX, + TOLF,TOLB,TOLG,GMAX,F,MIT,MFV,MEC,IEXT,IPRNT, + ITERM) DOUBLE PRECISION F,GMAX,TOLB,TOLD,TOLF,TOLG,TOLS,TOLX,XMAX INTEGER IEXT,IPRNT,ITERM,MEC,MER,MES,MET,MFV,MIT,NA,NB,NC,NF DOUBLE PRECISION AF(*),AFD(*),AFO(*),AG(*),AR(*),AZ(*),CF(*), + CFD(*),CG(*),CL(*),CU(*),G(*),GA(*),GO(*),H(*), + S(*),X(*),XL(*),XO(*),XU(*) INTEGER IA(*),IAA(*),IC(*),IX(*) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES DOUBLE PRECISION ALF1,ALF2,DMAX,EPS7,EPS9,ETA0,ETA2,ETA9,FA,FMAX, + FMIN,FO,GNORM,P,PO,R,RMAX,RMIN,RO,SNORM,TEMP, + UMAX,XNORM INTEGER I,IDECF,IREST,ITERD,ITERH,ITERL,ITERQ,ITERS,K,KA,KBC,KBF, + KC,KD,KIT,LD,MRED,MTESF,MTESX,N,NTESF,NTESX DOUBLE PRECISION MXVDOT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH IF (ABS(IPRNT).GT.1) WRITE (6,'(1X,''ENTRY TO PMIN :'')') * * INITIATION * KBF = 0 KBC = 0 IF (NB.GT.0) KBF = 2 IF (NC.GT.0) KBC = 2 NIT = 0 NFV = 0 NADD = 0 NREM = 0 NRES = 0 NTESX = 0 NTESF = 0 MTESX = 2 MTESF = 2 ITERM = 0 ITERS = 0 ITERD = 0 ITERQ = 0 MRED = 20 IREST = 1 ITERS = 2 NDECF = 0 IDECF = 1 ETA0 = 1.0D-15 ETA2 = 1.0D-15 ETA9 = 1.0D60 EPS7 = 1.0D-10 EPS9 = 1.0D-8 ALF1 = 1.0D-10 ALF2 = 1.0D10 FMAX = 1.0D60 FMIN = 0.0D0 IF (IEXT.NE.0) FMIN = -FMAX IF (TOLX.LE.0.0D0) TOLX = 1.0D-8 IF (TOLF.LE.0.0D0) TOLF = 1.0D-16 IF (TOLG.LE.0.0D0) TOLG = 1.0D-6 IF (TOLB.LE.0.0D0) TOLB = FMIN + 1.0D-16 TOLD = 1.0D-8 TOLS = 1.0D-4 IF (XMAX.LE.0.0D0) XMAX = 1.0D3 MET = 3 IF (MEC.LE.0) MEC = 1 MES = 1 MER = 0 IF (MIT.LE.0) MIT = 1000 IF (MFV.LE.0) MFV = 2000 IF (NC.GT.0) EPS7 = 1.0D-8 KD = 1 LD = -1 KIT = 0 * * INITIATION OF TYPES OF DEVIATIONS * DO 10 KA = 1,NA IA(KA) = 3 IF (IEXT.LT.0) IA(KA) = 2 IF (IEXT.GT.0) IA(KA) = 1 10 CONTINUE * * INITIAL OPERATIONS WITH SIMPLE BOUNDS * IF (KBF.GT.0) THEN DO 20 I = 1,NF IF (IX(I).EQ.3.OR.IX(I).EQ.4) THEN IF (XU(I).LE.XL(I)) THEN XU(I) = XL(I) IX(I) = 5 ENDIF ELSE IF (IX(I).EQ.5.OR.IX(I).EQ.6) THEN XL(I) = X(I) XU(I) = X(I) IX(I) = 5 END IF IF (IX(I).EQ.1 .OR. IX(I).EQ.3) X(I) = MAX(X(I),XL(I)) IF (IX(I).EQ.2 .OR. IX(I).EQ.3) X(I) = MIN(X(I),XU(I)) 20 CONTINUE END IF * INITIAL OPERATIONS WITH GENERAL LINEAR CONSTRAINTS * IF (KBC.GT.0) THEN K = 0 DO 30 KC = 1,NC IF (IC(KC).EQ.3.OR.IC(KC).EQ.4) THEN IF (CU(KC).LE.CL(KC)) THEN CU(KC) = CL(KC) IC(KC) = 5 ENDIF ELSE IF (IC(KC).EQ.5.OR.IC(KC).EQ.6) THEN CU(KC) = CL(KC) IC(KC) = 5 END IF CF(KC) = MXVDOT(NF,X,CG(K+1)) K = K + NF 30 CONTINUE END IF * DETERMINATION OF AN INITIAL FEASIBLE POINT * IF (KBC.GT.0) THEN CALL MXVSET(NF,0.0D0,GO) CALL PLLPB2(NF,NC,X,IX,XO,XL,XU,CF,CFD,IC,IAA,CL,CU,CG,AR,AZ, + GO,GO,S,1,KBF,KBC,ETA9,EPS7,EPS9,UMAX,GMAX,N, + ITERL) ELSE IF (KBF.GT.0) THEN DO 40 I = 1,NF IF (IX(I).GE.5) IX(I) = -IX(I) IF (IX(I).LE.0) THEN ELSE IF (IX(I).EQ.1.OR.IX(I).EQ.3) THEN IF (X(I).LE.XL(I)) THEN X(I) = XL(I) END IF ELSE IF (IX(I).EQ.2.OR.IX(I).EQ.3) THEN IF (X(I).GE.XU(I)) THEN X(I) = XU(I) END IF END IF CALL PLNEWS(X,IX,XL,XU,EPS9,I,ITERL) IF (IX(I).GT.10) IX(I) = 10 - IX(I) 40 CONTINUE END IF FO = FMIN GMAX = ETA9 DMAX = ETA9 * * COMPUTATION OF THE VALUE AND THE GRADIENT OF THE OBJECTIVE * FUNCTION TOGETHER WITH THE VALUES AND THE GRADIENTS OF THE * APPROXIMATED FUNCTIONS * CALL PA1MX2(NF,NA,X,F,FA,AF,GA,AG,G,KD,LD,IEXT) 50 CONTINUE IF (ABS(IPRNT).GT.1) + WRITE (6,'(1X,''NIT='',I5,2X,''NFV='',I5,2X,''NFG='',I5,2X, + ''F='', G16.9,2X,''G='',E10.3)') NIT,NFV,NFG,F,GMAX * * START OF THE ITERATION WITH TESTS FOR TERMINATION. * N = NF UMAX = 0.0D0 IF (ITERM.LT.0) GO TO 90 IF (ITERS.EQ.0) GO TO 60 IF (NIT.LE.0) FO = F + MIN(SQRT(ABS(F)),ABS(F)/1.0D1) IF (F.LE.TOLB) THEN ITERM = 3 GO TO 90 END IF IF (KD.GT.0) THEN IF (GMAX.LE.TOLG .AND. UMAX.LE.TOLG) THEN ITERM = 4 GO TO 90 END IF END IF IF (DMAX.LE.TOLX) THEN ITERM = 1 NTESX = NTESX + 1 IF (NTESX.GE.MTESX) GO TO 90 ELSE NTESX = 0 END IF TEMP = ABS(FO-F)/MAX(ABS(F),1.0D0) IF (TEMP.LE.TOLF) THEN ITERM = 2 NTESF = NTESF + 1 IF (NTESF.GE.MTESF) GO TO 90 ELSE NTESF = 0 END IF 60 IF (NIT.GE.MIT) THEN ITERM = 12 GO TO 90 END IF IF (NFV.GE.MFV) THEN ITERM = 11 GO TO 90 END IF ITERM = 0 NIT = NIT + 1 70 CONTINUE N = NF * * RESTART * IF (IREST.GT.0) THEN CALL MXDSMI(N,H) LD = MIN(LD,1) IDECF = -1 IF (KIT.LT.NIT) THEN NRES = NRES + 1 KIT = NIT ELSE ITERM = -10 IF (ITERS.LT.0) ITERM = ITERS - 5 GO TO 90 END IF END IF * * DIRECTION DETERMINATION USING A SPECIAL QUADRATIC PROGRAMMING * PROCEDURE * CALL MXVCOP(NA,AF,AFO) CALL PDDXQ1(NF,NA,NC,X,IX,XL,XU,AF,AFD,IA,IAA,AG,AR,AZ,CF,IC,CL, + CU,CG,G,H,S,F,KBF,KBC,IDECF,ETA0,ETA2,ETA9,EPS7,EPS9, + TOLG,UMAX,GMAX,GNORM,SNORM,XNORM,N,ITERQ,ITERD,ITERM) IF (ITERQ.LT.0) THEN IREST = 1 GO TO 70 END IF IF (ITERD.LT.0) ITERM = ITERD IF (ITERM.NE.0) GO TO 90 * * TEST FOR SUFFICIENT DESCENT * P = MXVDOT(NF,G,S) IREST = 1 IF (SNORM.LE.0.0D0) THEN ELSE IF (P+TOLD*GNORM*SNORM.LE.0.0D0) THEN IREST = 0 END IF IF (IREST.EQ.0) THEN NRED = 0 RMIN = ALF1*GNORM/SNORM RMAX = MIN(ALF2*GNORM/SNORM,XMAX/SNORM) ELSE GO TO 70 END IF * * PREPARATION OF LINE SEARCH * RO = 0.0D0 FO = F PO = P CALL MXVCOP(NF,X,XO) CALL MXVCOP(NF,G,GO) * * LINE SEARCH WITHOUT DIRECTIONAL DERIVATIVES * CALL PS0LA2(NF,NA,X,XO,S,R,RO,F,FO,PO,RMIN,RMAX,FMIN,FMAX,FA,AF, + GA,AG,G,KD,LD,IEXT,NIT,KIT,TOLS,MES,NRED,MRED,ITERS) * * DECISION AFTER UNSUCCESSFUL LINE SEARCH * IF (ITERS.LE.0) THEN R = 0.0D0 F = FO P = PO CALL MXVCOP(NF,XO,X) CALL MXVCOP(NA,AFO,AF) IREST = 1 LD = KD GO TO 70 ELSE IF (KBC.GT.0) THEN K = 0 DO 80 KC = 1,NC CF(KC) = MXVDOT(NF,X,CG(K+1)) K = K + NF 80 CONTINUE END IF * * COMPUTATION OF THE VALUE AND THE GRADIENT OF THE OBJECTIVE * FUNCTION TOGETHER WITH THE VALUES AND THE GRADIENTS OF THE * APPROXIMATED FUNCTIONS * IF (KD.GT.LD) THEN CALL PA1MX2(NF,NA,X,F,FA,AF,GA,AG,G,KD,LD,IEXT) END IF * * PREPARATION OF VARIABLE METRIC UPDATE * CALL PYTRFD(NF,NC,X,XO,IAA,AG,AZ,CG,G,GO,N,KD,LD,R,F,FO,P,PO,DMAX, + ITERS) * * VARIABLE METRIC UPDATE * CALL PUDBG1(N,H,G,S,XO,GO,R,PO,NIT,KIT,ITERH,MET,MEC) IF (MER.GT.0 .AND. ITERH.GT.0) IREST = 1 * * END OF THE ITERATION * GO TO 50 90 IF (IPRNT.GT.1 .OR. IPRNT.LT.0) + WRITE (6,'(1X,''EXIT FROM PMIN :'')') IF (IPRNT.NE.0) + WRITE (6,'(1X,''NIT='',I5,2X,''NFV='',I5,2X,''NFG='',I5,2X, + ''F='', G16.9,2X,''G='',E10.3,2X,''ITERM='',I3)') NIT,NFV,NFG, + F,GMAX,ITERM IF (IPRNT.LT.0) + WRITE (6,'(1X,''X='',5(G14.7,1X):/(3X,5(G14.7,1X)))') + (X(I),I=1,NF) RETURN END