C
C
==============
PROGRAM RANDIR
==============
DIMENSION X(25),GX(50)
COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR
READ(*,*) N,KG,NSR
WRITE(*,1001)
WRITE(*,1002) N,KG,NSR
1001
1002
FORMAT(25X,'======== PRIMARY DATA ========'/)
FORMAT(5X,'N=',I4,2X,'KG=',I4,2X,'NSR=',I4)
CALL MAISUB(N,KG,X,GX)
STOP
END
C
C
============================
SUBROUTINE MAISUB(N,KG,X,GX)
============================
DIMENSION X(N),GX(KG),SF(25),BL(25),BU(25)
COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR
READ(*,*) (X(I),I=1,N)
READ(*,*) EPS1,EPS2,T0
READ(*,*) KWR
READ(*,*) (BL(I),I=1,N),(BU(I),I=1,N)
CALL FFX(N,X,FX)
WRITE(*,132) (X(I),I=1,N)
WRITE(*,133) FX
WRITE(*,104) EPS1,EPS2,T0
RM=2657863.0
CALL XRAN(N,KG,X,GX,RM,BL,BU)
WRITE(*,132) (X(I),I=1,N)
CALL FFX(N,X,FX)
WRITE(*,133) FX
WRITE(*,134) (GX(K),K=1,KG)
104 FORMAT(5X,'EPS1=',E9.1,2X,'EPS2=',E9.1,2X,'T0=',F10.6)
WRITE(*,105)
105 FORMAT(/22X,'======== ITERATION COMPUTE ========'/)
ITE=1
CALL FFX(N,X,F0)
107 TH=T0
CALL SFEAS(N,KG,X,GX,SF,F0,TH,RM)
CALL FFX(N,X,FX)
FL=FX
113 TH=1.3*TH
DO 114 I=1,N
114 X(I)=X(I)+TH*SF(I)
CALL FFX(N,X,FX)
CALL GGX(N,KG,X,GX)
DO 115 K=1,KG
IF(GX(K).GE.1E-15) GOTO 116
115 CONTINUE
IF(FX.GT.FL) GOTO 116
FL=FX
GOTO 113
116 DO 117 I=1,N
117 X(I)=X(I)-TH*SF(I)
TH=0.7*TH
DO 118 I=1,N
118 X(I)=X(I)+TH*SF(I)
CALL FFX(N,X,FX)
CALL GGX(N,KG,X,GX)
DO 119 K=1,KG
IF(GX(K).GE.1E-15) GOTO 116
119 CONTINUE
IF(FX.GT.FL) GOTO 116
IF(ABS(F0-FX).LT.ABS(F0)*EPS1+EPS2) GOTO 129
IF(TH.LT.EPS1) GOTO 129
IF(KWR.GT.0) GOTO 125
IF((ITE/10)*10.NE.ITE) GOTO 128
125 WRITE(*,126) ITE,FX
IF(KWR.LE.0) GOTO 128
WRITE(*,127) (X(I),I=1,N)
126 FORMAT(/' ***** ITE= ',I6,5X,'FX=',E15.6)
127 FORMAT(5X,'X :'/(5X,5E15.6))
128 ITE=ITE+1
F0=FX
GOTO 107
129 WRITE(*,130)
130 FORMAT(/22X,'======== OPTIMUM SOLUTION ========'/)
WRITE(*,131) ITE,NFX
WRITE(*,132) (X(I),I=1,N)
WRITE(*,133) FX
WRITE(*,134) (GX(K),K=1,KG)
131 FORMAT(5X,'ITE=',I6,2X,'NFX=',I6)
132 FORMAT(5X,'X :'/(5X,5E15.6))
133 FORMAT(5X,'FX=',E15.6)
134 FORMAT(5X,'GX:'/(5X,5E15.6))
RETURN
END
C
C
=======================
SUBROUTINE RANDOM(Q,RM)
=======================
RM35=2.0**35
RM36=2.0*RM35
RM37=2.0*RM36
RM =5.0*RM
IF(RM.GE.RM37) RM=RM-RM37
IF(RM.GE.RM36) RM=RM-RM36
IF(RM.GE.RM35) RM=RM-RM35
Q=RM/RM35
RETURN
END
C
C
===================================
SUBROUTINE XRAN(N,KG,X,GX,RM,BL,BU)
===================================
DIMENSION X(N),GX(KG),BL(N),BU(N)
COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR
201 CALL GGX(N,KG,X,GX)
DO 203 K=1,KG
IF(GX(K).LE.0.0) GOTO 203
DO 202 I=1,N
CALL RANDOM(Q,RM)
202 X(I)=BL(I)+Q*(BU(I)-BL(I))
GOTO 201
203 CONTINUE
RETURN
END
C
C
========================
SUBROUTINE SRAN(N,SR,RM)
========================
DIMENSION SR(N)
RQU=0.0
DO 301 I=1,N
CALL RANDOM(Q,RM)
SR(I)=2.0*Q-1.0
301 RQU=RQU+SR(I)*SR(I)
DO 302 I=1,N
302 SR(I)=SR(I)/SQRT(RQU)
RETURN
END
C
C
=======================================
SUBROUTINE SFEAS(N,KG,X,GX,SF,F0,TH,RM)
=======================================
DIMENSION X(N),SF(N),GX(KG),X0(25),XL(25),SR(25)
COMMON /ONE/ NSR,KWR,ILI,NPE,NFX,NGR
DO 400 I=1,N
400 X0(I)=X(I)
FL=F0
401 DO 405 K=1,NSR
CALL SRAN(N,SR,RM)
DO 402 I=1,N
402 X(I)=X0(I)+TH*SR(I)
CALL FFX(N,X,FX)
CALL GGX(N,KG,X,GX)
DO 403 KK=1,KG
IF(GX(KK).GE.1E-15) GOTO 405
403 CONTINUE
IF(FX.GE.FL) GOTO 405
FL=FX
DO 404 I=1,N
SF(I)=SR(I)
404 XL(I)=X(I)
405 CONTINUE
DO 406 I=1,N
406 X(I)=XL(I)
IF(ABS(FL-F0).GE.1E-15) GOTO 410
TH=0.7*TH
IF(TH.GT.1E-7) GOTO 401
WRITE(*,407) (X(I),I=1,N)
WRITE(*,408) FL
WRITE(*,409) (GX(K),K=1,KG)
407 FORMAT(5X,'X :'/(5X,5E15.7))
408 FORMAT(5X,'FX:'/5X,E15.7)
409 FORMAT(5X,'GX:'/(5X,5E15.7))
PAUSE 1111
410 IF(KWR.LE.0) GOTO 412
WRITE(*,411) (SF(I),I=1,N)
411 FORMAT(5X,'SF:'/(5X,5E15.6))
412 RETURN
END
SUBROUTINE FFX(N,X,FX)
DIMENSION X (N)
COMMON/ONE/NFX,NSR,KWR
NFX=NFX+1
FX=(X(1)-2)*(X(1)-2)+(X(2)-1)*(X(2)-1)
RETURN
END
SUBROUTINE GGX (N,KG,X,GX)
DIMENSION X(N),GX(KG)
GX(1)=X(1)*X(1)-X(2)
GX(2)=X(1)+X(2)-2
RETURN
END
2,2,2
======== PRIMARY DATA ========
N=
2 KG=
2 NSR=
2
3.0,3.0
1E-6,1E-6,0.2
1
0.0,0.0,-2,4,-2,4
X :
0.300000E+01
0.300000E+01
0.500000E+01
FX=
EPS1= 0.1E-05 EPS2= 0.1E-05 T0= 0.200000
X :
-0.773540E-03
0.773540E-02
0.498768E+01
FX=
GX:
-0.773480E-02
-0.199304E+01
======== ITERATION COMPUTE ========
SF:
0.885695E+00
0.464268E+00
***** ITE=
1
FX=
0.268543E+01
X :
SF:
0.526026E+00
0.283876E+00
0.577783E+00
0.816190E+00
***** ITE=
2
FX=
0.127989E+01
X :
SF:
0.887499E+00
0.794501E+00
0.196116E+00
0.980581E+00
***** ITE=
3
FX=
0.112848E+01
X :
SF:
0.938965E+00
0.105183E+01
0.431229E+00
-0.902242E+00
***** ITE=
4
FX=
0.103900E+01
X :
0.981353E+00
0.963143E+00
SF:
0.196116E+00
0.980581E+00
***** ITE=
5
FX=
0.102014E+01
X :
SF:
0.990003E+00
0.100639E+01
0.327987E+00
-0.944682E+00
***** ITE=
6
FX=
0.100929E+01
X :
0.995405E+00
0.990832E+00