SUBROUTINE CNMN03 (X,S,SLOPE,ALP,FFF,A1,A2,A3,A4,F1,F2,F3,F4,APP,N 11,NCAL,KOUNT,JGOTO) IMPLICIT DOUBLE PRECISION(A-H,O-Z) COMMON /CNMN1/ DELFUN,DABFUN,FDCH,FDCHM,CT,CTMIN,CTL,CTLMIN,ALPHAX 1,ABOBJ1,THETA,OBJ,NDV,NCON,NSIDE,IPRINT,NFDG,NSCAL,LINOBJ,ITMAX,IT 2RM,ICNDIR,IGOTO,NAC,INFO,INFOG,ITER,NFEASCT COMMON /OUTPUT/ IOUT DIMENSION X(N1), S(N1), NCAL(2) C ROUTINE TO SOLVE ONE-DIMENSIONAL SEARCH IN UNCONSTRAINED C MINIMIZATION USING 2-POINT QUADRATIC INTERPOLATION, 3-POINT C CUBIC INTERPOLATION AND 4-POINT CUBIC INTERPOLATION. C BY G. N. VANDERPLAATS APRIL, 1972. C NASA-AMES RESEARCH CENTER, MOFFETT FIELD, CALIF. C ALP = PROPOSED MOVE PARAMETER. C SLOPE = INITIAL FUNCTION SLOPE = S-TRANSPOSE TIMES DF. C SLOPE MUST BE NEGATIVE. C OBJ = INITIAL FUNCTION VALUE. ZRO=0. IF (JGOTO.EQ.0) GO TO 10 GO TO (50,80,110,140,180,220,270),JGOTO C ------------------------------------------------------------------ C INITIAL INFORMATION (ALPHA=0) C ------------------------------------------------------------------ 10 IF (SLOPE.LT.0.) GO TO 20 ALP=0. RETURN 20 CONTINUE IF (IPRINT.GT.4) WRITE (IOUT,360) FFF=OBJ AP1=0. A1=0. F1=OBJ A2=ALP A3=0. F3=0. AP=A2 KOUNT=0 C ------------------------------------------------------------------ C MOVE A DISTANCE AP*S AND UPDATE FUNCTION VALUE C ------------------------------------------------------------------ 30 CONTINUE KOUNT=KOUNT+1 DO 40 I=1,NDV 40 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) AP IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=1 RETURN 50 CONTINUE F2=OBJ IF (IPRINT.GT.4) WRITE (IOUT,390) F2 IF (F2.LT.F1) GO TO 120 C ------------------------------------------------------------------ C CHECK FOR ILL-CONDITIONING C ------------------------------------------------------------------ IF (KOUNT.GT.5) GO TO 60 FF=2.*ABS(F1) IF (F2.LT.FF) GO TO 90 FF=5.*ABS(F1) IF (F2.LT.FF) GO TO 60 A2=.5*A2 AP=-A2 ALP=A2 GO TO 30 60 F3=F2 A3=A2 A2=.5*A2 C ------------------------------------------------------------------ C UPDATE DESIGN VECTOR AND FUNCTION VALUE C ------------------------------------------------------------------ AP=A2-ALP ALP=A2 DO 70 I=1,NDV 70 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) A2 IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=2 RETURN 80 CONTINUE F2=OBJ IF (IPRINT.GT.4) WRITE (IOUT,390) F2 C PROCEED TO CUBIC INTERPOLATION. GO TO 160 90 CONTINUE C ------------------------------------------------------------------ C ********** 2-POINT QUADRATIC INTERPOLATION ********** C ------------------------------------------------------------------ JJ=1 II=1 CALL CNMN04 (II,APP,ZRO,A1,F1,SLOPE,A2,F2,ZRO,ZRO,ZRO,ZRO) IF (APP.LT.ZRO.OR.APP.GT.A2) GO TO 120 F3=F2 A3=A2 A2=APP JJ=0 C ------------------------------------------------------------------ C UPDATE DESIGN VECTOR AND FUNCTION VALUE C ------------------------------------------------------------------ AP=A2-ALP ALP=A2 DO 100 I=1,NDV 100 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) A2 IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=3 RETURN 110 CONTINUE F2=OBJ IF (IPRINT.GT.4) WRITE (IOUT,390) F2 GO TO 150 120 A3=2.*A2 C ------------------------------------------------------------------ C UPDATE DESIGN VECTOR AND FUNCTION VALUE C ------------------------------------------------------------------ AP=A3-ALP ALP=A3 DO 130 I=1,NDV 130 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) A3 IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=4 RETURN 140 CONTINUE F3=OBJ IF (IPRINT.GT.4) WRITE (IOUT,390) F3 150 CONTINUE IF (F3.LT.F2) GO TO 190 160 CONTINUE C ------------------------------------------------------------------ C ********** 3-POINT CUBIC INTERPOLATION ********** C ------------------------------------------------------------------ II=3 CALL CNMN04 (II,APP,ZRO,A1,F1,SLOPE,A2,F2,A3,F3,ZRO,ZRO) IF (APP.LT.ZRO.OR.APP.GT.A3) GO TO 190 C ------------------------------------------------------------------ C UPDATE DESIGN VECTOR AND FUNCTION VALUE. C ------------------------------------------------------------------ AP1=APP AP=APP-ALP ALP=APP DO 170 I=1,NDV 170 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) ALP IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=5 RETURN 180 CONTINUE IF (IPRINT.GT.4) WRITE (IOUT,390) OBJ C ------------------------------------------------------------------ C CHECK CONVERGENCE C ------------------------------------------------------------------ AA=1.-APP/A2 AB2=ABS(F2) AB3=ABS(OBJ) AB=AB2 IF (AB3.GT.AB) AB=AB3 IF (AB.LT.1.0E-15) AB=1.0E-15 AB=(AB2-AB3)/AB IF (ABS(AB).LT.1.0E-15.AND.ABS(AA).LT..001) GO TO 330 A4=A3 F4=F3 A3=APP F3=OBJ IF (A3.GT.A2) GO TO 230 A3=A2 F3=F2 A2=APP F2=OBJ GO TO 230 190 CONTINUE C ------------------------------------------------------------------ C ********** 4-POINT CUBIC INTERPOLATION ********** C ------------------------------------------------------------------ 200 CONTINUE A4=2.*A3 C UPDATE DESIGN VECTOR AND FUNCTION VALUE. AP=A4-ALP ALP=A4 DO 210 I=1,NDV 210 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) ALP IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=6 RETURN 220 CONTINUE F4=OBJ IF (IPRINT.GT.4) WRITE (IOUT,390) F4 IF (F4.GT.F3) GO TO 230 A1=A2 F1=F2 A2=A3 F2=F3 A3=A4 F3=F4 GO TO 200 230 CONTINUE II=4 CALL CNMN04 (II,APP,A1,A1,F1,SLOPE,A2,F2,A3,F3,A4,F4) IF (APP.GT.A1) GO TO 250 AP=A1-ALP ALP=A1 OBJ=F1 DO 240 I=1,NDV 240 X(I)=X(I)+AP*S(I) GO TO 280 250 CONTINUE C ------------------------------------------------------------------ C UPDATE DESIGN VECTOR AND FUNCTION VALUE C ------------------------------------------------------------------ AP=APP-ALP ALP=APP DO 260 I=1,NDV 260 X(I)=X(I)+AP*S(I) IF (IPRINT.GT.4) WRITE (IOUT,370) ALP IF (IPRINT.GT.4) WRITE (IOUT,380) (X(I),I=1,NDV) NCAL(1)=NCAL(1)+1 JGOTO=7 RETURN 270 CONTINUE IF (IPRINT.GT.4) WRITE (IOUT,390) OBJ 280 CONTINUE C ------------------------------------------------------------------ C CHECK FOR ILL-CONDITIONING C ------------------------------------------------------------------ IF (OBJ.GT.F2.OR.OBJ.GT.F3) GO TO 290 IF (OBJ.LE.F1) GO TO 330 AP=A1-ALP ALP=A1 OBJ=F1 GO TO 310 290 CONTINUE IF (F2.LT.F3) GO TO 300 OBJ=F3 AP=A3-ALP ALP=A3 GO TO 310 300 OBJ=F2 AP=A2-ALP ALP=A2 310 CONTINUE C ------------------------------------------------------------------ C UPDATE DESIGN VECTOR C ------------------------------------------------------------------ DO 320 I=1,NDV 320 X(I)=X(I)+AP*S(I) 330 CONTINUE C ------------------------------------------------------------------ C CHECK FOR MULTIPLE MINIMA C ------------------------------------------------------------------ IF (OBJ.LE.FFF) GO TO 350 C INITIAL FUNCTION IS MINIMUM. DO 340 I=1,NDV 340 X(I)=X(I)-ALP*S(I) ALP=0. OBJ=FFF 350 CONTINUE JGOTO=0 RETURN C ------------------------------------------------------------------ C FORMATS C ------------------------------------------------------------------ C C 360 FORMAT (/////5X,60H* * * UNCONSTRAINED ONE-DIMENSIONAL SEARCH INFO 1RMATION * * *) 370 FORMAT (/5X,7HALPHA =,E14.5/5X,8HX-VECTOR) 380 FORMAT (5X,6E13.5) 390 FORMAT (/5X,5HOBJ =,E14.5) END