implement elitism_survivor_selection

This commit is contained in:
2026-01-31 12:14:57 +01:00
parent 5c66bdb5cd
commit 7703846db9

View File

@@ -5,6 +5,7 @@ import "core:fmt"
import "core:math"
import "core:math/rand"
import "core:os"
import "core:slice"
import "core:strconv"
import "core:strings"
@@ -212,6 +213,33 @@ inversion_mutation :: proc(chrom: ^Chromosome) {
}
}
elitism_survivor_selection :: proc(
parents: ^Population,
offspring: ^Population,
parent_fitnesses: []int,
offspring_fitnesses: []int,
) -> (
res: Population,
) {
combined_size := POPULATION_SIZE * 2
combined_fitnesses := make([]int, combined_size)
defer delete(combined_fitnesses)
copy(combined_fitnesses[:POPULATION_SIZE], parent_fitnesses)
copy(combined_fitnesses[POPULATION_SIZE:], offspring_fitnesses)
slice.sort(combined_fitnesses)
for &s, i in res {
if i < POPULATION_SIZE {
s = parents[i]
} else {
s = offspring[i - POPULATION_SIZE]
}
}
return
}
main :: proc() {
items, ok := read_data(DATA_FILE)
if !ok {