V3FIT
crosovr.f
1  SUBROUTINE crosovr(ncross,j,mate1,mate2)
2 c#######################################################################
3 c
4 c Subroutine for crossover between the randomly selected pair.
5  USE stel_kinds
6  USE ga_mod
7  IMPLICIT NONE
8  INTEGER :: ncross, j, mate1, mate2
9  INTEGER :: n, icross
10  REAL(rprec) :: rand
11  SAVE
12 c
13  IF (iunifrm.eq.0) THEN
14 c Single-point crossover at a random chromosome point.
15  CALL ran3(1,rand)
16  IF(rand.gt.pcross) GOTO 69
17  ncross=ncross+1
18  CALL ran3(1,rand)
19  icross=2+int((nchrome-1)*rand)
20  DO 50 n=icross,nchrome
21  ichild(n,j)=iparent(n,mate2)
22  IF(nchild.eq.2) ichild(n,j+1)=iparent(n,mate1)
23  50 CONTINUE
24  ELSE
25 c Perform uniform crossover between the randomly selected pair.
26  DO 60 n=1,nchrome
27  CALL ran3(1,rand)
28  IF(rand.le.pcross) THEN
29  ncross=ncross+1
30  ichild(n,j)=iparent(n,mate2)
31  IF(nchild.eq.2) ichild(n,j+1)=iparent(n,mate1)
32  END IF
33  60 CONTINUE
34  END IF
35  69 CONTINUE
36 
37  END SUBROUTINE crosovr