1
- # GA seclections
1
+ # GA selections
2
2
# ==============
3
3
4
4
# Rank-based fitness assignment
@@ -7,12 +7,14 @@ function ranklinear(sp::Float64)
7
7
@assert 1.0 <= sp <= 2.0 " Selective pressure has to be in range [1.0, 2.0]."
8
8
function rank (fitness:: Vector{<:Real} , N:: Int )
9
9
λ = length (fitness)
10
- idx = sortperm (fitness)
11
- ranks = zeros (λ)
10
+ rank = sortperm (fitness)
11
+
12
+ prob = Vector {Float64} (undef, λ)
12
13
for i in 1 : λ
13
- ranks [i] = ( 2 - sp + 2 * (sp - 1 )* (idx [i] - 1 ) / (λ - 1 ) ) / λ
14
+ prob [i] = ( 2.0 - sp + 2.0 * (sp - 1.0 )* (rank [i] - 1.0 ) / (λ - 1.0 ) ) / λ
14
15
end
15
- return pselection (ranks, N)
16
+
17
+ return pselection (prob, N)
16
18
end
17
19
return rank
18
20
end
21
23
function uniformranking (μ:: Int )
22
24
function uniformrank (fitness:: Vector{<:Real} , N:: Int )
23
25
λ = length (fitness)
24
- idx = sortperm (fitness, rev= true )
25
- @assert μ < λ " μ should be less then $(λ) "
26
- ranks = similar (fitness, Float64)
27
- for i in 1 : μ
28
- ranks[idx[i]] = 1 / μ
29
- end
30
- return pselection (ranks, N)
26
+ @assert μ < λ " μ should equal $(λ) "
27
+
28
+ prob = fill (1 / μ, μ)
29
+ return pselection (prob, N)
31
30
end
32
31
return uniformrank
33
32
end
40
39
41
40
# Stochastic universal sampling (SUS)
42
41
function sus (fitness:: Vector{<:Real} , N:: Int )
42
+ selected = Vector {Int} (undef, N)
43
+
43
44
F = sum (fitness)
44
45
P = F/ N
46
+
45
47
start = P* rand ()
46
48
pointers = [start+ P* i for i = 0 : (N- 1 )]
47
- selected = Vector {Int} (undef, N)
48
49
i = c = 1
49
50
for P in pointers
50
51
while sum (fitness[1 : i]) < P
@@ -53,6 +54,7 @@ function sus(fitness::Vector{<:Real}, N::Int)
53
54
selected[c] = i
54
55
c += 1
55
56
end
57
+
56
58
return selected
57
59
end
58
60
0 commit comments