C PROGRAM TO FIND GLOBAL MINIMUM BY REPULSIVE PARTICLE SWARM METHOD C WRITTEN BY SK MISHRA, DEPT. OF ECONOMICS, NEHU, SHILLONG (INDIA) C ----------------------------------------------------------------- PARAMETER (N=100,NN=40,MX=100,NSTEP=15,ITRN=10000,NSIGMA=1,ITOP=3) PARAMETER (NPRN=100) ! DISPLAYS RESULTS AT EVERY 100 TH ITERATION C PARAMETER(N=50,NN=25,MX=100,NSTEP=9,ITRN=10000,NSIGMA=1,ITOP=3) C PARAMETER (N=100,NN=15,MX=100,NSTEP=9,ITRN=10000,NSIGMA=1,ITOP=3) C IN CERTAIN CASES THE ONE OR THE OTHER SPECIFICATION WORKS BETTER C DIFFERENT SPECIFICATIONS OF PARAMETERS MAY SUIT DIFFERENT TYPES C OF FUNCTIONS OR DIMENSIONS - ONE HAS TO DO SOME TRIAL AND ERROR C ----------------------------------------------------------------- C N = POPULATION SIZE. IN MOST OF THE CASES N=30 IS OK. ITS VALUE C MAY BE INCREASED TO 50 OR 100 TOO. THE PARAMETER NN IS THE SIZE OF C RANDOMLY CHOSEN NEIGHBOURS. 15 TO 25 (BUT SUFFICIENTLY LESS THAN C N) IS A GOOD CHOICE. MX IS THE MAXIMAL SIZE OF DECISION VARIABLES. C IN F(X1, X2,...,XM) M SHOULD BE LESS THAN OR EQUAL TO MX. ITRN IS C THE NO. OF ITERATIONS. IT MAY DEPEND ON THE PROBLEM. 200(AT LEAST) C TO 500 ITERATIONS MAY BE GOOD ENOUGH. BUT FOR FUNCTIONS LIKE C ROSENBROCKOR,GRIEWANK OF LARGE SIZE (SAY M=30) IT IS NEEDED THAT C ITRN IS LARGE, SAY 5000 OR EVEN 10000. C SIGMA INTRODUCES PERTURBATION & HELPS THE SEARCH JUMP OUT OF LOCAL C OPTIMA. FOR EXAMPLE : RASTRIGIN FUNCTION OF DMENSION 3O OR LARGER C NSTEP DOES LOCAL SEARCH BY TUNNELLING AND WORKS WELL BETWEEN 5 AND C 15, WHICH IS MUCH ON THE HIGHER SIDE. C ITOP <=1 (RING); ITOP=2 (RING AND RANDOM); ITOP=>3 (RANDOM) C NSIGMA=0 (NO CHAOTIC PERTURBATION);NSIGMA=1 (CHAOTIC PERTURBATION) C NOTE THAT NSIGMA=1 NEED NOT ALWAYS WORK BETTER (OR WORSE) C SUBROUTINE FUNC( ) DEFINES OR CALLS THE FUNCTION TO BE OPTIMIZED. IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV COMMON /KFF/KF,NFCALL,FTIT INTEGER IU,IV CHARACTER *70 FTIT DIMENSION X(N,MX),V(N,MX),A(MX),VI(MX),TIT(50) DIMENSION XX(N,MX),F(N),V1(MX),V2(MX),V3(MX),V4(MX),BST(MX) C A1 A2 AND A3 ARE CONSTANTS AND W IS THE INERTIA WEIGHT. C OCCASIONALLY, TINKERING WITH THESE VALUES, ESPECIALLY A3, MAY BE C NEEDED. DATA A1,A2,A3,W,SIGMA /.5D00,.5D00,.0005D00,.5D00,1.D-03/ EPSILON=1.D-08 ! ACCURACY NEEDED FOR TERMINATON C --------------------CHOOSING THE TEST FUNCTION ------------------' CALL FSELECT(KF,M,FTIT) C ----------------------------------------------------------------- FFMIN=1.D30 LCOUNT=0 NFCALL=0 WRITE(*,*)'4-DIGITS SEED FOR RANDOM NUMBER GENERATION' READ(*,*) IU DATA FMIN /1.0E30/ C GENERATE N-SIZE POPULATION OF M-TUPLE PARAMETERS X(I,J) RANDOMLY DO I=1,N DO J=1,M CALL RANDOM(RAND) X(I,J)=(RAND-0.5D00)*10 C WE GENERATE RANDOM(-5,5). HERE MULTIPLIER IS 10. TINKERING IN SOME C CASES MAY BE NEEDED ENDDO F(I)=1.0D30 ENDDO C INITIALISE VELOCITIES V(I) FOR EACH INDIVIDUAL IN THE POPULATION DO I=1,N DO J=1,M CALL RANDOM(RAND) V(I,J)=(RAND-0.5D+00) C V(I,J)=RAND ENDDO ENDDO DO 100 ITER=1,ITRN C LET EACH INDIVIDUAL SEARCH FOR THE BEST IN ITS NEIGHBOURHOOD DO I=1,N DO J=1,M A(J)=X(I,J) VI(J)=V(I,J) ENDDO CALL LSRCH(A,M,VI,NSTEP,FI) IF(FI.LT.F(I)) THEN F(I)=FI DO IN=1,M BST(IN)=A(IN) ENDDO C F(I) CONTAINS THE LOCAL BEST VALUE OF FUNCTION FOR ITH INDIVIDUAL C XX(I,J) IS THE M-TUPLE VALUE OF X ASSOCIATED WITH LOCAL BEST F(I) DO J=1,M XX(I,J)=A(J) ENDDO ENDIF ENDDO C NOW LET EVERY INDIVIDUAL RANDOMLY COSULT NN(<1; C MIN = 1 IF ALL ABS(X) ARE SMALLER THAN THE EYE C SMALLER THE VALUE OF ZZ, MORE DIFFICULT TO ENTER THE EYE C LARGER THE VALUE OF M, MORE DIFFICULT TO FIND THE OPTIMUM F=0.D00 EYE=0.000001D00 FP=0.D00 DO I=1,M IF(DABS(X(I)).GT.EYE) THEN FP=1.D00 F=F+100.D00+DABS(X(I)) ELSE F=F+1.D00 ENDIF ENDDO IF(FP.EQ.0.D00) F=F/M RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.7) THEN C ZERO SUM FUNCTION : MIN = 0 AT SUM(X(I))=0 F=0.D00 DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO SUM=0.D00 DO I=1,M SUM=SUM+X(I) ENDDO IF(SUM.NE.0.D00) F=1.D00+(10000*DABS(SUM))**0.5 RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.8) THEN C CORANA FUNCTION : MIN = 0 AT (0, 0, 0, 0) APPROX F=0.D00 DO I=1,M IF(DABS(X(I)).GT.1000.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*2000 ENDIF ENDDO DO J=1,M IF(J.EQ.1) DJ=1.D00 IF(J.EQ.2) DJ=1000.D00 IF(J.EQ.3) DJ=10.D00 IF(J.EQ.4) DJ=100.D00 ISGNXJ=1 IF(X(J).LT.0.D00) ISGNXJ=-1 ZJ=(DABS(X(J)/0.2D00)+0.49999)*ISGNXJ*0.2D00 ISGNZJ=1 IF(ZJ.LT.0.D00) ISGNZJ=-1 IF(DABS(X(J)-ZJ).LT.0.05D00) THEN F=F+0.15D00*(ZJ-0.05D00*ISGNZJ)**2 * DJ ELSE F=F+DJ*X(J)**2 ENDIF ENDDO RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.9) THEN C MODIFIED RCOS FUNCTION MIN=-0.179891 AT (-3.196989, 12.52626)APPRX F=0.D00 IF(X(1).LT.-5.D00 .OR. X(1).GT.10.D00) THEN CALL RANDOM(RAND) X(1)=RAND*15.D00 -5.D00 ENDIF IF(X(2).LT.0.D00 .OR. X(2).GT.15.D00) THEN CALL RANDOM(RAND) X(2)=RAND*15.D00 ENDIF CA=1.D00 CB=5.1/(4*PI**2) CC=5.D00/PI CD=6.D00 CE=10.D00 CF=1.0/(8*PI) F1=CA*(X(2)-CB*X(1)**2+CC*X(1)-CD)**2 F2=CE*(1.D00-CF)*DCOS(X(1))*DCOS(X(2)) F3=DLOG(X(1)**2+X(2)**2+1.D00) F=-1.0/(F1+F2+F3+CE) RETURN ENDIF C ---------------------------------------------------------------- IF(KF.EQ.10) THEN C FREUDENSTEIN ROTH FUNCTION : MIN = 0 AT (5, 4) F=0.D00 DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F1=(-13.D00+X(1)+((5.D00-X(2))*X(2)-2)*X(2))**2 F2=(-29.D00+X(1)+((X(2)+1.D00)*X(2)-14.D00)*X(2))**2 F=F1+F2 RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.11) THEN C ANNS XOR FUNCTION (PARSOPOULOS, KE, PLAGIANAKOS, VP, MAGOULAS, GD C AND VRAHATIS, MN "STRETCHING TECHNIQUE FOR OBTAINING GLOBAL C MINIMIZERS THROUGH PARTICLE SWARM OPTIMIZATION") C MIN=0.9597588 FOR X=(1, -1, 1, -1, -1, 1, 1, -1, 0.421134) APPROX C OBTAINED BY DIFFERENTIAL EVOLUTION PROGRAM F=0.D00 DO I=1,M IF(DABS(X(I)).GT.1.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*2 ENDIF ENDDO F11=X(7)/(1.D00+DEXP(-X(1)-X(2)-X(5))) F12=X(8)/(1.D00+DEXP(-X(3)-X(4)-X(6))) F1=(1.D00+DEXP(-F11-F12-X(9)))**(-2) F21=X(7)/(1.D00+DEXP(-X(5))) F22=X(8)/(1.D00+DEXP(-X(6))) F2=(1.D00+DEXP(-F21-F22-X(9)))**(-2) F31=X(7)/(1.D00+DEXP(-X(1)-X(5))) F32=X(8)/(1.D00+DEXP(-X(3)-X(6))) F3=(1.D00-(1.D00+DEXP(-F31-F32-X(9)))**(-1))**2 F41=X(7)/(1.D00+DEXP(-X(2)-X(5))) F42=X(8)/(1.D00+DEXP(-X(4)-X(6))) F4=(1.D00-(1.D00+DEXP(-F41-F42-X(9)))**(-1))**2 F=F1+F2+F3+F4 RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.12) THEN C PERM FUNCTION #1 MIN = 0 AT (1, 2, 3, 4) C BETA => 0. CHANGE IF NEEDED. SMALLER BETA RAISES DIFFICULY C FOR BETA=0, EVERY PERMUTED SOLUTION IS A GLOBAL MINIMUM BETA=50.D00 F=0.D00 DO I=1,M IF(DABS(X(I)).GT.M) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*2*M ENDIF ENDDO DO K=1,M SUM=0.D00 DO I=1,M SUM=SUM+(I**K+BETA)*((X(I)/I)**K-1.D00) ENDDO F=F+SUM**2 ENDDO RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.13) THEN C PERM FUNCTION #2 MIN = 0 AT (1/1, 1/2, 1/3, 1/4,..., 1/M) C BETA => 0. CHANGE IF NEEDED. SMALLER BETA RAISES DIFFICULY C FOR BETA=0, EVERY PERMUTED SOLUTION IS A GLOBAL MINIMUM BETA=10.D00 DO I=1,M IF(DABS(X(I)).GT.1.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*2 ENDIF SGN=X(I)/DABS(X(I)) ENDDO F=0.D00 DO K=1,M SUM=0.D00 DO I=1,M SUM=SUM+(I+BETA)*(X(I)**K-(1.D00/I)**K) ENDDO F=F+SUM**2 ENDDO RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.14) THEN C POWER SUM FUNCTION; MIN = 0 AT PERM(1,2,2,3) FOR B=(8,18,44,114) C 0 =< X <=4 F=0.D00 DO I=1,M C ANY PERMUTATION OF (1,2,2,3) WILL GIVE MIN = ZERO IF(X(I).LT.0.D00 .OR. X(I).GT.4.D00) THEN CALL RANDOM(RAND) X(I)=RAND*4 ENDIF ENDDO DO K=1,M SUM=0.D00 DO I=1,M SUM=SUM+X(I)**K ENDDO IF(K.EQ.1) B=8.D00 IF(K.EQ.2) B=18.D00 IF(K.EQ.3) B=44.D00 IF(K.EQ.4) B=114.D00 F=F+(SUM-B)**2 ENDDO RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.15) THEN C GOLDSTEIN PRICE FUNCTION : MIN VALUE = 3 AT (0, -1) F=0.D00 DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*20 ENDIF ENDDO F11=(X(1)+X(2)+1.D00)**2 F12=(19.D00-14*X(1)+ 3*X(1)**2-14*X(2)+ 6*X(1)*X(2)+ 3*X(2)**2) F1=1.00+F11*F12 F21=(2*X(1)-3*X(2))**2 F22=(18.D00-32*X(1)+12*X(1)**2+48*X(2)-36*X(1)*X(2)+27*X(2)**2) F2=30.D00+F21*F22 F= (F1*F2) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.16) THEN C BUKIN'S 6TH FUNCTION MIN = 0 FOR (-10, 1) C -15. LE. X(1) .LE. -5 AND -3 .LE. X(2) .LE. 3 IF(X(1).LT. -15.D00 .OR. X(1) .GT. -5.D00) THEN CALL RANDOM(RAND) X(1)=-(RAND*10+5.D00) ENDIF IF(DABS(X(2)).GT.3.D00) THEN CALL RANDOM(RAND) X(2)=(RAND-.5D00)*6 ENDIF F=100.D0*DSQRT(DABS(X(2)-0.01D0*X(1)**2))+ 0.01D0*DABS(X(1)+10.D0) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.17) THEN C NEW N#8 FUNCTION (MULTIPLE GLOBAL MINIMA) C MIN VALUE = -1 AT (AROUND .7 AROUND, 0.785 APPROX) F=0.D00 DO I=1,M IF(X(I).LT.0.5D00 .OR. X(I).GT.1.D00) THEN CALL RANDOM(RAND) X(I)=RAND/2.D00 ENDIF ENDDO F=-DEXP(-DABS(DLOG(.001D00+DABS((DSIN(X(1)+X(2))+DSIN(X(1)-X(2))+ & (DCOS(X(1)+X(2))*DCOS(X(1)-X(2))+.001))**2)+ & .01D00*(X(2)-X(1))**2))) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.18) THEN C DEFLECTED CORRUGATED SPRING FUNCTION C MIN VALUE = -1 AT (5, 5, ..., 5) FOR ANY K AND ALPHA=5; M VARIABLE CALL DCS(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.19) THEN C FACTORIAL FUNCTION, MIN =0 AT X=(1,2,3,...,M) CALL FACTOR1(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.20) THEN C DECANOMIAL FUNCTION, MIN =0 AT X=(2, -3) DO I=1,M IF(DABS(X(I)).GT.4.D00) THEN CALL RANDOM(RAND) X(I)= (RAND-0.5D00)*8 ENDIF ENDDO CALL DECANOM(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.21) THEN C JUDGE'S FUNCTION F(0.864, 1.23) = 16.0817; M=2 CALL JUDGE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.22) THEN C DODECAL FUNCTION CALL DODECAL(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.23) THEN C WHEN X(1)*X(2)=X(1)*X(2) ? M=2 CALL SEQP(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.24) THEN C WHEN ARITHMETIC MEAN = GEOMETRIC MEAN ? : M =>1 CALL AMGM(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.25) THEN C M =>2 CALL FUNCT2(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.26) THEN C M =>2 CALL FUNCT3(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.27) THEN C M =>2 CALL FUNCT4(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.28) THEN C M =>2 CALL FUNCT6(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.29) THEN C M =>2 CALL FUNCT7(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.30) THEN C M =>2 CALL FUNCT12(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.31) THEN C M =>2 CALL FUNCT13(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.32) THEN C M =2 CALL FUNCT14(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.33) THEN C M =4 CALL FUNCT15(M,F,X) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.34) THEN C WOOD FUNCTION : F MIN : M=4 CALL WOOD(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.35) THEN C FENTON & EASON FUNCTION : : M=2 CALL FENTONEASON(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.36) THEN C HOUGEN FUNCTION 5 VARIABLES : M =3 CALL HOUGEN(X,M,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.37) THEN C GIUNTA FUNCTION 2 VARIABLES :M =2 CALL GIUNTA(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.38) THEN C EGGHOLDER FUNCTION M VARIABLES CALL EGGHOLD(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.39) THEN C TRID FUNCTION M VARIABLES CALL TRID(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.40) THEN C GRIEWANK FUNCTION M VARIABLES CALL GRIEWANK(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.41) THEN C WEIERSTRASS FUNCTION M VARIABLES CALL WEIERSTRASS(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.42) THEN C LEVY-3 FUNCTION 2 VARIABLES CALL LEVY3(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.43) THEN C LEVY-5 FUNCTION 2 VARIABLES CALL LEVY5(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.44) THEN C LEVY-8 FUNCTION 3 VARIABLES CALL LEVY8(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.45) THEN C RASTRIGIN FUNCTION M VARIABLES CALL RASTRIGIN(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.46) THEN C ACKLEY FUNCTION M VARIABLES CALL ACKLEY(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.47) THEN C MICHALEWICZ FUNCTION M VARIABLES CALL MICHALEWICZ(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.48) THEN C SCHWEFEL FUNCTION M VARIABLES CALL SCHWEFEL(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.49) THEN C SHUBERT FUNCTION 2 VARIABLES CALL SHUBERT(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.50) THEN C DIXON AND PRICE FUNCTION M VARIABLES CALL DIXPRICE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.51) THEN C SHEKEL FUNCTION 4 VARIABLES CALL SHEKEL(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.52) THEN C PAVIANI FUNCTION 10 VARIABLES CALL PAVIANI(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.53) THEN C BRANIN FUNCTION#1 2 VARIABLES CALL BRANIN1(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.54) THEN C BRANIN FUNCTION#2 2 VARIABLES CALL BRANIN2(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.55) THEN C BOHACHEVSKY FUNCTION#1 2 VARIABLES CALL BOHACHEVSKY1(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.56) THEN C BOHACHEVSKY FUNCTION#2 2 VARIABLES CALL BOHACHEVSKY2(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.57) THEN C BOHACHEVSKY FUNCTION#3 2 VARIABLES CALL BOHACHEVSKY3(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.58) THEN C EASOM FUNCTION#3 2 VARIABLES CALL EASOM(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.59) THEN C ROSENBROCK FUNCTION M VARIABLES CALL ROSENBROCK(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.60) THEN C CROSS-LEGGED TABLE FUNCTION : 2 VARIABLES CALL CROSSLEG(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.61) THEN C CROSS FUNCTION : 2 VARIABLES CALL CROSS(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.62) THEN C CROSS-IN-TRAY FUNCTION : 2 VARIABLES CALL CROSSINTRAY(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.63) THEN C CROWNED-CROSS FUNCTION : 2 VARIABLES CALL CROWNEDCROSS(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.64) THEN C TT-HOLDER FUNCTION : 2 VARIABLES, MIN F([+/-]1.5706, 0)= -10.8723 CALL TTHOLDER(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.65) THEN C HOLDER-TABLE FUNCTION : 2 VARIABLES C MIN F ([+/-] 9.64617, [+/-] 9.64617) APPROX = -26.92034 APPROX CALL HOLDERTABLE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.66) THEN C CARROM-TABLE FUNCTION : 2 VARIABLES C MIN F ([+/-] 9.64617, [+/-] 9.64617) APPROX = -24.15682 APPROX CALL CARROMTABLE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.67) THEN C PEN-HOLDER FUNCTION : 2 VARIABLES C MIN F ([+/-] 9.64617, [+/-] 9.64617) APPROX = -0.963535 APPROX CALL PENHOLDER(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.68) THEN C BIRD FUNCTION : 2 VARIABLES C MIN F (4.70104, 3.15294) APPROX = -106.764537 APPROX OR C MIN F (-1.58214, -3.13024) APPROX = -106.764537 APPROX CALL BIRD(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.69) THEN C CHICHINADZE FUNCTION : -30 <=X(I)<= 30; M=2 C MIN F (5.901329, 0.5) = -43.3158621 CALL CHICHINADZE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.70) THEN C MCCORMICK FUNCTION : -1.5<= X(1)<=4; -3<=X(2)<=4 ; M=2 C MIN F (-0.54719755, -1.54719755) = -1.913223 APPROX CALL MCCORMICK(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.71) THEN C GLANKWAHMDEE FUNCTION: CALL GLANKWAHMDEE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.72) THEN C FLETCHER-POWELL FUNCTION CALL FLETCHER(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.73) THEN C POWELL FUNCTION CALL POWELL(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.74) THEN C HARTMANN FUNCTION CALL HARTMANN(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.75) THEN C COVILLE FUNCTION CALL COLVILLE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- IF(KF.EQ.76) THEN C HIMMELBLAU FUNCTION CALL HIMMELBLAU(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.77) THEN C BEALE FUNCTION CALL BEALE(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.78) THEN C BOOTH FUNCTION CALL BOOTH(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.79) THEN C HUMP FUNCTION CALL HUMP(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.80) THEN C MATYAS FUNCTION CALL MATYAS(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.81) THEN C MISHRA_1 FUNCTION CALL MISHRA_1(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.82) THEN C MISHRA_2 FUNCTION CALL MISHRA_2(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.83) THEN C ZAKHAROV FUNCTION CALL ZAKHAROV(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.84) THEN C MULTOMOD FUNCTION CALL MULTIMOD(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.85) THEN C NONLINEAR FUNCTION CALL NONLIN(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.86) THEN C QUADRATIC FUNCTION CALL QUADRATIC(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.87) THEN C TRIGON FUNCTION CALL TRIGON(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.88) THEN C WAVY-1 FUNCTION CALL WAVY1(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.89) THEN C WAVY-2 FUNCTION CALL WAVY2(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.90) THEN C TREFETHEN FUNCTION CALL TREFETHEN(M,X,F) RETURN ENDIF C ------------------------------------------------------------------ IF(KF.EQ.91) THEN C ALPINE FUNCTION CALL ALPINE(M,X,F) RETURN ENDIF C ----------------------------------------------------------------- C IF(KF.EQ.99) THEN C ***** FUNCTION C CALL SUBROUTINE(M,X,F) C RETURN C ENDIF C ================================================================= WRITE(*,*)'FUNCTION NOT DEFINED. PROGRAM ABORTED' STOP END C >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> SUBROUTINE DCS(M,F,X) C FOR DEFLECTED CORRUGATED SPRING FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*),C(100) C OPTIMAL VALUES OF (ALL) X ARE ALPHA , AND K IS ONLY FOR SCALING C OPTIMAL VALUE OF F IS -1. DIFFICULT TO OPTIMIZE FOR LARGER M. DATA K,ALPHA/5,5.D00/ ! K AND ALPHA COULD TAKE ON ANY OTHER VALUES R2=0.D00 DO I=1,M C(I)=ALPHA R2=R2+(X(I)-C(I))**2 ENDDO R=DSQRT(R2) F=-DCOS(K*R)+0.1D00*R2 RETURN END C ----------------------------------------------------------------- SUBROUTINE QUINTIC(M,F,X) C QUINTIC FUNCTION: GLOBAL MINIMA,EXTREMELY DIFFICULT TO OPTIMIZE C MIN VALUE = 0 AT PERM( -1, -0.402627941, 2) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F=0.D00 DO I=1,M F=F+DABS(X(I)**5-3*X(I)**4+4*X(I)**3+2*X(I)**2-10*X(I)-4.D00) ENDDO F=1000*F RETURN END C ----------------------------------------------------------------- SUBROUTINE FACTOR1(M,F,X) C FACTORIAL FUNCTION; MIN (1, 2, 3, ...., M) = 0 C FACT = FACTORIAL(M) = 1 X 2 X 3 X 4 X .... X M C FIND X(I), I=1,2,...,M SUCH THAT THEIR PRODUCT IS EQUAL TO FACT. C LARGER THE VALUE OF M (=>8) OR SO, HARDER IS THE PROBLEM IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F=0.D00 FACT=1.D00 P=1.D00 DO I=1,M FACT=FACT*I P=P*X(I) F=F+DABS(P-FACT)**2 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE DECANOM(M,F,X) C DECANOMIAL FUNCTION; MIN (2, -3) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F1= DABS(X(1)**10-20*X(1)**9+180*X(1)**8-960*X(1)**7+ & 3360*X(1)**6-8064*X(1)**5+13340*X(1)**4-15360*X(1)**3+ & 11520*X(1)**2-5120*X(1)+2624.D00) F2= DABS(X(2)**4+12*X(2)**3+54*X(2)**2+108*X(2)+81.D00) F=0.001D00*(F1+F2)**2 RETURN END C ---------------------------------------------------------------- SUBROUTINE JUDGE(M,X,F) PARAMETER (N=20) C THIS SUBROUTINE IS FROM THE EXAMPLE IN JUDGE ET AL., THE THEORY C AND PRACTICE OF ECONOMETRICS, 2ND ED., PP. 956-7. THERE ARE TWO C OPTIMA: F(0.86479,1.2357)=16.0817307 (WHICH IS THE GLOBAL MINUMUM) C AND F(2.35,-0.319)=20.9805 (WHICH IS LOCAL). ADAPTED FROM BILL C GOFFE'S SIMMAN (SIMULATED ANNEALING) PROGRAM IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION Y(N), X2(N), X3(N), X(*) DATA (Y(I),I=1,N)/4.284,4.149,3.877,0.533,2.211,2.389,2.145, & 3.231,1.998,1.379,2.106,1.428,1.011,2.179,2.858,1.388,1.651, & 1.593,1.046,2.152/ DATA (X2(I),I=1,N)/.286,.973,.384,.276,.973,.543,.957,.948,.543, & .797,.936,.889,.006,.828,.399,.617,.939,.784,.072,.889/ DATA (X3(I),I=1,N)/.645,.585,.310,.058,.455,.779,.259,.202,.028, & .099,.142,.296,.175,.180,.842,.039,.103,.620,.158,.704/ F=0.D00 DO I=1,N F=F+(X(1) + X(2)*X2(I) + (X(2)**2)*X3(I) - Y(I))**2 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE DODECAL(M,F,X) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C DODECAL POLYNOMIAL MIN F(1,2,3)=0 DO I=1,M IF(DABS(X(I)).GT.5.D0) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*10 ENDIF ENDDO F=0.D00 F1=2*X(1)**3+5*X(1)*X(2)+4*X(3)-2*X(1)**2*X(3)-18.D00 F2=X(1)+X(2)**3+X(1)*X(2)**2+X(1)*X(3)**2-22.D00 F3=8*X(1)**2+2*X(2)*X(3)+2*X(2)**2+3*X(2)**3-52.D00 F=(F1*F3*F2**2+F1*F2*F3**2+F2**2+(X(1)+X(2)-X(3))**2)**2 RETURN END C ---------------------------------------------------------------- SUBROUTINE SEQP(M,F,X) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C FOR WHAT VALUES X(1)+X(2)=X(1)*X(2) ? ANSWER: FOR (0,0) AND (2,2) C WHILE X(1), X(2) ARE INTEGERS. X(1)=INT(X(1)) ! X(1) CONVERTED TO INTEGER X(2)=INT(X(2)) ! X(2) CONVERTED TO INTEGER F1=X(1)+X(2) F2=X(1)*X(2) F=(F1-F2)**2 ! TURN ALIVE THIS XOR C F=DABS(F1-F2) ! TURN ALIVE THIS - BUT NOT BOTH -------------- RETURN END C ----------------------------------------------------------------- SUBROUTINE AMGM(M,F,X) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C FOR WHAT VALUES ARITHMETIC MEAN = GEOMETRIC MEAN ? THE ANSWER IS: C IF X(1)=X(2)=....=X(M) AND ALL X ARE NON-NEGATIVE C TAKE ONLY THE ABSOLUTE VALUES OF X SUM=0.D00 DO I=1,M X(I)=DABS(X(I)) ENDDO C SET SUM = SOME POSITIVE NUMBER. THIS MAKES THE FUNCTION UNIMODAL SUM= 100.D00 ! TURNED ALIVE FOR UNIQUE MINIMUM AND SET SUM TO C SOME POSITIVE NUMBER. HERE IT IS 100; IT COULD BE ANYTHING ELSE. F1=0.D00 F2=1.D00 DO I=1,M F1=F1+X(I) F2=F2*X(I) ENDDO XSUM=F1 F1=F1/M ! SUM DIVIDED BY M = ARITHMETIC MEAN F2=F2**(1.D00/M) ! MTH ROOT OF THE PRODUCT = GEOMETRIC MEAN F=(F1-F2)**2 IF(SUM.GT.0.D00) F=F+(SUM-XSUM)**2 RETURN END C ----------------------------------------------------------------- SUBROUTINE FUNCT2(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C IN FOGEL, L.J., ANGELIN, P.J. AND BACK, T. (ED) PROCEEDINGS OF THE C FIFTH ANNUAL CONFERENCE ON EVOLUTIONARY PROGRAMMING, PP. 451-460, C MIT PRESS, CAMBRIDGE, MASS. C MIN F (0, 0, ..., 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F=0.D00 F1=1.D00 DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*20 ENDIF ENDDO DO I=1,M F=F+DABS(X(I)) F1=F1*DABS(X(I)) ENDDO F=F+F1 RETURN END C ----------------------------------------------------------------- SUBROUTINE FUNCT3(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C MIN F (0, 0, ... , 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F=0.D00 F1=0.D00 DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*200 ENDIF ENDDO DO I=1,M F1=0.D00 DO J=1,I F1=F1+X(J)**2 ENDDO F=F+F1 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE FUNCT4(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C MIN F (0, 0, ..., 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F=0.D00 DO I=1,M IF(X(I).LT.0.D00 .OR. X(I).GE.M) THEN CALL RANDOM(RAND) X(I)=RAND*2*M ENDIF ENDDO C FIND MAX(X(I))=MAX(ABS(X(I))) NOTE: HERE X(I) CAN BE ONLY POSITIVE XMAX=X(1) DO I=1,M IF(XMAX.LT.X(I)) XMAX=X(I) ENDDO F=XMAX RETURN END C ---------------------------------------------------------------- SUBROUTINE FUNCT6(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C MIN F (-.5, -.5, ..., -.5) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F=0.D00 DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*200 ENDIF ENDDO DO I=1,M F=F+(X(I)+0.5D00)**2 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE FUNCT7(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C MIN F(0, 0, ..., 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) F=0.D00 DO I=1,M IF(DABS(X(I)).GT.1.28D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*2.56D00 ENDIF ENDDO DO I=1,M CALL RANDOM(RAND) F=F+(I*X(I)**4) ENDDO CALL RANDOM(RAND) F=F+RAND RETURN END C --------------------------------------------------------------- SUBROUTINE FUNCT12(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(100),Y(100) DATA A,B,C /10.D00,100.D00,4.D00/ PI=4.D00*DATAN(1.D00) F=0.D00 C MIN F (-1, -1, -1, ..., -1) = 0 C X(I)=-1.D00 ! TO CHECK, TURN IT ALIVE DO I=1,M IF(DABS(X(I)).GT.50.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*100.D00 ENDIF ENDDO F1=0.D00 DO I=1,M XX=DABS(X(I)) U=0.D00 IF(XX.GT.A) U=B*(XX-A)**C F1=F1+U ENDDO F2=0.D00 DO I=1,M-1 Y(I)=1.D00+.25D00*(X(I)+1.D00) F2=F2+ (Y(I)-1.D00)**2 * (1.D00+10.D00*(DSIN(PI*X(I+1))**2)) ENDDO Y(M)=1.D00+.25D00*(X(M)+1.D00) F3=(Y(M)-1.D00)**2 Y(1)=1.D00+.25D00*(X(1)+1.D00) F4=10.D00*(DSIN(PI*Y(1)))**2 F=(PI/M)*(F4+F2+F3)+F1 RETURN END C --------------------------------------------------------------- SUBROUTINE FUNCT13(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(100) DATA A,B,C /5.D00,100.D00,4.D00/ PI=4*DATAN(1.D00) F=0.D00 C MIN F (1, 1, 1, ..., 4.7544 APPROX) = -1.15044 APPROX C X(I)=1.D00 ! TO CHECK, TURN IT ALIVE C X(M)=-4.7544 ! TO CHECK, TURN IT ALIVE DO I=1,M IF(DABS(X(I)).GT.50.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*100.D00 ENDIF ENDDO F1=0.D00 DO I=1,M XX=DABS(X(I)) U=0.D00 IF(XX.GT.A) U=B*(XX-A)**C F1=F1+U ENDDO F2=0.D00 DO I=1,M-1 F2=F2+ (X(I)-1.D00)**2 * (1.D00+(DSIN(3*PI*X(I+1))**2)) ENDDO F3=(X(M)-1.D00)* (1.D00+(DSIN(2*PI*X(M)))**2) F4=(DSIN(3*PI*X(1)))**2 F=0.1*(F4+F2+F3)+F1 RETURN END C ----------------------------------------------------------------- SUBROUTINE FUNCT14(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C MIN F (-31.98, 31.98) = 0.998 PARAMETER (N=25,NN=2) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(2), A(NN,N) DATA (A(1,J),J=1,N) /-32.D00,-16.D00,0.D00,16.D00,32.D00,-32.D00, & -16.D00,0.D00,16.D00,32.D00,-32.D00,-16.D00,0.D00,16.D00,32.D00, & -32.D0,-16.D0,0.D0,16.D0,32.D0,-32.D0,-16.D0,0.D0,16.D0,32.D0/ DATA (A(2,J),J=1,N) /-32.D00,-32.D00,-32.D00,-32.D00,-32.D00, & -16.D00,-16.D00,-16.D00,-16.D00,-16.D00,0.D00,0.D00,0.D00,0.D00, & 0.D00,16.D00,16.D00,16.D00,16.D00,16.D00,32.D00,32.D00, & 32.D00,32.D00,32.D00/ F=0.D00 DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*200.D00 ENDIF ENDDO F1=0.D00 DO J=1,N F2=0.D00 DO I=1,2 F2=F2+(X(I)-A(I,J))**6 ENDDO F2=1.D00/(J+F2) F1=F1+F2 ENDDO F=1.D00/(0.002D00+F1) RETURN END C ----------------------------------------------------------------- SUBROUTINE FUNCT15(M,F,X) C REF: YAO, X. AND LIU, Y. (1996): FAST EVOLUTIONARY PROGRAMMING C MIN F(.19, .19, .12, .14) = 0.3075 PARAMETER (N=11) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*), A(N),B(N) DATA (A(I),I=1,N) /.1957D00,.1947D00,.1735D00,.16D00,.0844D00, & .0627D00,.0456D00,.0342D00,.0323D00,.0235D00,.0246D00/ DATA (B(I),I=1,N) /0.25D00,0.5D00,1.D00,2.D00,4.D00,6.D00,8.D00, & 10.D00,12.D00,14.D00,16.D00/ DO I=1,N B(I)=1.D00/B(I) ENDDO F=0.D00 DO I=1,M IF(DABS(X(I)).GT.5.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D00)*10.D00 ENDIF ENDDO DO I=1,N F1=X(1)*(B(I)**2+B(I)*X(2)) F2=B(I)**2+B(I)*X(3)+X(4) F=F+(A(I)-F1/F2)**2 ENDDO F=F*1000 RETURN END C ---------------------------------------------------------------- SUBROUTINE LINPROG1(M,F,X) C LINEAR PROGRAMMING : MINIMIZATION PROBLEM C IN THIS PROBLEM : M = NO. OF DECISION VARIABLES = 2 C MIN F (2.390, 2.033) = -19.7253 APPROX C MIN F = OVER J=1, M : DO SUM(A(1,J)*X(J)) SUBJECT TO CONSTRAINTS C OVER J=1, M : DO SUM(A(I,J)*X(J)) <= C(I) ; I=2 C . . . . . . . . . . . . C OVER J=1, M : DO SUM(A(I,J)*X(J)) <= C(I) ; I=N C ALL X(I) => 0 PARAMETER (N=3) ! N IS THE NO. OF CONSTRAINTS + 1 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*),A(20,10),C(20),FF(20) DATA (A(1,J),J=1,2),C(1)/4.D0,5.D0,0.0D0/!COEFF OF OBJ FUNCTION DATA (A(2,J),J=1,2),C(2)/10.D0,3.D0,30D0/!COEFF OF 1ST CONSTRAINT DATA (A(3,J),J=1,2),C(3)/6.D0,20.D0,55.D0/!COEFF OF 2ND CONSTRAINT C ------------------------------------------------------------------ C USING ONLY NON-NEGATIVE VALUES OF X(I) DO I=1,M X(I)=DABS(X(I)) ENDDO C EVALUATION OF OBJ FUNCTION AND CONSTRAINTS DO I=1,N FF(I)=0.D00 DO J=1,M FF(I)=FF(I)+A(I,J)*X(J) ENDDO ENDDO F=-FF(1) ! CHANGE OF SIGN FOR MINIMIZATION C CHECK FOR SATISFYING OR VIOLATING THE CONSTRAINTS DO I=2,N FF(I)=FF(I)-C(I) ! SLACK C PENALTY FOR CROSSING LIMITS IF(FF(I).GT.0) F=F+(10+FF(I))**2 ENDDO RETURN END C ---------------------------------------------------------------- SUBROUTINE LINPROG2(M,F,X) C LINEAR PROGRAMMING : MINIMIZATION PROBLEM C IN THIS PROBLEM : M = NO. OF DECISION VARIABLES = 3 C MIN F (250, 625, 0) = -3250 C MIN F = OVER J=1, M : DO SUM(A(1,J)*X(J)) SUBJECT TO CONSTRAINTS C OVER J=1, M : DO SUM(A(I,J)*X(J)) <= C(I) ; I=2 C . . . . . . . . . . . . C OVER J=1, M : DO SUM(A(I,J)*X(J)) <= C(I) ; I=N C ALL X(I) => 0 PARAMETER (N=4) ! N IS THE NO. OF CONSTRAINTS + 1 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*),A(20,10),C(20),FF(20) DATA (A(1,J),J=1,3),C(1)/30.D0,40.D0,20.D0,0.0D0/! COEFF OF OBJ FUNCTION DATA (A(2,J),J=1,3),C(2)/10.D0,12.D0,7.D0,10000.0D0/!COEFF OF 1ST CONSTRAINT DATA (A(3,J),J=1,3),C(3)/7.D0,10.D0,8.D0,8000.D0/! COEFF OF 2ND CONSTRAINT DATA (A(4,J),J=1,3),C(4)/1.D0,1.D0,1.D0,1000.D0/! COEFF OF 3RD CONSTRAINT C ------------------------------------------------------------------ C USING ONLY NON-NEGATIVE VALUES OF X(I) DO I=1,M X(I)=DABS(X(I)) ENDDO C EVALUATION OF OBJ FUNCTION AND CONSTRAINTS DO I=1,N FF(I)=0.D00 DO J=1,M FF(I)=FF(I)+A(I,J)*X(J) ENDDO ENDDO F=-FF(1) ! CHANGE OF SIGN FOR MINIMIZATION C CHECK FOR SATISFYING OR VIOLATING THE CONSTRAINTS DO I=2,N FF(I)=FF(I)-C(I) ! SLACK C PENALTY FOR CROSSING LIMITS IF(FF(I).GT.0.D00) F=F+(100.D00+FF(I))**2 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE HOUGEN(A,M,F) PARAMETER(N=13,K=3) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(N,K),RATE(N),A(*) C ---------------------------------------------------------------- C HOUGEN FUNCTION (HOUGEN-WATSON MODEL FOR REACTION KINATICS) C NO. OF PARAMETERS (A) TO ESTIMATE = 5 = M C BEST RESULTS ARE: C A(1)=1.253031; A(2)=1.190943; A(3)=0.062798; A(4)=0.040063 C A(5)=0.112453 ARE BEST ESTIMATES OBTAINED BY ROSENBROCK & C QUASI-NEWTON METHOD WITH SUM OF SQUARES OF DEVIATION =0.298900994 C AND R=0.99945. C THE NEXT BEST RESULTS GIVEN BY HOOKE-JEEVES & QUASI-NEWTON C A(1)=2.475221;A(2)=0.599177; A(3)=0.124172; A(4)=0.083517 C A(5)=0.217886; SUM OF SQUARES OF DEVIATION = 0.318593458 C R=0.99941 C MOST OF THE OTHER METHODS DO NOT PERFORM WELL C ----------------------------------------------------------------- DATA X(1,1),X(1,2),X(1,3),RATE(1) /470,300,10,8.55/ DATA X(2,1),X(2,2),X(2,3),RATE(2) /285,80,10,3.79/ DATA X(3,1),X(3,2),X(3,3),RATE(3) /470,300,120,4.82/ DATA X(4,1),X(4,2),X(4,3),RATE(4) /470,80,120,0.02/ DATA X(5,1),X(5,2),X(5,3),RATE(5) /470,80,10,2.75/ DATA X(6,1),X(6,2),X(6,3),RATE(6) /100,190,10,14.39/ DATA X(7,1),X(7,2),X(7,3),RATE(7) /100,80,65,2.54/ DATA X(8,1),X(8,2),X(8,3),RATE(8) /470,190,65,4.35/ DATA X(9,1),X(9,2),X(9,3),RATE(9) /100,300,54,13/ DATA X(10,1),X(10,2),X(10,3),RATE(10) /100,300,120,8.5/ DATA X(11,1),X(11,2),X(11,3),RATE(11) /100,80,120,0.05/ DATA X(12,1),X(12,2),X(12,3),RATE(12) /285,300,10,11.32/ DATA X(13,1),X(13,2),X(13,3),RATE(13) /285,190,120,3.13/ C WRITE(*,1)((X(I,J),J=1,K),RATE(I),I=1,N) C 1 FORMAT(4F8.2) DO J=1,M IF(DABS(A(J)).GT.5.D00) THEN CALL RANDOM(RAND) A(J)=(RAND-0.5D00)*10.D00 ENDIF ENDDO F=0.D00 DO I=1,N D=1.D00 DO J=1,K D=D+A(J+1)*X(I,J) ENDDO FX=(A(1)*X(I,2)-X(I,3)/A(M))/D C FX=(A(1)*X(I,2)-X(I,3)/A(5))/(1.D00+A(2)*X(I,1)+A(3)*X(I,2)+ C A(4)*X(I,3)) F=F+(RATE(I)-FX)**2 ENDDO RETURN END C ---------------------------------------------------------------- SUBROUTINE GIUNTA(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C GIUNTA FUNCTION C X(I) = -1 TO 1; M=2 DO I=1,M IF(DABS(X(I)).GT.1.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*2.D00 ENDIF ENDDO C=16.D00/15.D00 F=DSIN(C*X(1)-1.D0)+DSIN(C*X(1)-1.D0)**2+DSIN(4*(C*X(1)-1.D0))/50+ &DSIN(C*X(2)-1.D0)+DSIN(C*X(2)-1.D0)**2+DSIN(4*(C*X(2)-1.D0))/50+.6 RETURN END C ----------------------------------------------------------------- SUBROUTINE EGGHOLD(M,X,F) C EGG HOLDER FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(DABS(X(I)).GT.512.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*1024.D00 ENDIF ENDDO F=0.D00 DO I=1,M-1 F1=-(X(I+1)+47.D00) F2=DSIN( DSQRT( DABS( X(I+1)+X(I)/2+47.D00 ) ) ) F3=DSIN( DSQRT( DABS( X(I)-(X(I+1)+47.D00) ) )) F4=-X(I) F=F+ F1*F2+F3*F4 ENDDO RETURN END C ---------------------------------------------------------------- SUBROUTINE TRID(M,X,F) C TRID FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F1=0.D00 F2=0.D00 DO I=1, M F1=F1+(X(I)-1.D00)**2 ENDDO DO I=2, M F2=F2+X(I)*X(I-1) ENDDO F=F1-F2 RETURN END C ----------------------------------------------------------------- SUBROUTINE GRIEWANK(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C GRIEWANK FUNCTION F1=0.D00 F2=1.0D00 DO I=1,M F1=F1+X(I)**2 FI=DFLOAT(I) F2=F2*DCOS(X(I)/DSQRT(FI)) ENDDO F=F1/4000.D00-F2+1.0D00 RETURN END C ----------------------------------------------------------------- SUBROUTINE WEIERSTRASS(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) C WEIERSTRASS FUNCTION ------------------------------------ DATA AX,BX,KMAX/0.5D00,3.D00,20/ F1=0.D00 F2=0.D00 DO I=1,M IF(DABS(X(I)).GT.0.5D00) THEN CALL RANDOM(RAND) X(I)=RAND-0.5D00 ENDIF ENDDO DO I=1,M S=0.D00 DO KK=1,KMAX+1 K=KK-1 S=S+(AX**K*DCOS(2*PI*BX**K*(X(I)+0.5D00))) ENDDO F1=F1+S ENDDO DO KK=1,KMAX+1 K=KK-1 F2=F2+(AX**K*DCOS(2*PI*BX**K*0.5D00)) ENDDO F=F1-M*F2 RETURN END C ---------------------------------------------------------------- SUBROUTINE LEVY3(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C LEVY # 3 (LEVY ET AL. 1981) ------------------------------------ DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F1=0.0D+00 F2=0.0D+00 DO I=1,5 F1=F1+(I*DCOS((I-1)*X(1)+I)) F2=F2+(I*DCOS((I+1)*X(2)+I)) ENDDO F=F1*F2 RETURN END C ----------------------------------------------------------------- SUBROUTINE LEVY5(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) F1=0.0D+00 F2=0.0D+00 DO I=1,5 F1=F1+(I*DCOS((I-1)*X(1)+I)) F2=F2+(I*DCOS((I+1)*X(2)+I)) ENDDO F3=(X(1)+1.42513D+00)**2 F4=(X(2)+0.80032D+00)**2 F=(F1*F2) + (F3+F4) RETURN END C ---------------------------------------------------------------- SUBROUTINE LEVY8(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*),Y(3) PI=4*DATAN(1.D00) C LEVY # 8 FUNCTION ---------------------------------------------- DO I=1,3 Y(I)=1.D+00+(X(I)-1.D+00)/4.D+00 ENDDO F1=DSIN(PI*Y(1))**2 F3=(Y(3)-1.D+00)**2 F2=0.D+00 DO I=1,2 F2=F2+((Y(I)-1.D+00)**2)*(1.D+00+10.D+00*(DSIN(PI*Y(I+1)))**2) ENDDO F=F1+F2+F3 RETURN END C ----------------------------------------------------------------- SUBROUTINE RASTRIGIN(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) C RASTRIGIN'S FUNCTION F=0.D00 DO I=1,M F=F+ X(I)**2 -10*DCOS(2*PI*X(I)) + 10.D00 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE ACKLEY(M,X,F) C ACKLEY FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) F=20.D00+DEXP(1.D00) DO I=1,M IF(X(I).LT. -15.D00 .OR. X(I).GT.30.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*90 -15.D00 ENDIF ENDDO F1=0.D00 F2=0.D00 DO I=1,M F1=F1+X(I)**2 F2=F2+DCOS(2*PI*X(I)) ENDDO F1=-20*DEXP(-0.2D00*DSQRT(F1/M)) F2=-DEXP(F2/M) F=F+F1+F2 RETURN END C ---------------------------------------------------------------- SUBROUTINE MICHALEWICZ(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C MICHALEWICZ FUNCTION [ 0 <= X(I) <= PI ] MP IS A PARAMETER MP=10 ! SET IT TO THE DESIRED VALUE PI=4*DATAN(1.D00) DO I=1,M IF(X(I).LT.0.D00 .OR. X(I).GT.PI)THEN CALL RANDOM(RAND) X(I)=RAND*PI ENDIF ENDDO F=0.D00 DO I=1,M F=F-DSIN(X(I))*(DSIN(I*X(I)**2/PI))**(2*MP) ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE SCHWEFEL(M,X,F) C SCHWEFEL FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(DABS(X(I)).GT.500) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*1000 ENDIF ENDDO F=0.D00 DO I=1,M F=F+ X(I)*DSIN(DSQRT(DABS(X(I)))) ENDDO F=418.9829D00*M - F RETURN END C ----------------------------------------------------------------- SUBROUTINE SHUBERT(M,X,F) C SHUBERT FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F1=0.D00 F2=0.D00 DO I=1,5 F1=F1+I*DCOS((I+1.D00)*X(1)+I) F2=F2+I*DCOS((I+1.D00)*X(2)+I) ENDDO F=F1*F2 RETURN END C ----------------------------------------------------------------- SUBROUTINE DIXPRICE(M,X,F) C DIXON & PRICE FUNCTION IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=0.D00 DO I=2, M F=F + I*(2*X(I)**2-X(I-1))**2 ENDDO F=F+(X(1)-1.D00)**2 RETURN END C ----------------------------------------------------------------- SUBROUTINE SHEKEL(M,X,F) C SHEKEL FUNCTION FOR TEST OF GLOBAL OPTIMIZATION METHODS PARAMETER(NROW=10,NCOL=4, NR=9)! NR MAY BE 2 TO 10 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION A(NROW,NCOL),C(NROW),X(*) DATA ((A(I,J),J=1,NCOL),I=1,NROW)/4.,4.,4.,4.,1.,1.,1.,1.,8.,8., & 8.,8.,6.,6.,6.,6.,3.,7.,3.,7.,2.,9.,2.,9.,5.,5.,3.,3.,8.,1.,8., & 1.,6.,2.,6.,2.,7.,3.6D00,7.,3.6D00/ DATA (C(I),I=1,NROW)/0.1D00,0.2D00,0.2D00,0.4D00,0.4D00,0.6D00, & 0.3D00,0.7D00,0.5D00,0.5D00/ F=0.D00 DO I=1,NR S=0.D00 DO J=1,M S=S+(X(J)-A(I,J))**2 ENDDO F=F-1.D00/(S+C(I)) ENDDO RETURN END C ---------------------------------------------------------------- SUBROUTINE PAVIANI(M,X,F) C PAVIANI FUNCTION : MIN F(9.3502,...,9.3502)=45.77847 APPROX C IN THE DOMAIN 2<= X(I) <= 10 FOR I=1,2,...,10. IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(X(I).LE.2.D00.OR.X(I).GE.10.D00) THEN CALL RANDOM(RAND) X(I)=RAND*8+2.D00 ENDIF ENDDO F1=0.D00 F2=1.D00 DO I=1,M F1=F1+ DLOG(X(I)-2.D00)**2+DLOG(10.D00-X(I))**2 F2=F2*X(I) ENDDO F=F1-F2**0.2 RETURN END C ----------------------------------------------------------------- SUBROUTINE BRANIN1(M,X,F) C BRANIN FUNCTION #1 MIN F (1, 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) DO I=1,M IF(DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=(1.D00-2*X(2)+DSIN(4*PI*X(2))/2.D00-X(1))**2+(X(2)- & DSIN(2*PI*X(1))/2.D00)**2 RETURN END C ----------------------------------------------------------------- SUBROUTINE BRANIN2(M,X,F) C BRANIN FUNCTION #2 MIN F (3.1416, 2.25)= 0.397887 APPROX IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) IF(X(1).LT.-5.D00 .OR. X(1).GT.10.D00) THEN CALL RANDOM(RAND) X(1)=RAND*15-5.D00 ENDIF IF(X(2).LT.0.D00 .OR. X(2).GT.15.D00) THEN CALL RANDOM(RAND) X(2)=RAND*15 ENDIF F=(X(2)-5.D00*X(1)**2/(4*PI**2)+5*X(1)/PI-6.D00)**2 + & 10*(1.D00-1.D00/(8*PI))*DCOS(X(1))+10.D00 RETURN END C ----------------------------------------------------------------- SUBROUTINE BOHACHEVSKY1(M,X,F) C BOHACHEVSKY FUNCTION #1 : MIN F (0, 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*200 ENDIF ENDDO F=X(1)**2+2*X(2)**2-0.3D00*DCOS(3*PI*X(1))-0.4D00*DCOS(4*PI*X(2)) & +0.7D00 RETURN END C ----------------------------------------------------------------- SUBROUTINE BOHACHEVSKY2(M,X,F) C BOHACHEVSKY FUNCTION #2 : MIN F (0, 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*200 ENDIF ENDDO F=X(1)**2+2*X(2)**2-0.3D00*DCOS(3*PI*X(1))*DCOS(4*PI*X(2))+0.3D00 RETURN END C ----------------------------------------------------------------- SUBROUTINE BOHACHEVSKY3(M,X,F) C BOHACHEVSKY FUNCTION #3 : MIN F (0, 0) = 0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*200 ENDIF ENDDO F=X(1)**2+2*X(2)**2-0.3D00*DCOS(3*PI*X(1)+4*PI*X(2))+0.3D00 RETURN END C ----------------------------------------------------------------- SUBROUTINE EASOM(M,X,F) C EASOM FUNCTION : 2-VARIABLES, MIN F (PI, PI) = -1. IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) PI=4*DATAN(1.D00) DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*200 ENDIF ENDDO F=-DCOS(X(1))*DCOS(X(2))*DEXP(-(X(1)-PI)**2 -(X(2)-PI)**2) RETURN END C ----------------------------------------------------------------- SUBROUTINE ROSENBROCK(M,X,F) C ROSENBROCK FUNCTION : M VARIABLE; MIN F (1, 1,...,1)=0 IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(X(I).LT.-5.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=RAND*15-5.D00 ENDIF ENDDO F=0.D00 DO I=1,M-1 F=F+ (100.D00*(X(I+1)-X(I)**2)**2 + (X(I)-1.D00)**2) ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE CROSSLEG(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C CROSS-LEGGED TABLE FUNCTION ; -10<= X(I) <=10; M=2 C MIN F(0 , X ) OR F(X, 0) = -1. PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=-(DABS(DSIN(X(1))*DSIN(X(2))*DEXP(DABS(100.D00-(DSQRT & (X(1)**2+X(2)**2)/PI))))+1.D00)**(-.1) RETURN END C ----------------------------------------------------------------- SUBROUTINE CROSS(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C CROSS FUNCTION ; -10<= X(I) <=10; M=2; C MIN F(A, B)=0 APPROX; A, B=1.3494 APPROX OF EITHER SIGN (+ OR -) PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=(DABS(DSIN(X(1))*DSIN(X(2))*DEXP(DABS(100.D00-(DSQRT & (X(1)**2+X(2)**2)/PI))))+1.D00)**(-.1) RETURN END C ----------------------------------------------------------------- SUBROUTINE CROSSINTRAY(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C CROSS IN TRAY FUNCTION ; -10<= X(I) <=10; M=2; C MIN F(A, B)=-20626.1218 APPROX; A, B=1.3494 APPROX OF EITHER SIGN PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=-(DABS(DSIN(X(1))*DSIN(X(2))*DEXP(DABS(100.D00-(DSQRT & (X(1)**2+X(2)**2)/PI))))+1.D00)**(.1) RETURN END C ----------------------------------------------------------------- SUBROUTINE CROWNEDCROSS(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C CROWNED CROSS FUNCTION ; -10<= X(I) <=10; M=2; MIN F = 1 PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=(DABS(DSIN(X(1))*DSIN(X(2))*DEXP(DABS(100.D00- & (DSQRT(X(1)**2+X(2)**2)/PI))))+1.D00)**(.1) RETURN END C ----------------------------------------------------------------- SUBROUTINE TTHOLDER(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C TEST-TUBE HOLDER FUNCTION ; -10<= X(I) <=10; M=2; C MIN F([+/-]1.5706, 0)= -10.8723 PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=-4*DABS(DSIN(X(1))*DCOS(X(2))*DEXP(DABS(DCOS((X(1)**2+X(2)**2)/ & 200)))) RETURN END C ----------------------------------------------------------------- SUBROUTINE HOLDERTABLE(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C HOLDER-TABLE FUNCTION ; -10<= X(I) <=10; M=2; C MIN F ([+/-] 9.64617, [+/-] 9.64617) APPROX = -26.92034 APPROX PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=-DABS(DCOS(X(1))*DCOS(X(2))*DEXP(DABS(1.D00-(DSQRT(X(1)**2+ & X(2)**2)/PI)))) RETURN END C ----------------------------------------------------------------- SUBROUTINE CARROMTABLE(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C CARROM-TABLE FUNCTION ; -10<= X(I) <=10; M=2; C MIN F ([+/-] 9.64617, [+/-] 9.64617) APPROX = -24.15682 APPROX PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=-1.D00/30*(DCOS(X(1))*DCOS(X(2))*DEXP(DABS(1.D00- & (DSQRT(X(1)**2 + X(2)**2)/PI))))**2 RETURN END C ----------------------------------------------------------------- SUBROUTINE PENHOLDER(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C PENHOLDER FUNCTION ; -11<= X(I) <=11; M=2; C MIN F ([+/-] 9.64617, [+/-] 9.64617) APPROX = -0.963535 APPROX PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.11.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*22 ENDIF ENDDO F=-DEXP(-(DABS(DCOS(X(1))*DCOS(X(2))*DEXP(DABS(1.D0-(DSQRT & (X(1)**2+X(2)**2)/PI))))**(-1))) RETURN END C ----------------------------------------------------------------- SUBROUTINE BIRD(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C BIRD FUNCTION ; -2PI<= X(I) <=2PI; M=2; C MIN F (4.70104, 3.15294) APPROX = -106.764537 APPROX OR C MIN F (-1.58214, -3.13024) APPROX = -106.764537 APPROX PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.2*PI) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*4*PI ENDIF ENDDO F=(DSIN(X(1))*DEXP((1.D00-DCOS(X(2)))**2) + & DCOS(X(2))*DEXP((1.D00-DSIN(X(1)))**2))+(X(1)-X(2))**2 RETURN END C ----------------------------------------------------------------- SUBROUTINE CHICHINADZE(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C CHICHINADZE FUNCTION : -30 <=X(I)<= 30; M=2 C MIN F (5.901329, 0.5) = -43.3158621 PI=4*DATAN(1.D00) DO I=1,M IF( DABS(X(I)).GT.30) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*60 ENDIF ENDDO F=X(1)**2-12*X(1)+11.D00+10*DCOS(PI*X(1)/2)+8*DSIN(5*PI*X(1))- & (1.D00/DSQRT(5.D00))*DEXP(-(X(2)-0.5D00)**2/2) RETURN END C ----------------------------------------------------------------- SUBROUTINE MCCORMICK(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C MCCORMICK FUNCTION : -1.5<= X(1)<=4; -3<=X(2)<=4 ; M=2 C MIN F (-0.54719755, -1.54719755) = -1.913223 APPROX IF(X(1).LT. -1.5D00 .OR. X(1) .GT. 4.D00) THEN CALL RANDOM(RAND) X(1)=RAND*5.5D00-1.5D00 ENDIF IF(X(2).LT. -3.D00 .OR. X(2) .GT. 4.D00) THEN CALL RANDOM(RAND) X(2)=RAND*7.D00-3.D00 ENDIF F=DSIN(X(1)+X(2))+(X(1)-X(2))**2-1.5*X(1)+2.5*X(2)+1.D00 RETURN END C ---------------------------------------------------------------- SUBROUTINE FENTONEASON(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C FENTON & EASON FUNCTION FMIN(1.74345, -2.029695) = 1.744152 DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*200 ENDIF ENDDO F=1.2D00+0.1*X(1)**2 +(0.1D00+0.1*X(2)**2)/X(1)**2+ & (.1*X(1)**2*X(2)**2+10.D00)/((X(1)*X(2))**4) RETURN END C ----------------------------------------------------------------- SUBROUTINE WOOD(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C WOOD FUNCTION:FMIN(0.443546,-0.194607,1.466077,2.15115)=1.09485393 DO I=1,M IF(DABS(X(I)).GT.5.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*10 ENDIF ENDDO F1=100*(X(2)+X(1)**2)**2 + (1.D0-X(1))**2 +90*(X(4)-X(3)**2)**2 F2=(1.D0-X(3))**2 +10.1*((X(2)-1.D0)**2+(X(4)-1.D0)**2) F3=19.8*(X(2)-1.D0)*(X(4)-1.D0) F=F1+F2+F3 RETURN END C ----------------------------------------------------------------- SUBROUTINE GLANKWAHMDEE(M,X,F) PARAMETER (N=5) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*),A(N,N), B(N) C ------------------ GLANKWAHMDEE FUNCTION ------------------------ C GLANKWAHMDEE A, LIEBMAN JS AND HOGG GL (1979) "UNCONSTRAINED C DISCRETE NONLINEAR PROGRAMMING. ENGINEERING OPTIMIZATION 4: 95-107 C PARSOPOULOS, KE AND VRAHATIS, MN (2002) RECENT APPROACHES TO C GLOBAL OPTIMIZATION PROBLEMS THROUGH PARTICLE SWARM OPTIMIZATION, C NATURAL COMPUTING 1: 235-306, 2002. REPORT THE BEST OBTAINED C FMIN (0,12,23,17,6)= -737 OR MIN F(0, 11,22,16,6)= -737 C WE GET FMIN(-.232, 11.489, 22.273, 16.540, 6.115) = -739.822991 C ------------------------------------------------------------------ DATA ((A(I,J),J=1,N),I=1,N) /35,-20,-10,32,-10,-20, 40,-6,-31,32, & -10,-6,11,-6,-10,32,-31,-6,38,-20,-10,32,-10,-20,31/ DATA (B(J),J=1,N) /-15,-27,-36,-18,-12/ C ----------------------------------------------------------------- DO I=1,M IF(DABS(X(I)).GT.100.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*200 ENDIF ENDDO F=0.D0 DO J=1,M F=F+B(J)*X(J) ENDDO DO I=1,M C=0.D0 DO J=1,M C=C+X(J)*A(J,I) ENDDO F=F+C*X(I) ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE FLETCHER(M,X,F) C FLETCHER-POWELL FUNCTION, M <= 10, ELSE IT IS VERY MUCH SLOW C SOLUTION: MIN F = 0 FOR X=(C1, C2, C3,...,CM) PARAMETER(N=10) ! FOR DIMENSION OF DIFFERENT MATRICES AND VECTORS IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*),A(N,N),B(N,N),AA(N),BB(N),AL(N),C(N),C1(N) PI=4*DATAN(1.D00) C GENERATE A(I,J) AND B(I,J) BETWEEN (-100, 100) RANDOMLY. C C(I) = BETWEEN (-PI, PI) IS EITHER GIVEN OR RANDOMLY GENERATED. C DATA (C(I),I=1,10)/1,2,3,-3,-2,-1,0,1,2,3/ ! BETWEEN -PI AND PI DATA (C1(I),I=1,N)/-3,-3.02,-3.01,1,1.03,1.02,1.03,-.08,.001,3/ C DATA (C1(I),I=1,N)/0,0,0,0,0,0,0,0,0,0/ ! ANOTHER EXAMPLE C1 = 0 NC=0 ! DEFINE NC HERE 0 OR 1 OR 2 C IF NC=0, C1 FROM DATA IS USED (THAT IS FIXED C); C IF NC=1, C IS MADE FROM C1 BY ADDING RANDOM PART - THAT IS C=C1+R C IF NC=2 THEN C IS PURELY RANDOM THAT IS C= 0 + R C IN ANY CASE C LIES BETWEEN -PI AND PI. C ---------------------------------------------------------------- C FIND THE MAX MAGNITUDE ELEMENT IN C1 VECTOR (UPTO M ELEMENTS) CMAX=DABS(C1(1)) DO J=2,M IF(DABS(C1(J)).GT.CMAX) CMAX=DABS(C1(J)) ENDDO RANGE=PI-CMAX C ----------------------------------------------------------------- DO J=1,M DO I=1,M CALL RANDOM(RAND) A(I,J)=(RAND-0.5D00)*200.D00 CALL RANDOM(RAND) B(I,J)=(RAND-0.5D00)*200.D00 ENDDO IF(NC.EQ.0) AL(J)=C1(J) ! FIXED OR NON-STOCHASTIC C IF(NC.EQ.1) THEN CALL RANDOM(RAND) AL(J)=C1(J)+(RAND-0.5D0)*2*RANGE ! A PART FIXED, OTHER STOCHASTIC ENDIF IF(NC.EQ.2) THEN CALL RANDOM(RAND) AL(J)=(RAND-0.5D00)*2*PI ! PURELY STOCHASTIC ENDIF ENDDO DO I=1,M AA(I)=0.D00 DO J=1,M AA(I)=AA(I)+A(I,J)*DSIN(AL(J))+B(I,J)*DCOS(AL(J)) ENDDO ENDDO C ----------------------------------------------------------------- DO I=1,M IF(DABS(X(I)).GT.PI) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*2*PI ENDIF ENDDO DO I=1,M BB(I)=0.D00 DO J=1,M BB(I)=BB(I)+A(I,J)*DSIN(X(J))+B(I,J)*DCOS(X(J)) ENDDO ENDDO F=0.D00 DO I=1,M F=F+(AA(I)-BB(I))**2 ENDDO RETURN END C---------------------------------------------------------------------- SUBROUTINE POWELL(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C POWELL FUNCTION ; -4<= X(I) <=5; M=A MULTIPLE OF 4; C MIN F = 0.0 DO I=1,M IF(X(I).LT.-4.D00 .OR. X(I).GT.5.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*9+.5D00 ENDIF ENDDO M4=M/4 F=0.D00 DO I=1,M4 J=4*I F=F+(X(J-3)+10*X(J-2))**2+5*(X(J-1)-X(J))**2+(X(J-2)-X(J-1))**4 + & 10*(X(J-3)-X(J))**4 ENDDO RETURN END C---------------------------------------------------------------------- SUBROUTINE HARTMANN(M,X,F) PARAMETER (N=4) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*),P(N,3),A(N,3),C(N) C HARTMANN FUNCTION C MIN F = -3.86278 APPROX : 0 < X < 1. DATA ((P(I,J),J=1,3),I=1,4) /0.6890,0.1170,0.2673,0.4699,0.4387, & 0.7470,0.1091,0.8732,0.5547,0.0381,0.5743,0.8828/ DATA ((A(I,J),J=1,3),I=1,4) /3.0,10.0,30.0,0.1,10.0,35.0,3.0, & 10.0,30.0,0.1,10.0,35.0/ DATA (C(J),J=1,4) /1.0,1.2,3.0,3.2/ DO I=1,M IF(X(I).LE.0.D00 .OR. X(I).GE.1.D00) THEN CALL RANDOM(RAND) X(I)=RAND ENDIF ENDDO F=0.D00 DO I=1,N S=0.D00 DO J=1,M S=S+A(I,J)*(X(J)-P(I,J))**2 ENDDO F=F+C(I)*DEXP(-S) ENDDO F=-F RETURN END C---------------------------------------------------------------------- SUBROUTINE COLVILLE(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) C COLVILLE FUNCTION ; -10<= X(I) <=10; M= 4; C MINF(1,1,1,1)= 0.0 DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO F=100*(X(1)**2-X(2))**2 + (X(1)-1.D00)**2 +(X(3)-1.D00)**2+ & 90*(X(3)**2-X(4))**2+10.1*((X(2)-1.D0)**2+(X(4)-1.D00)**2)+ & 19.8*(X(2)-1.D00)*(X(4)-1.D00) RETURN END C ----------------------------------------------------------------- SUBROUTINE HIMMELBLAU(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) NF=0 ! SET NF = 0 MULTIPLE OPTIMA NF=1 SINGLE OPTIMUM DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO C HIMMELBLAU FUNCTION. IT HAS MULTIPLE (4) GLOBAL OPTIMA : MINF=0 C (3, 2); (-2.8051, 3.1313); (3.5744, -1.8481); (-3.779, -3.283) IF(NF.EQ.0) THEN F= (X(1)**2+X(2)-11)**2+ (X(1)+X(2)**2-7)**2 RETURN ENDIF IF(NF.EQ.1) THEN C MODIFIED HIMMELBLAU FUNCTION. IT HAS ONLY ONE GLOBAL OPTIMUM C MINF=0 AT (3,2) F= (X(1)**2+X(2)-11)**2+(X(1)+X(2)**2-7)**2+0.1D00*((X(1)-3)**2 + 1 (X(2)-2)**2) ENDIF RETURN END C ----------------------------------------------------------------- SUBROUTINE BEALE(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(X(I).LT.-4.500 .OR. X(I).GT.4.500) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*9 ENDIF ENDDO C BEALE FUNCTION : MINF =0 AT (3, 0.5) F1=(1.5D00-X(1)+X(1)*X(2))**2 F2=(2.25D00-X(1)+X(1)*X(2)**2)**2 F3=(2.625D00-X(1)+X(1)*X(2)**3)**2 F=F1+F2+F3 RETURN END C ----------------------------------------------------------------- SUBROUTINE BOOTH(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO C BOOTH FUNCTION MINF (1,3)=0 F=(X(1)+2*X(2)-7.0D00)**2+(2*X(1)+X(2)-5.0D00)**2 RETURN END C ----------------------------------------------------------------- SUBROUTINE HUMP(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(X(I).LT.-5.D00 .OR. X(I).GT.5.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*10 ENDIF ENDDO C HUMP FUNCTION MINF (0.0898, -0.7127) = -1.0316 F=4*X(1)**2 - 2.1D00*X(1)**4 + (X(1)**6)/3.D00 + X(1)*X(2) - & 4*X(2)**2 + 4*X(2)**4 RETURN END C ----------------------------------------------------------------- SUBROUTINE MATYAS(M,X,F) IMPLICIT DOUBLE PRECISION (A-H, O-Z) DIMENSION X(*) DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-0.5D00)*20 ENDIF ENDDO C MATYAS FUNCTION MIN F (0, 0) = 0 F=0.26D00*(X(1)**2 + X(2)**2) - 0.48D00*X(1)*X(2) RETURN END C ----------------------------------------------------------------- SUBROUTINE MISHRA_1(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C MIN F (1, 1, ..., 1) =2 DO I=1,M IF(X(I).LT.0.D00 .OR. X(I).GT.1.D00) THEN CALL RANDOM(RAND) X(I)=RAND ENDIF ENDDO S=0.D00 DO I=1,M-1 S=S+X(I) ENDDO X(M)=(M-S) F=(1.D00+X(M))**X(M) RETURN END C ----------------------------------------------------------------- SUBROUTINE MISHRA_2(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C MIN F (1, 1, ..., 1) =2 DO I=1,M IF(X(I).LT.0.D00 .OR. X(I).GT.1.D00) THEN CALL RANDOM(RAND) X(I)=RAND ENDIF ENDDO S=0.D00 DO I=1,M-1 S=S+(X(I)+X(I+1))/2.D00 ENDDO X(M)=(M-S) F=(1.D00+X(M))**X(M) RETURN END C ----------------------------------------------------------------- SUBROUTINE ZAKHAROV(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C ZAKHAROV FUNCTIONMIN MINF = (0, 0, ..., 0) =0 DO I=1,M IF(X(I).LT.-5.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*15 + 2.5D0 ENDIF ENDDO F1=0.D00 F2=0.D00 DO I=1, M F1=F1+ X(I)**2 F2=F2 + I*X(I)/2.D00 ENDDO F=F1+F2**2+F2**4 RETURN END C ----------------------------------------------------------------- SUBROUTINE MULTIMOD(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C MULTIMODAL FUNCTION MINF = (0,0)= -1 : M=2 DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*20 ENDIF ENDDO C A TYPICAL MULTIMODAL FUNCTION F=-DCOS(X(1))*DCOS(X(2))*DEXP(-(X(1)**2 + X(2)**2)**2/4.D00) RETURN END C ----------------------------------------------------------------- SUBROUTINE NONLIN(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C NONLINEAR MULTIMODAL FUNCTION MINF = 0 DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*20 ENDIF ENDDO F=0.D0 DO I=2,M F=F+DCOS(DABS(X(I)-X(I-1)) / DABS(X(I-1)+X(I))) ENDDO F=F+(M-1.D00) C IF 0.001*X(1) IS ADDED TO F, IT BECOMES UNIMODAL C F=F+0.001*X(1) RETURN END C ------------------------------------------------------------------ SUBROUTINE QUADRATIC(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C QUADRATIC FUNCTION MINF (0.19388, 0.48513) = -3873.7243 (M=2) DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D00) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*200 ENDIF ENDDO F=-3803.84-138.08*X(1)-232.92*X(2)+128.08*X(1)**2+203.64*X(2)**2+ & 182.25*X(1)*X(2) RETURN END C ----------------------------------------------------------------- SUBROUTINE TRIGON(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C TRIGON FUNCTION F MIN (0, 0, 0,..., 0) OR (PI, 0, 0, ...,0) =0 PI=4*DATAN(1.D00) DO I=1,M IF(X(I).LT.0.D00 .OR. X(I).GT.PI) THEN CALL RANDOM(RAND) X(I)=RAND*PI ENDIF ENDDO F=0.D00 DO I=2,M F=F+(DCOS(I+0.D00)*DSIN(X(I)-X(I-1))**2 + & (I-1.D00)*(1.D0-DCOS(X(I))))**2 ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE WAVY1(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C WAVY-1 FUNCTION F MIN (24, 24,...,24)=0 DO I=1,M IF(X(I).LT.-100.D00 .OR. X(I).GT.100.D0) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*200 ENDIF ENDDO F=0.D00 DO I=1,M F=F+DABS(2*(X(I)-24.D0)+(X(I)-24.D0)*DSIN(X(I)-24.D0)) ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE WAVY2(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C WAVY-2 FUNCTION F MIN (0,0,...,0)=0 DO I=1,M IF(X(I).LT.-100.D00 .OR. X(I).GT.100.D0) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*200 ENDIF ENDDO F=0.D00 DO I=1,M F=F+X(I)**6*(2.D0+DSIN(1.D0/X(I))) ENDDO RETURN END C ----------------------------------------------------------------- SUBROUTINE TREFETHEN(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C TREFETHEN FUNCTION:FMIN(-0.02440307923,0.2106124261)=-3.3068686475 DO I=1,M IF(X(I).LT.-10.D00 .OR. X(I).GT.10.D0) THEN CALL RANDOM(RAND) X(I)=(RAND-.5D0)*20 ENDIF ENDDO F=0.D00 C THE JAN-FEB 2002 ISSUE OF SIAM NEWS CONTAINED THE FOLLOWING C CHALLENGE FROM L. N. TREFETHEN OF OXFORD UNIVERSITY. C FMIN = F(-0.02440307923, 0.2106124261)= -3.3068686475 F=DEXP(DSIN(50*X(1))) + DSIN(60*DEXP(X(2))) + DSIN(70*DSIN(X(1))) & + DSIN(DSIN(80*X(2))) - DSIN(10*(X(1)+X(2))) + & 1.D0/4*(X(1)**2 + X(2)**2) RETURN END C ----------------------------------------------------------------- SUBROUTINE ALPINE(M,X,F) IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON /RNDM/IU,IV INTEGER IU,IV DIMENSION X(*) C ALPINE FUNCTION F MIN (7.917, 7.917, ..., 7.917)= -2.808131 APPROX C THE DOMAIN : X IN [-10, 10]. C NOTE: IN THE ORIGINAL FUNCTION MIN F = -(2.808131)^M DO I=1,M IF(X(I).LT.0.D00 .OR. X(I).GT.10.D0) THEN CALL RANDOM(RAND) X(I)=RAND*10.D0 ENDIF ENDDO F1=1.D0 F2=1.D0 DO I=1,M F1=F1*DSIN(X(I)) F2=F2*X(I) ENDDO F=-DEXP(DLOG(F1*DSQRT(F2))/M) RETURN END