1 SUBROUTINE ga_sp(fcn, nopt, fvec, best, filename, nfev, iflag,
2 1 max_num_processors, myid)
5 USE mpi_params,
ONLY: master
10 REAL(rprec),
DIMENSION(nopt) :: fvec
12 INTEGER :: kount, npossum, ig2sum, istart, istore
13 INTEGER :: ncross, ipick, mate1, mate2, istat
14 INTEGER :: i, j, nfev, iflag, max_num_processors, myid
15 REAL(rprec),
INTENT(in) :: best
16 REAL(rprec),
SAVE :: fbar, evals
17 CHARACTER(LEN=*) :: filename
18 CHARACTER(LEN=LEN(filename)+10) :: temp
23 CALL ga_initial(istart,npossum,ig2sum,filename,myid)
30 IF (myid .eq. master)
THEN
31 temp =
"ga_out." // filename
32 CALL safe_open(iunit_ga_out, istat, trim(temp),
33 1
'unknown',
'formatted')
37 DO 20 i=istart,maxgen+istart-1
39 IF (myid .eq. master)
THEN
41 WRITE (iunit_ga_out,1111) i
46 WRITE(6,*)
'pre ga_evalout', max_num_processors
47 WRITE(6,*) fbar,best,nopt,nfev,max_num_processors,iflag
49 CALL ga_evalout(fbar, best, fcn, nopt, fvec, nfev,
50 > max_num_processors, iflag, myid)
55 IF (npopsiz.eq.1 .or. iskip.ne.0)
THEN
56 IF (myid .eq. master)
CLOSE(iunit_ga_out)
57 CALL ga_restart(i,istart,kount,filename, myid)
62 IF (iniche.ne.0)
CALL ga_niche(myid)
67 DO 45 j=1,npopsiz,nchild
70 CALL ga_selectn(ipick,j,mate1,mate2)
73 CALL crosovr(ncross,j,mate1,mate2)
76 IF (myid .eq. master)
THEN
78 WRITE(iunit_ga_out,1225) ncross
82 IF (microga.eq.0)
CALL ga_mutate (myid)
86 CALL ga_newgen(npossum,ig2sum,myid)
89 IF (microga.ne.0)
CALL ga_micro(i,npossum,ig2sum,myid)
92 CALL ga_restart(i,istart,kount,filename,myid)
97 IF (myid .eq. master)
THEN
98 WRITE(iunit_ga_out,3000)
100 evals = npopsiz*geni(i)
101 WRITE(iunit_ga_out,3100) geni(i),evals,genavg(i),genmax(i)
106 1050
FORMAT(1x,
' Binary Code',16x,
'Parameter Values and Fitness')
107 1111
FORMAT(//,
'################# Generation',i5,
108 1
' #################')
109 1225
FORMAT(/
' Number of Crossovers =',i5)
110 3000
FORMAT(2x//
'Summary of Output'/
111 + 2x,
'Generation Evaluations Avg.Fitness Best Fitness')
112 3100
FORMAT(2x,3(e10.4,4x),e11.5)