************************************************************************ * SUBROUTINE PVMMU ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR UNCONSTRAINED OPTIMIZATION. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * RI X(NF) VECTOR OF VARIABLES. * II IPAR(7) INTEGER PAREMETERS: * IPAR(1) MAXIMUM NUMBER OF ITERATIONS. * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS. * IPAR(3) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PVMM. * IPAR(4) ESTIMATION INDICATOR. IPAR(4)=0-MINIMUM IS NOT * ESTIMATED. IPAR(4)=1-MINIMUM IS ESTIMATED BY THE VALUE * RPAR(6). * IPAR(5) CHOICE OF THE UPDATE. IPAR(5)=1-THE BFGS UPDATE. * IPAR(5)=2-SPECIAL UPDATE. * IPAR(6) CHOICE OF THE SCALING STRATEGY. IPAR(6)=1-SCALING IS * NOT USED. IPAR(6)=2-PRELIMINARY SCALING (ONLY IN THE FIRST * ITERATION). IPAR(6)=3-CONTROLLED SCALING. IPAR(6)=4-INTERVAL * SCALING. IPAR(6)=5-PERMANENT SCALING (IN ALL ITERATIONS). * IPAR(7) CHOICE OF THE CORRECTION. IPAR(7)=1-CORRECTION IS NOT * USED. IPAR(7)=1-NONQUADRATIC CORRECTION IS USED. * RI RPAR(7) REAL PARAMETERS: * RPAR(1) MAXIMUM STEPSIZE. * RPAR(2) TOLERANCE FOR THE CHANGE OF VARIABLES. * RPAR(3) TOLERANCE FOR THE CHANGE OF FUNCTION VALUES. * RPAR(4) TOLERANCE FOR THE FUNCTION FALUE. * RPAR(5) TOLERANCE FOR THE GRADIENT NORM. * RPAR(6) ESTIMATION OF THE MINIMUM FUNCTION VALUE. * RPAR(7) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PVMM. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM ABSOLUTE VALUE OF A PARTIAL DERIVATIVE. * 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=6-IF THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY * ACCEPTABLE. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NRES NUMBER OF RESTARTS. * IO NDEC NUMBER OF MATRIX DECOMPOSITION. * 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 PVMM VARIABLE METRIC METHOD FOR UNCONSTRAINED AND LINEARLY * CONSTRAINED OPTIMIZATION. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE GRADIENT OF THE * OBJECTIVE FUNCTION. CALLING SEQUENCE: CALL FUNDER(NF,X,F,G) * WHERE NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES, F IS THE VALUE OF THE OBJECTIVE FUNCTION AND * G(NF) IS THE GRADIENT OF THE OBJECTIVE FUNCTION. * SUBROUTINE PVMMU(NF,X,IPAR,RPAR,F,GMAX,IPRNT,ITERM) INTEGER NF,IPAR(7),IPRNT,ITERM DOUBLE PRECISION X(*),RPAR(7),F,GMAX INTEGER NB,NC,IA(1),LGF,LHF,LS,LXO,LGO INTEGER NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH COMMON /STAT/ NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH DOUBLE PRECISION RA(:) ALLOCATABLE RA ALLOCATE (RA(NF*(NF+9)/2)) NB=0 NC=0 * * POINTERS FOR AUXILIUARY ARRAYS * LGF=1 LHF=LGF+NF LS=LHF+NF*(NF+1)/2 LXO=LS+NF LGO=LXO+NF CALL PVMM(NF,NB,NC,X,IA,RA,RA,RA,IA,RA,RA,RA,IA,RA,RA,RA,RA(LGF), & RA(LGF),RA(LHF),RA(LS),RA(LS),RA(LXO),RA(LGO),RPAR(1),RPAR(2), & RPAR(3),RPAR(4),RPAR(5),RPAR(6),GMAX,F,IPAR(1),IPAR(2),IPAR(4), & IPAR(5),IPAR(6),IPAR(7),IPRNT,ITERM) DEALLOCATE(RA) RETURN END ************************************************************************ * SUBROUTINE PVMMS ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR BOX CONSTRAINED OPTIMIZATION. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * 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. * II IPAR(7) INTEGER PAREMETERS: * IPAR(1) MAXIMUM NUMBER OF ITERATIONS. * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS. * IPAR(3) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PVMM. * IPAR(4) ESTIMATION INDICATOR. IPAR(4)=0-MINIMUM IS NOT * ESTIMATED. IPAR(4)=1-MINIMUM IS ESTIMATED BY THE VALUE * RPAR(6). * IPAR(5) CHOICE OF THE UPDATE. IPAR(5)=1-THE BFGS UPDATE. * IPAR(5)=2-SPECIAL UPDATE. * IPAR(6) CHOICE OF THE SCALING STRATEGY. IPAR(6)=1-SCALING IS * NOT USED. IPAR(6)=2-PRELIMINARY SCALING (ONLY IN THE FIRST * ITERATION). IPAR(6)=3-CONTROLLED SCALING. IPAR(6)=4-INTERVAL * SCALING. IPAR(6)=5-PERMANENT SCALING (IN ALL ITERATIONS). * IPAR(7) CHOICE OF THE CORRECTION. IPAR(7)=1-CORRECTION IS NOT * USED. IPAR(7)=1-NONQUADRATIC CORRECTION IS USED. * RI RPAR(7) REAL PARAMETERS: * RPAR(1) MAXIMUM STEPSIZE. * RPAR(2) TOLERANCE FOR THE CHANGE OF VARIABLES. * RPAR(3) TOLERANCE FOR THE CHANGE OF FUNCTION VALUES. * RPAR(4) TOLERANCE FOR THE FUNCTION FALUE. * RPAR(5) TOLERANCE FOR THE GRADIENT NORM. * RPAR(6) ESTIMATION OF THE MINIMUM FUNCTION VALUE. * RPAR(7) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PVMM. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM ABSOLUTE VALUE OF A PARTIAL DERIVATIVE. * 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=6-IF THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY * ACCEPTABLE. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NRES NUMBER OF RESTARTS. * IO NDEC NUMBER OF MATRIX DECOMPOSITION. * 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 PVMM VARIABLE METRIC METHOD FOR UNCONSTRAINED AND LINEARLY * CONSTRAINED OPTIMIZATION. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE GRADIENT OF THE * OBJECTIVE FUNCTION. CALLING SEQUENCE: CALL FUNDER(NF,X,F,G) * WHERE NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES, F IS THE VALUE OF THE OBJECTIVE FUNCTION AND * G(NF) IS THE GRADIENT OF THE OBJECTIVE FUNCTION. * SUBROUTINE PVMMS(NF,NB,X,IX,XL,XU,IPAR,RPAR,F,GMAX,IPRNT,ITERM) INTEGER NF,NB,IX(*),IPAR(7),IPRNT,ITERM DOUBLE PRECISION X(*),XL(*),XU(*),RPAR(7),F,GMAX INTEGER NC,LGF,LGN,LHF,LS,LXO,LGO INTEGER NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH COMMON /STAT/ NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH DOUBLE PRECISION RA(:) ALLOCATABLE RA ALLOCATE (RA(NF*(NF+11)/2)) NC=0 * * POINTERS FOR AUXILIUARY ARRAYS * LGF=1 LGN=LGF+NF LHF=LGN+NF LS=LHF+NF*(NF+1)/2 LXO=LS+NF LGO=LXO+NF CALL PVMM(NF,NB,NC,X,IX,XL,XU,RA,IX,RA,RA,RA,IX,RA,RA,RA,RA(LGF), & RA(LGN),RA(LHF),RA(LS),RA(LS),RA(LXO),RA(LGO),RPAR(1),RPAR(2), & RPAR(3),RPAR(4),RPAR(5),RPAR(6),GMAX,F,IPAR(1),IPAR(2),IPAR(4), & IPAR(5),IPAR(6),IPAR(7),IPRNT,ITERM) DEALLOCATE(RA) RETURN END ************************************************************************ * SUBROUTINE PVMML ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR LINEARLY CONSTRAINED OPTIMIZATION. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * 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. * II IPAR(7) INTEGER PAREMETERS: * IPAR(1) MAXIMUM NUMBER OF ITERATIONS. * IPAR(2) MAXIMUM NUMBER OF FUNCTION EVALUATIONS. * IPAR(3) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PVMM. * IPAR(4) ESTIMATION INDICATOR. IPAR(4)=0-MINIMUM IS NOT * ESTIMATED. IPAR(4)=1-MINIMUM IS ESTIMATED BY THE VALUE * RPAR(6). * IPAR(5) CHOICE OF THE UPDATE. IPAR(5)=1-THE BFGS UPDATE. * IPAR(5)=2-SPECIAL UPDATE. * IPAR(6) CHOICE OF THE SCALING STRATEGY. IPAR(6)=1-SCALING IS * NOT USED. IPAR(6)=2-PRELIMINARY SCALING (ONLY IN THE FIRST * ITERATION). IPAR(6)=3-CONTROLLED SCALING. IPAR(6)=4-INTERVAL * SCALING. IPAR(6)=5-PERMANENT SCALING (IN ALL ITERATIONS). * IPAR(7) CHOICE OF THE CORRECTION. IPAR(7)=1-CORRECTION IS NOT * USED. IPAR(7)=1-NONQUADRATIC CORRECTION IS USED. * RI RPAR(7) REAL PARAMETERS: * RPAR(1) MAXIMUM STEPSIZE. * RPAR(2) TOLERANCE FOR THE CHANGE OF VARIABLES. * RPAR(3) TOLERANCE FOR THE CHANGE OF FUNCTION VALUES. * RPAR(4) TOLERANCE FOR THE FUNCTION FALUE. * RPAR(5) TOLERANCE FOR THE GRADIENT NORM. * RPAR(6) ESTIMATION OF THE MINIMUM FUNCTION VALUE. * RPAR(7) THIS PARAMETER IS NOT USED IN THE SUBROUTINE PVMM. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM ABSOLUTE VALUE OF A PARTIAL DERIVATIVE. * 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=6-IF THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY * ACCEPTABLE. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NRES NUMBER OF RESTARTS. * IO NDEC NUMBER OF MATRIX DECOMPOSITION. * 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 PVMM VARIABLE METRIC METHOD FOR UNCONSTRAINED AND LINEARLY * CONSTRAINED OPTIMIZATION. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE GRADIENT OF THE * OBJECTIVE FUNCTION. CALLING SEQUENCE: CALL FUNDER(NF,X,F,G) * WHERE NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES, F IS THE VALUE OF THE OBJECTIVE FUNCTION AND * G(NF) IS THE GRADIENT OF THE OBJECTIVE FUNCTION. * SUBROUTINE PVMML(NF,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG, & IPAR,RPAR,F,GMAX,IPRNT,ITERM) INTEGER NF,NB,NC,IX(*),IC(*),IPAR(7),IPRNT,ITERM DOUBLE PRECISION X(*),XL(*),XU(*),CF(*),CL(*),CU(*),CG(*), & RPAR(7),F,GMAX INTEGER LCFD,LCR,LCZ,LGF,LGN,LHF,LS,LSN,LXO,LGO INTEGER NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH COMMON /STAT/ NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA ALLOCATE (IA(NF),RA(NF*(2*NF+7)+NC+1)) * * POINTERS FOR AUXILIUARY ARRAYS * LCFD=1 LCR=LCFD+NC+1 LCZ=LCR+NF*(NF+1)/2 LGF=LCZ+NF*NF LGN=LGF+NF LHF=LGN+NF LS=LHF+NF*(NF+1)/2 LSN=LS+NF LXO=LSN+NF LGO=LXO+NF CALL PVMM(NF,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,IA,RA(LCFD),RA(LCR), & RA(LCZ),RA(LGF),RA(LGN),RA(LHF),RA(LS),RA(LSN),RA(LXO),RA(LGO), & RPAR(1),RPAR(2),RPAR(3),RPAR(4),RPAR(5),RPAR(6),GMAX,F,IPAR(1), & IPAR(2),IPAR(4),IPAR(5),IPAR(6),IPAR(7),IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PVMM ALL SYSTEMS 99/01/22 * PURPOSE : * GENERAL VARIABLE METRIC SUBROUTINE FOR UNCONSTRAINED AND LINEARLY * CONSTRAINED OPTIMIZATION. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NB NUMBER OF BOX CONSTRAINTS. * II NC NUMBER OF GENERAL 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 ICA(NC) VECTOR CONTAINING INDICES OF ACTIVE CONSTRAINTS. * RA CFD(NC) VECTOR CONTAINING INCREMENTS OF THE CONSTRAINT * FUNCTIONS. * RA CR(NF*(NF+1)/2) * RA CZ(NF*NC) * RA GF(NF) GRADIENT OF THE OBJECTIVE FUNCTION. * RA GN(NF) REDUCED GRADIENT OF THE OBJECTIVE FUNCTION. * RA HF(NF*(NF+1)/2) VARIABLE METRIC APPROXIMATION OF THE HESSIAN * MATRIX. * RA S(NF) DIRECTION VECTOR. * RA SN(NF) REDUCED DIRECTION VECTOR. * RA XO(NF) DIFFERENCE OF VECTORS OF VARIABLES. * RA GO(NF) DIFFERENCE OF GRADIENTS. * RI XMAX MAXIMUM STEPSIZE. * RI TOLX TOLERANCE FOR THE CHANGE OF VARIABLES. * RI TOLF TOLERANCE FOR THE CHANGE OF FUNCTION VALUES. * RI TOLB TOLERANCE FOR THE FUNCTION VALUE. * RI TOLG TOLERANCE FOR THE GRADIENT OF THE LAGRANGIAN FUNCTION. * RI FMIN ESTIMATION OF THE MINIMUM FUNCTION VALUE. * RO GMAX VALUE OF THE TERMINATION CRITERION. * RO F VALUE OF THE OBJECTIVE FUNCTION. * II MIT MAXIMUN NUMBER OF ITERATIONS. * II MFV MAXIMUN NUMBER OF FUNCTION EVALUATIONS. * II IEST ESTIMATION INDICATOR. IEST=0-MINIMUM IS NOT ESTIMATED. * IEST=1-MINIMUM IS ESTIMATED BY THE VALUE RPAR(9). * II MET CHOICE OF THE UPDATE. MET=1-THE BFGS UPDATE. * MET=2-SPECIAL UPDATE. * II MET1 CHOICE OF THE SCALING STRATEGY. MET1=1-SCALING IS * NOT USED. MET1=2-PRELIMINARY SCALING (ONLY IN THE FIRST * ITERATION). MET1=3-CONTROLLED SCALING. MET1=4-INTERVAL * SCALING. MET1=5-PERMANENT SCALING (IN ALL ITERATIONS). * MET2 CHOICE OF THE CORRECTION. MET2=1-CORRECTION IS NOT * USED. MET2=1-NONQUADRATIC CORRECTION IS USED. * 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=6-IF THE TERMINATION CRITERION HAS NOT BEEN * SATISFIED, BUT THE POINT OBTAINED IF USUALLY * ACCEPTABLE. * ITERM=11-IF NIT EXCEEDED MIT. ITERM=12-IF NFV EXCEEDED MFV. * ITERM=13-IF NFG EXCEEDED MFG. ITERM<0-IF THE METHOD FAILED. * * VARIABLES IN COMMON /STAT/ (STATISTICS) : * IO NRES NUMBER OF RESTARTS. * IO NDEC NUMBER OF MATRIX DECOMPOSITION. * 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 PLLPB1 DETERMINATION OF THE INITIAL FEASIBLE POINT. * S PLNEWS IDENTIFICATION OF ACTIVE SIMPLE BOUNDS. * S PUDBI1 VARIABLE METRIC UPDATE. * S PS1L01 STEPSIZE SELECTION USING LINE SEARCH. * S PYADB4 ADDITION OF A GENERAL LINEAR CONSTRAINT. * S PYFUT1 TEST ON TERMINATION. * S PYRMB1 DELETION OF A GENERAL LINEAR CONSTRAINT. * S PYTRBD COMPUTATION OF REDUCED DIFFERENCES FOR THE VARIABLE * METRIC UPDATE. * S PYTRBG COMPUTATION OF THE REDUCED GRADIENT. * S PYTRBS COMPUTATION OF THE REDUCED DIRECTION VECTOR. * S MXDSMI DENSE SYMMETRIC MATRIX A IS SET TO THE UNIT MATRIX. * S MXDSMM MATRIX VECTOR PRODUCT. * S MXVCOP COPYING OF A VECTOR. * S MXVDIR VECTOR AUGMENTED BY THE SCALED VECTOR. * RF MXVDOT DOT PRODUCT OF TWO VECTORS. * S MXVINA ABSOLUTE VALUES OF ELEMENTS OF AN INTEGER VECTOR. * S MXVNEG COPYING OF A VECTOR WITH CHANGE OF THE SIGN. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE GRADIENT OF THE * OBJECTIVE FUNCTION. CALLING SEQUENCE: CALL FUNDER(NF,X,F,G) * WHERE NF IS A NUMBER OF VARIABLES, X(NF) IS A VECTOR OF * VARIABLES, F IS THE VALUE OF THE OBJECTIVE FUNCTION AND * G(NF) IS THE GRADIENT OF THE OBJECTIVE FUNCTION. * * METHOD : * VARIABLE METRIC METHODS FOR DENSE UNCONSTRAINED AND LINEARLY * CONSTRAINED PROBLEMS. * SUBROUTINE PVMM(NF,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,ICA,CFD,CR,CZ, & GF,GN,HF,S,SN,XO,GO,XMAX,TOLX,TOLF,TOLB,TOLG,FMIN,GMAX,F,MIT, & MFV,IEST,MET,MET1,MET2,IPRNT,ITERM) INTEGER NF,NB,NC,IX(*),IC(*),ICA(*),MIT,MFV,IEST,MET,MET1, & MET2,MES,IPRNT,ITERM DOUBLE PRECISION X(*),XL(*),XU(*),CF(*),CL(*),CU(*),CFD(*),CG(*), & CR(*),CZ(*),GF(*),GN(*),HF(*),S(*),SN(*),XO(*),GO(*),XMAX,TOLX, & TOLF,TOLB,TOLG,TOLD,TOLS,TOLP,FMIN,GMAX,F DOUBLE PRECISION ETA9,EPS7,EPS8,EPS9,FMAX,FO,FP, & R,RO,RP,P,PO,PP,GNORM,SNORM,RMIN,RMAX,UMAX,DMAX,PAR1,PAR2,ALF1, & ALF2,ETA0 DOUBLE PRECISION MXVDOT INTEGER N,INEW,IOLD,KOLD,KREM,IER,INITS,ITERH,KD,LD,I,K INTEGER NTESX,NTESF,ITERS,IREST,IDECF,KIT,INF,MES1,MES2,MES3, & KC,KBC,KBF,ITERL,MAXST,NRED,MFG,IRES1,IRES2,MRED,MTESX,MTESF, & ITES,ITERD,KTERS,ISYS INTEGER NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH COMMON /STAT/ NRES,NDEC,NREM,NADD,NIT,NFV,NFG,NFH IF (ABS(IPRNT).GT.1) WRITE(6,'(1X,''ENTRY TO PVMM :'')') * * INITIATION * KBF = 0 KBC = 0 IF (NB.GT.0) KBF = 2 IF (NC.GT.0) KBC = 2 NRES=0 NDEC=0 NREM=0 NADD=0 NIT=0 NFV=0 NFG=0 NFH=0 ISYS=0 ITES=1 KREM=0 NREM=0 NADD=0 MTESX=2 MTESF=2 INITS=2 ITERM=0 ITERD=0 ITERS=2 ITERL=0 KTERS=3 IREST=1 IRES1=999 IRES2=0 MRED=10 MES1=2 MES2=2 MES3=2 ETA0=1.0D-15 ETA9=1.0D 60 EPS7=1.0D-8 EPS8=0.5D 0 EPS9=1.0D-8 ALF1=1.0D-10 ALF2=1.0D 10 RMAX=ETA9 DMAX=ETA9 FMAX=1.0D 20 IF (TOLX.LE.0.0D 0) TOLX=1.0D-16 IF (TOLF.LE.0.0D 0) TOLF=1.0D-16 IF (TOLB.EQ.0.0D 0) TOLB=FMIN+1.0D-16 IF (TOLG.LE.0.0D 0) TOLG=1.0D-6 TOLD=1.0D-6 TOLS=1.0D-4 TOLP=0.9D 0 IF (XMAX.LE.0.0D 0) XMAX=1.0D 16 IF (IEST.LE.0) FMIN=-1.0D 60 IF (IEST.GT.0) IEST=1 IF (MET.LE.0) MET=1 IF (MET1.LE.0) MET1=3 IF (MET2.LE.0) MET2=2 MES=4 IF (MIT.LE.0) MIT=5000 IF (MFV.LE.0) MFV=5000 MFG=MFV KD= 1 LD=-1 KIT=-1000000 FO=FMIN N=NF * * INITIAL OPERATIONS WITH SIMPLE BOUNDS * IF (KBF.GT.0) THEN DO 10 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)) 10 CONTINUE END IF * * INITIAL OPERATIONS WITH GENERAL LINEAR CONSTRAINTS * IF (KBC.GT.0) THEN K = 0 DO 20 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 20 CONTINUE END IF * * DETERMINATION OF AN INITIAL FEASIBLE POINT * IF (KBC.GT.0) THEN CALL MXVSET(NF,0.0D 0,GF) CALL PLLPB1(NF,NC,X,IX,S,XL,XU,CF,CFD,IC,ICA,CL,CU,CG, & CR,CZ,GF,GO,S,1,KBF,KBC,ETA9,EPS7,EPS9,UMAX,GMAX,N,ITERL) ELSE IF (KBF.GT.0) THEN DO 1 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).AND.X(I).LE.XL(I)) THEN X(I)=XL(I) ELSE IF ((IX(I).EQ.2.OR.IX(I).EQ.3).AND.X(I).GE.XU(I)) THEN X(I)=XU(I) ENDIF CALL PLNEWS(X,IX,XL,XU,EPS9,I,INEW) IF (IX(I).GT.10) IX(I)=10-IX(I) 1 CONTINUE ENDIF IF (ITERL.LT.0) ITERM=ITERL-10 IF (ITERM.NE.0) GO TO 11190 11110 CONTINUE * * MODEL DESCRIPTION * 11800 CALL FUNDER(NF,X,F,GF) NFV=NFV+1 NFG=NFG+1 11130 CONTINUE CALL PYTRBG(NF,N,IX,IC,ICA,CG,CR,CZ,GF,GN,UMAX,GMAX,KBF,KBC, & IOLD,KOLD) 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 CALL PYFUT1(N,F,FO,UMAX,GMAX,DMAX,TOLX,TOLF,TOLB,TOLG,KD, & NIT,KIT,MIT,NFV,MFV,NFG,MFG,NTESX,MTESX,NTESF,MTESF,ITES,IRES1, & IRES2,IREST,ITERS,ITERM) IF(ITERM.NE.0) GO TO 11190 CALL PYRMB1(NF,N,IX,IC,ICA,CG,CR,CZ,GF,GN,HF,EPS8,UMAX,GMAX, & KBF,KBC,IOLD,KOLD,KREM,IER,ITERM) 11140 CONTINUE IF(IREST.GT.0) THEN CALL MXDSMI(N,HF) 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 IF (GMAX.LE.1.0D 2*TOLG) ITERM=-ITERM ENDIF ENDIF IF(ITERM.NE.0) GO TO 11190 * * DIRECTION DETERMINATION * IF (IDECF.LT.0) THEN IDECF=9 INF=0 ENDIF IF (IDECF.NE.9) THEN ITERD=-1 GO TO 12730 ENDIF GNORM=SQRT(MXVDOT(N,GN,GN)) * * NEWTON LIKE STEP * CALL MXDSMM(N,HF,GN,SN) CALL MXVNEG(N,SN,SN) ITERD=1 IF(INF.EQ.0) THEN ELSEIF(INF.LT.0) THEN ELSE ENDIF SNORM=SQRT(MXVDOT(N,SN,SN)) NRED=INF 12730 CONTINUE IF (KD.GT.0) P=MXVDOT(N,GN,SN) IF (ITERD.LT.0) THEN ITERM=ITERD ELSE * * TEST ON DESCENT DIRECTION * IF(SNORM.LE.0.0D 0) THEN IREST=MAX(IREST,1) ELSEIF(P+TOLD*GNORM*SNORM.LE.0.0D 0) THEN IREST=0 ELSE * * UNIFORM DESCENT CRITERION * IREST=MAX(IREST,1) ENDIF IF (IREST.EQ.0) THEN * * PREPARATION OF LINE SEARCH * NRED = 0 RMIN=ALF1*GNORM/SNORM RMAX=MIN(ALF2*GNORM/SNORM,XMAX/SNORM) ENDIF ENDIF IF(ITERM.NE.0) GO TO 11190 IF(IREST.NE.0) GO TO 11140 CALL PYTRBS(NF,N,NC,X,IX,XO,XL,XU,GF,GO,CF,CFD,IC,CL,CU,CG,CZ,SN, & S,RO,FP,FO,F,PO,P,RMAX,KBF,KBC,KREM,INEW) * * LINE SEARCH * 11170 CONTINUE CALL PS1L01(R,RP,F,FO,FP,P,PO,PP,FMIN,FMAX,RMIN,RMAX,TOLS, & TOLP,PAR1,PAR2,KD,LD,NIT,KIT,NRED,MRED,MAXST,IEST,INITS,ITERS, & KTERS,MES,ISYS) IF (ISYS.EQ.0) GO TO 11174 C GO TO (11174,11172) ISYS+1 11172 CONTINUE CALL MXVDIR(NF,R,S,XO,X) CALL FUNDER(NF,X,F,GF) NFV=NFV+1 NFG=NFG+1 P=MXVDOT(NF,GF,S) GO TO 11170 11174 CONTINUE IF (ITERS.LE.0) THEN R=0.0D 0 F=FO P=PO CALL MXVCOP(NF,XO,X) CALL MXVCOP(NF,GO,GF) IREST=MAX(IREST,1) LD=KD GO TO 11140 ENDIF 11180 CONTINUE CALL PYTRBD(NF,N,X,IX,XO,GF,GO,CZ,SN,R,F,FO,P,PO,DMAX,ITERS,KBF & ,KBC) * * VARIABLE METRIC UPDATE * CALL PUDBI1(N,HF,S,XO,GO,R,PO,PAR1,PAR2,F,FO,P,NIT,KIT, & MET,MET1,MET2,IDECF,ITERD,ITERH) CALL PYADB4(NF,N,NC,X,IX,XL,XU,CF,CFD,IC,ICA,CL,CU,CG,CR,CZ,HF, & S,R,1.0D-8,1.0D-8,GMAX,UMAX,KBF,KBC,INEW,IER,ITERM) IF(ITERH.NE.0) IREST=MAX(IREST,1) GO TO 11130 11190 CONTINUE IF (KBF.GT.0) CALL MXVINA(NF,IX) IF (KBC.GT.0) CALL MXVINA(NC,IC) 11200 CONTINUE IF (IPRNT.GT.1.OR.IPRNT.LT.0) & WRITE(6,'(1X,''EXIT FROM PRED :'')') 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