************************************************************************ * SUBROUTINE PNEWU ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR UNCONSTRAINED NONSMOOTH OPTIMIZATION. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA MAXIMUM BUNDLE DIMENSION. * RI X(NF) VECTOR OF VARIABLES. * II IPAR(5) 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 PNEW. * IPAR(4) MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF VARIABLES * SMALLER THAN RPAR(2). * IPAR(5) MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF FUNCTION * VALUES SMALLER THAN RPAR(3). * 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) DISTANCE MEASURE PARAMETER. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM ABSOLUTE VALUE OF AN ELEMENT OF THE LAGARANGIAN * FUNCTION. * II IHES A WAY FOR COMPUTING SECOND DERIVATIVES. IHES=0-NUMERICAL * COMPUTATION. IHES>0-ANALYTICAL COMPUTATION. * 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 SUBGRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PNEW BUNDLE NEWTON METHOD WITH LINE SEARCH WHICH USES A SPECIAL * QUADRATIC PROGRAMMING SUBALGORITHM. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE SUBGRADIENT 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 SUBGRADIENT OF THE OBJECTIVE FUNCTION. * SE HES COMPUTATION OF THE HESSIAN MATRIX OF THE OBJECTIVE * FUNCTION. CALLING SEQUENCE: CALL HES(NF,X,H) WHERE * NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES AND H(NF*(NF+1)/2) IS THE UPPER RIGHT CORNER * OF THE SYMMETRIC HESSIAN MATRIX STORED BY COLUMNS. THIS * SUBTOUTINE IS USED ONLY IF IHES>0, BUT IT MUST BE * INCLUDED AS AN EMPTY SUBROUTINE IF IHES=0. * SUBROUTINE PNEWU(NF,NA,X,IPAR,RPAR,F,GMAX,IHES,IPRNT,ITERM) DOUBLE PRECISION F,GMAX INTEGER IHES,ITERM,NA,NF DOUBLE PRECISION RPAR(6),X(*) INTEGER IPAR(5) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES INTEGER LAF,LAFD,LAG,LAH,LAR,LAZ,LG,LGO,LH,LHF,LIA,LIAA,LS,LSO, + LXO,NB,NC,IPRNT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA IF (NA.LE.0) NA = NF + 3 ALLOCATE (IA(NA+NF+1),RA((NA+3)*NF*(NF+1)/2+NA*(NF+6)+7*NF+4)) NB = 0 NC = 0 * * POINTERS FOR AUXILIUARY ARRAYS * LAF = 1 LAFD = LAF + 5*NA LAG = LAFD + NA LAR = LAG + NF*NA LAZ = LAR + (NF+1)* (NF+2)/2 LG = LAZ + NF + 1 LH = LG + NF LHF = LH + NF* (NF+1)/2 LAH = LHF + NF* (NF+1)/2 LS = LAH + NA*NF* (NF+1)/2 LSO = LS + NF + 1 LXO = LSO + NF LGO = LXO + NF LIA = 1 LIAA = LIA + NA CALL PNEW(NF,NA,NB,NC,X,IA,RA,RA,RA,IA,RA,RA,RA,RA,RA(LAF),IA, + RA(LAFD),RA(LAG),IA(LIAA),RA(LAR),RA(LAZ),RA(LG),RA(LH), + RA(LHF),RA(LAH),RA(LS),RA(LSO),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),IHES,IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PNEWS ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR NONSMOOTH OPTIMIZATION WITH SIMPLE * BOUNDS. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA MAXIMUM BUNDLE DIMENSION. * II NB NUMBER OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED. * NB=NF-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(5) 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 PNEW. * IPAR(4) MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF VARIABLES * SMALLER THAN RPAR(2). * IPAR(5) MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF FUNCTION * VALUES SMALLER THAN RPAR(3). * 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) DISTANCE MEASURE PARAMETER. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM ABSOLUTE VALUE OF AN ELEMENT OF THE LAGARANGIAN * FUNCTION. * II IHES A WAY FOR COMPUTING SECOND DERIVATIVES. IHES=0-NUMERICAL * COMPUTATION. IHES>0-ANALYTICAL COMPUTATION. * 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 SUBGRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PNEW BUNDLE NEWTON METHOD WITH LINE SEARCH WHICH USES A SPECIAL * QUADRATIC PROGRAMMING SUBALGORITHM. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE SUBGRADIENT 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 SUBGRADIENT OF THE OBJECTIVE FUNCTION. * SE HES COMPUTATION OF THE HESSIAN MATRIX OF THE OBJECTIVE * FUNCTION. CALLING SEQUENCE: CALL HES(NF,X,H) WHERE * NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES AND H(NF*(NF+1)/2) IS THE UPPER RIGHT CORNER * OF THE SYMMETRIC HESSIAN MATRIX STORED BY COLUMNS. THIS * SUBTOUTINE IS USED ONLY IF IHES>0, BUT IT MUST BE * INCLUDED AS AN EMPTY SUBROUTINE IF IHES=0. * SUBROUTINE PNEWS(NF,NA,NB,X,IX,XL,XU,IPAR,RPAR,F,GMAX,IHES,IPRNT, + ITERM) DOUBLE PRECISION F,GMAX INTEGER IHES,ITERM,NA,NB,NF DOUBLE PRECISION RPAR(6),X(*),XL(*),XU(*) INTEGER IPAR(5),IX(*) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES INTEGER LAF,LAFD,LAG,LAH,LAR,LAZ,LG,LGO,LH,LHF,LIA,LIAA,LS,LSO, + LXO,NC,IPRNT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA IF (NA.LE.0) NA = NF + 3 ALLOCATE (IA(NA+NF+1),RA((NA+3)*NF*(NF+1)/2+NA*(NF+6)+7*NF+4)) NC = 0 * * POINTERS FOR AUXILIUARY ARRAYS * LAF = 1 LAFD = LAF + 5*NA LAG = LAFD + NA LAR = LAG + NF*NA LAZ = LAR + (NF+1)* (NF+2)/2 LG = LAZ + NF + 1 LH = LG + NF LHF = LH + NF* (NF+1)/2 LAH = LHF + NF* (NF+1)/2 LS = LAH + NA*NF* (NF+1)/2 LSO = LS + NF + 1 LXO = LSO + NF LGO = LXO + NF LIA = 1 LIAA = LIA + NA CALL PNEW(NF,NA,NB,NC,X,IX,XL,XU,RA,IA,RA,RA,RA,RA,RA(LAF),IA, + RA(LAFD),RA(LAG),IA(LIAA),RA(LAR),RA(LAZ),RA(LG),RA(LH), + RA(LHF),RA(LAH),RA(LS),RA(LSO),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),IHES,IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PNEWL ALL SYSTEMS 97/01/22 * PURPOSE : * EASY TO USE SUBROUTINE FOR NONSMOOTH OPTIMIZATION WITH SIMPLE * BOUNDS AND GENERAL LINEAR CONSTRAINTS. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA MAXIMUM BUNDLE DIMENSION. * II NB NUMBER OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED. * NB=NF-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(5) 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 PNEW. * IPAR(4) MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF VARIABLES * SMALLER THAN RPAR(2). * IPAR(5) MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF FUNCTION * VALUES SMALLER THAN RPAR(3). * 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) DISTANCE MEASURE PARAMETER. * RO F VALUE OF THE OBJECTIVE FUNCTION. * RO GMAX MAXIMUM ABSOLUTE VALUE OF AN ELEMENT OF THE LAGARANGIAN * FUNCTION. * II IHES A WAY FOR COMPUTING SECOND DERIVATIVES. IHES=0-NUMERICAL * COMPUTATION. IHES>0-ANALYTICAL COMPUTATION. * 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 SUBGRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PNEW BUNDLE NEWTON METHOD WITH LINE SEARCH WHICH USES A SPECIAL * QUADRATIC PROGRAMMING SUBALGORITHM. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE SUBGRADIENT 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 SUBGRADIENT OF THE OBJECTIVE FUNCTION. * SE HES COMPUTATION OF THE HESSIAN MATRIX OF THE OBJECTIVE * FUNCTION. CALLING SEQUENCE: CALL HES(NF,X,H) WHERE * NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES AND H(NF*(NF+1)/2) IS THE UPPER RIGHT CORNER * OF THE SYMMETRIC HESSIAN MATRIX STORED BY COLUMNS. THIS * SUBTOUTINE IS USED ONLY IF IHES>0, BUT IT MUST BE * INCLUDED AS AN EMPTY SUBROUTINE IF IHES=0. * SUBROUTINE PNEWL(NF,NA,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,IPAR, + RPAR,F,GMAX,IHES,IPRNT,ITERM) DOUBLE PRECISION F,GMAX INTEGER IHES,ITERM,NA,NB,NC,NF DOUBLE PRECISION 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 LAF,LAFD,LAG,LAH,LAR,LAZ,LCFD,LG,LGO,LH,LHF,LIA,LIAA,LS, + LSO,LXO,IPRNT COMMON /STAT/NDECF,NRES,NRED,NREM,NADD,NIT,NFV,NFG,NFH INTEGER IA(:) DOUBLE PRECISION RA(:) ALLOCATABLE IA,RA IF (NA.LE.0) NA = NF + 3 ALLOCATE (IA(NA+NF+1),RA((NA+3)*NF*(NF+1)/2+NA*(NF+6)+7*NF+NC+4)) * * POINTERS FOR AUXILIUARY ARRAYS * LCFD = 1 LAF = LCFD + NC LAFD = LAF + 5*NA LAG = LAFD + NA LAR = LAG + NF*NA LAZ = LAR + (NF+1)* (NF+2)/2 LG = LAZ + NF + 1 LH = LG + NF LHF = LH + NF* (NF+1)/2 LAH = LHF + NF* (NF+1)/2 LS = LAH + NA*NF* (NF+1)/2 LSO = LS + NF + 1 LXO = LSO + NF LGO = LXO + NF LIA = 1 LIAA = LIA + NA CALL PNEW(NF,NA,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,RA,RA(LAF),IA, + RA(LAFD),RA(LAG),IA(LIAA),RA(LAR),RA(LAZ),RA(LG),RA(LH), + RA(LHF),RA(LAH),RA(LS),RA(LSO),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),IHES,IPRNT,ITERM) DEALLOCATE(IA,RA) RETURN END ************************************************************************ * SUBROUTINE PNEW ALL SYSTEMS 97/01/22 * PURPOSE : * GENERAL SUBROUTINE FOR NONSMOOTH OPTIMIZATION WITH SIMPLE BOUNDS * AND GENERAL LINEAR CONSTRAINTS. * * PARAMETERS : * II NF NUMBER OF VARIABLES. * II NA MAXIMUM BUNDLE DIMENSION. * II NB NUMBER OF SIMPLE BOUNDS. NB=0-SIMPLE BOUNDS SUPPRESSED. * NB>0-SIMPLE BOUNDS ACCEPTED. * II NC NUMBER OF LINEAR CONSTRAINTS. * RU X(NF) VECTOR OF VARIABLES. * II IX(NF) VECTOR CONTAINING TYPES OF BOUNDS. IX(I)=0-VARIABLE * X(I) IS UNBOUNDED. IX(I)=1-LOWER 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-LOWER * 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 AF(5*NA) VECTOR OF BUNDLE VALUES. * IA IA(NA) VECTOR CONTAINING TYPES OF DEVIATIONS. * RA AFD(NA) VECTOR CONTAINING INCREMENTS OF BUNDLE FUNCTIONS. * RA AG(NF*NA) MATRIX WHOSE COLUMNS ARE BUNDLE SUBGRADIENTS. * IA IAA(NF+1) VECTOR CONTAINING INDICES OF ACTIVE FUNCTIONS. * RA AR((NF+1)*(NF+2)/2) TRIANGULAR DECOMPOSITION OF KERNEL OF THE * ORTHOGONAL PROJECTION. * RA AZ(NF+1) VECTOR OF LAGRANGE MULTIPLIERS. * RA G(NF) SUBGRADIENT OF THE OBJECTIVE FUNCTION. * RA H(NF*(NF+1)/2) AGGREGATE HESSIAN MATRIX. * RA HF(NF*(NF+1)/2) HESSIAN MATRIX OF THE OBJECTIVE FUNCTION. * RA AH(NA*NF*(NF+1)/2) BUNDLE OF HESSIAN MATRICES. * RA S(NF+1) DIRECTION VECTOR. * RA SO(NF) AUXILIARY VECTOR. * RA XO(NF) INCREMENT VECTOR. * RA GO(NF+1) GRADIENT OF THE LAGRANGIAN FUNCTION. * 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 TERMINATION CRITERION. * RI ETA DISTANCE MEASURE PARAMETER. * RO GMAX MAXIMUM ABSOLUTE VALUE OF A PARTIAL DERIVATIVE. * RO FP VALUE OF THE OBJECTIVE FUNCTION. * II MIT MAXIMUN NUMBER OF ITERATIONS. * II MFV MAXIMUN NUMBER OF FUNCTION EVALUATIONS. * II MTESX MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF VARIABLES * SMALLER THAN TOLX. * II MTESF MAXIMUM NUMBER OF ITERATIONS WITH CHANGES OF FUNCTION * VALUES SMALLER THAN TOLF. * II IHES A WAY FOR COMPUTING SECOND DERIVATIVES. IHES=0-NUMERICAL * COMPUTATION. IHES>0-ANALYTICAL COMPUTATION. * 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 SUBGRADIENT EVALUATIONS. * IO NFH NUMBER OF HESSIAN EVALUATIONS. * * SUBPROGRAMS USED : * S PDDBQ2 DETERMINATION OF THE DESCENT DIRECTION. * S PS1L05 LINE SEARCH USING FUNCTION VALUES AND DERIVATIVES. * S MXVCOP COPYING OF A VECTOR. * S MXVDIF DIFFERENCE OF TWO VECTORS. * S MXVDIR VECTOR AUGMENTED BY THE SCALED VECTOR. * RF MXVDOT DOT PRODUCT OF TWO VECTORS. * * EXTERNAL SUBROUTINES : * SE FUNDER COMPUTATION OF THE VALUE AND THE SUBGRADIENT 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 SUBGRADIENT OF THE OBJECTIVE FUNCTION. * SE HES COMPUTATION OF THE HESSIAN MATRIX OF THE OBJECTIVE * FUNCTION. CALLING SEQUENCE: CALL HES(NF,X,H) WHERE * NF IS A NUMBER OF VARIALES, X(NF) IS A VECTOR OF * VARIABLES AND H(NF*(NF+1)/2) IS THE UPPER RIGHT CORNER * OF THE SYMMETRIC HESSIAN MATRIX STORED BY COLUMNS. THIS * SUBTOUTINE IS USED ONLY IF IHES>0, BUT IT MUST BE * INCLUDED AS AN EMPTY SUBROUTINE IF IHES=0. * * METHOD : * BUNDLE NEWTON METHOD WITH LINE SEARCH WHICH USES A SPECIAL * QUADRATIC PROGRAMMING SUBALGORITHM. * SUBROUTINE PNEW(NF,NA,NB,NC,X,IX,XL,XU,CF,IC,CL,CU,CG,CFD,AF,IA, + AFD,AG,IAA,AR,AZ,G,H,HF,AH,S,SO,XO,GO,XMAX,TOLX, + TOLF,TOLB,TOLG,ETA,GMAX,FP,MIT,MFV,MTESX,MTESF, + IHES,IPRNT,ITERM) DOUBLE PRECISION ETA,FP,GMAX,TOLB,TOLD,TOLF,TOLG,TOLP,TOLS,TOLX, + XMAX INTEGER IHES,IPRNT,ITERM,MES,MFV,MIT,MOS,MTESF,MTESX,NA,NB,NC,NF DOUBLE PRECISION AF(*),AFD(*),AG(*),AH(*),AR(*),AZ(*),CF(*), + CFD(*),CG(*),CL(*),CU(*),G(*),GO(*),H(*),HF(*), + S(*),SO(*),X(*),XL(*),XO(*),XU(*) INTEGER IA(*),IAA(*),IC(*),IX(*) INTEGER NADD,NDECF,NFG,NFH,NFV,NIT,NRED,NREM,NRES DOUBLE PRECISION ALF2,DMAX,EPS7,EPS9,ETA0,ETA1,ETA2,ETA9,F,FMAX, + FMIN,FO,FUB,GNORM,P,PO,PP,R,RMAX,RMIN,RP,SNORM, + TEMP,TO,UMAX,XNORM INTEGER I,IDECF,IREST,ITERD,ITERL,ITERQ,ITERS,K,KBC,KBF,KC,KIT, + MAL,MES2,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 PNEW :'')') * * INITIATION * KBF = 0 KBC = 0 IF (NB.GT.0) KBF = 2 IF (NC.GT.0) KBC = 2 NIT = 0 NFV = 0 NFG = 0 NFH = 0 NADD = 0 NREM = 0 NTESX = 0 NTESF = 0 ITERM = 0 ITERS = 0 ITERD = 0 ITERQ = 0 IREST = 0 ITERS = 2 NDECF = 0 IDECF = 0 ETA0 = 1.0D-15 ETA1 = 1.0D-15 ETA2 = 1.0D-4 ETA9 = 1.0D60 EPS7 = 1.0D-12 EPS9 = 1.0D-10 ALF2 = 1.0D10 FMAX = 1.0D60 FMIN = -FMAX IF (TOLX.LE.0.0D0) TOLX = 1.0D-8 IF (TOLF.LE.0.0D0) TOLF = 1.0D-8 IF (TOLB.EQ.0.0D0) TOLB = FMIN + 1.0D-16 IF (TOLG.LE.0.0D0) TOLG = 1.0D-6 IF (ETA. LE.0.0D0) ETA = 0.0D 0 TOLD = 1.0D-4 TOLS = 1.0D-2 TOLP = 5.0D-1 IF (XMAX.LE.0.0D0) XMAX = 1.0D3 MES = 4 MOS = 2 IF (MTESX.LE.0) MTESX = 20 IF (MTESF.LE.0) MTESF = 2 IF (MIT.LE.0) MIT = 1000 IF (MFV.LE.0) MFV = 2000 MES2 = 1 KIT = 0 MAL = 0 * * 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.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 30 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) 30 CONTINUE END IF FO = FMIN FUB = FMAX GMAX = ETA9 DMAX = ETA9 * * COMPUTATION OF THE VALUE AND THE SUBGRADIENT OF THE OBJECTIVE * FUNCTION * CALL FUNDER(NF,X,F,G) NFV = NFV + 1 NFG = NFG + 1 IF (IHES.GT.0) THEN CALL HES(NF,X,HF) NFH = NFH + 1 ELSE CALL PF1HS1(NF,X,HF,G,SO,ETA1) END IF FP=F 40 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,FP,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 50 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 (DMAX.LE.TOLX) THEN ITERM = 1 NTESX = NTESX + 1 IF (NTESX.GE.MTESX) GO TO 90 ELSE NTESX = 0 END IF TEMP = ABS(FO-FUB)/MAX(ABS(FUB),1.0D0) IF (TEMP.LE.TOLF) THEN ITERM = 2 NTESF = NTESF + 1 IF (NTESF.GE.MTESF) GO TO 90 ELSE NTESF = 0 END IF 50 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 60 CONTINUE * * RESTART * IF (IREST.GT.0) THEN CALL MXDSMI(NF,HF) 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 N = NF * * DIRECTION DETERMINATION USING A SPECIAL QUADRATIC PROGRAMMING * PROCEDURE AND THE BUNDLE UPDATE * CALL PDDBQ2(NF,NA,NC,X,IX,XL,XU,F,FO,FP,FUB,AF,AFD,IA,IAA,AG,AR, + AZ,CF,IC,CL,CU,CG,G,H,HF,AH,S,GO,P,R,RP,KBF,KBC,IDECF, + ETA0,ETA2,ETA9,EPS7,EPS9,TOLF,TOLG,ETA,UMAX,GMAX, + GNORM,SNORM,XNORM,N,MAL,NIT,MOS,NTESF,NTESX,ITERQ, + ITERD,ITERS,ITERM) IF (ITERD.LT.0) ITERM = ITERD IF (ITERM.NE.0) GO TO 90 * * TEST FOR SUFFICIENT DESCENT * P = MXVDOT(NF,GO,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 = 1.0D-3 RMAX = MIN(ALF2*GNORM/SNORM,XMAX/SNORM) ELSE GO TO 60 END IF IF (NIT.EQ.1) KIT = NIT * * PREPARATION OF LINE SEARCH * FP = FO FO = F PO = P PP = MXVDOT(NF,G,S) CALL MXVCOP(NF,X,XO) CALL MXVCOP(NF,G,GO) * * LINE SEARCH WITH DIRECTIONAL DERIVATIVES WHICH ALLOWS NULL STEPS * TO = 1.0D0 CALL PS1L05(NF,X,XO,S,R,RP,F,FO,FP,P,PO,PP,TO,G,SNORM,RMIN,RMAX, + FMIN,FMAX,TOLS,TOLP,ETA,MES,MES2,ITERS) ITERD = 0 IF (IHES.GT.0) THEN CALL HES(NF,X,HF) NFH = NFH + 1 ELSE CALL PF1HS1(NF,X,HF,G,SO,ETA1) END IF * * DECISION AFTER UNSUCCESSFUL LINE SEARCH * IF (ITERS.LE.0) THEN R = 0.0D0 F = FO P = PO CALL MXVCOP(NF,XO,X) ELSE IF (ITERS.GE.9) CALL MXVDIR(NF,RP,S,XO,X) CALL MXVDIF(NF,X,XO,XO) C F = F - MXVDOT(NF,XO,G) IF (KBC.GT.0) THEN K = 0 DO 70 KC = 1,NC CF(KC) = MXVDOT(NF,X,CG(K+1)) K = K + NF 70 CONTINUE END IF END IF * * COMPUTATION OF VALUES FOR TERMINATION CRITERIA * DMAX = 0.0D0 DO 80 I = 1,NF DMAX = MAX(DMAX,ABS(XO(I))/MAX(ABS(X(I)),1.0D0)) 80 CONTINUE TEMP = FUB FUB = F IF (ITERS.GE.9) FUB = FUB - (R-RP)*P FUB = (FUB+TEMP)*0.5D0 * * END OF THE ITERATION * GO TO 40 90 IF (IPRNT.GT.1 .OR. IPRNT.LT.0) + WRITE (6,'(1X,''EXIT FROM PNEW :'')') 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, + FP,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