|
10 | 10 | SelElitism{},
|
11 | 11 | SelTournament{3},
|
12 | 12 | SelRoulette{},
|
| 13 | + SelStochRoulette{}, |
13 | 14 | }
|
14 | 15 | invalidSelectors = []Selector{
|
15 | 16 | SelTournament{0},
|
@@ -39,23 +40,23 @@ func TestSelectionSize(t *testing.T) {
|
39 | 40 |
|
40 | 41 | func TestSelectionUniqueness(t *testing.T) {
|
41 | 42 | var (
|
42 |
| - rng = newRand() |
43 |
| - indis = newIndividuals(3, NewVector, rng) |
| 43 | + rng = newRand() |
| 44 | + indis = newIndividuals(3, NewVector, rng) |
44 | 45 | selectors = []Selector{
|
45 | 46 | SelTournament{
|
46 | 47 | NContestants: 2,
|
47 | 48 | },
|
48 | 49 | SelElitism{},
|
49 | 50 | }
|
50 | 51 | numIterations = 500
|
51 |
| - anyNotUnique = false |
| 52 | + anyNotUnique = false |
52 | 53 | )
|
53 | 54 | for _, selector := range selectors {
|
54 | 55 | for i := 0; i < numIterations; i++ {
|
55 |
| - var selected, _, _= selector.Apply(2, indis, rng) |
56 |
| - var unique= false |
57 |
| - var first= selected[0].Genome.(Vector) |
58 |
| - var second= selected[1].Genome.(Vector) |
| 56 | + var selected, _, _ = selector.Apply(2, indis, rng) |
| 57 | + var unique = false |
| 58 | + var first = selected[0].Genome.(Vector) |
| 59 | + var second = selected[1].Genome.(Vector) |
59 | 60 | for index := range first {
|
60 | 61 | if first[index] != second[index] {
|
61 | 62 | unique = true
|
@@ -136,6 +137,21 @@ func TestSelRoulette(t *testing.T) {
|
136 | 137 | }
|
137 | 138 | }
|
138 | 139 |
|
| 140 | +func TestSelStochRoulette(t *testing.T) { |
| 141 | + var ( |
| 142 | + rng = newRand() |
| 143 | + indis = newIndividuals(30, NewVector, rng) |
| 144 | + sel = SelStochRoulette{} |
| 145 | + ) |
| 146 | + indis.Evaluate(false) |
| 147 | + for _, n := range []uint{0, 1, 10, 30} { |
| 148 | + var selected, _, _ = sel.Apply(n, indis, rng) |
| 149 | + if len(selected) != int(n) { |
| 150 | + t.Error("SelStochRoulette didn't select the right number of individuals") |
| 151 | + } |
| 152 | + } |
| 153 | +} |
| 154 | + |
139 | 155 | // TestSelectorsValidate checks that each selector's Validate method doesn't
|
140 | 156 | // return an error in case of a valid model and that it does for invalid models.
|
141 | 157 | func TestSelectorsValidate(t *testing.T) {
|
|
0 commit comments