C MAIN PROGRAM : PROVIDES TO USE C REPULSIVE PARTICLE SWARM METHOD FOR CURVE FITTING C PROGRAM BY PROF. SK MISHRA C DEPARTMENT OF ECONOMICS C NORTH-EASTERN HILL UNIVERSITY, SHILLONG (INDIA) C ----------------------------------------------------------------- C ADJUST THE PARAMETERS SUITABLY IN SUBROUTINES RPS C WHEN THE PROGRAM ASKS FOR PARAMETERS, FEED THEM SUITABLY C ----------------------------------------------------------------- PROGRAM RPSFIT IMPLICIT DOUBLE PRECISION (A-H, O-Z) COMMON /KFF/KF,NFCALL ! FUNCTION CODE AND NO. OF FUNCTION CALLS COMMON /CFIT/YDAT(500),XDAT(500,10),ALIM(2,20),OFILE C ! DIMENSIONS MAY BE INCREASED, IF NEEDED. THIS RELATES TO THE C DATASET OF THE USER. NOTE: THIS HAS TO BE ACCORDINGLY CHANGED IN C THE SUBROUTINE CURVEFIT (LOCATED AT THE LAST SECTION) C OFILE IS THE OUTPUT FILE TO BE SPECIFIED BY THE USER ON RUN OF PGM CHARACTER *70 METHOD(1),OFILE DIMENSION XX(1,100),KKF(1),MM(1),FMINN(1) DIMENSION X(100)! X IS THE DECISION VARIABLE X IN F(X) TO MINIMIZE C M IS THE DIMENSION OF THE PROBLEM, KF IS TEST FUNCTION CODE AND C FMIN IS THE MIN VALUE OF F(X) OBTAINED FROM RPS WRITE(*,*)'ADJUST THE PARAMETERS SUITABLY IN SUBROUTINES RPS' WRITE(*,*)'==================== WARNING =============== ' METHOD(1)=' : REPULSIVE PARTICLE SWARM' WRITE(*,*)'==========REPULSIVE PARTICLE SWARM PROGRAM ==========' CALL RPS(M,X,FMINRPS) ! CALLS RPS AND RETURNS OPTIMAL X AND FMIN FMIN=FMINRPS DO J=1,M XX(1,J)=X(J) ENDDO KKF(1)=KF MM(1)=M FMINN(1)=FMIN WRITE(*,*)' ' WRITE(*,*)' ' OPEN(8,FILE=OFILE) WRITE(8,*)'BEST ESTIMATED PARAMETERS ARE: ' WRITE(8,*)(XX(1,J),J=1,M) WRITE(8,*)'LEAST SUM OF ERRORS SQUARED = ',FMINN(1) WRITE(8,*)'------------------------------------------------------' CLOSE(8) WRITE(*,*)'---------------------- FINAL RESULTS -----------------' WRITE(*,*)'------------------------------------------------------' WRITE(*,*)'BEST ESTIMATED PARAMETERS ARE: ' WRITE(*,*)(XX(1,J),J=1,M) WRITE(*,*)'LEAST SUM OF ERRORS SQUARED = ',FMINN(1) WRITE(*,*)'------------------------------------------------------' WRITE(*,*)'/////////////////////////////////////////////////////' WRITE(*,*)'PROGRAM ENDED' END C ----------------------------------------------------------------- C RANDOM NUMBER GENERATOR (UNIFORM BETWEEN 0 AND 1 - BOTH EXCLUSIVE) SUBROUTINE RANDOM(RAND) DOUBLE PRECISION RAND COMMON /RNDM/IU,IV INTEGER IU,IV IV=IU*65539 IF(IV.LT.0) THEN IV=IV+2147483647+1 ENDIF RAND=IV IU=IV RAND=RAND*0.4656613E-09 RETURN END C ----------------------------------------------------------------- SUBROUTINE FSELECT(KF,M,FTIT) C THE PROGRAM REQUIRES INPUTS FROM THE USER ON THE FOLLOWING ------ C (1) FUNCTION CODE (KF), (2) NO. OF VARIABLES IN THE FUNCTION (M); CHARACTER *70 TIT(1),FTIT WRITE(*,*)'----------------------------------------------------' DATA TIT(1)/'KF=1 CURVE FITTING BY RPS : DECISION VARIABLES, M=?'/ C ----------------------------------------------------------------- KF=1 WRITE(*,*)TIT(1) WRITE(*,*)'----------------------------------------------------' WRITE(*,*)'SPECIFY HOW MANY DECISION VARIABLES [M] ?' READ(*,*) M FTIT=TIT(KF) ! STORE THE NAME OF THE CHOSEN FUNCTION IN FTIT RETURN END C ----------------------------------------------------------------- C =================== REPULSIVE PARTICLE SWARM ==================== SUBROUTINE RPS(M,BST,FMINIM) 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=200,NN=40,MX=100,NSTEP=15,ITRN=100000,NSIGMA=1,ITOP=3) PARAMETER (NPRN=500) ! ECHOS RESULTS AT EVERY 500 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 INTEGER IU,IV CHARACTER *70 FTIT DIMENSION X(N,MX),V(N,MX),A(MX),VI(MX) 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,EPSI /.5D0,.5D0,5.D-05,0.2D0,1.D-02,1.D-10/ C ----------------------------------------------------------------- C CALL SUBROUTINE FOR CHOOSING FUNCTION (KF) AND ITS DIMENSION (M) CALL FSELECT(KF,M,FTIT) C ----------------------------------------------------------------- GGBEST=1.D30 ! TO BE USED FOR TERMINATION CRITERION LCOUNT=0 NFCALL=0 WRITE(*,*)'4-DIGITS SEED FOR RANDOM NUMBER GENERATION' WRITE(*,*)'A FOUR-DIGIT POSITIVE ODD INTEGER, SAY, 1171' READ(*,*) IU 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)*1000 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(<