implement two_point_crossover
This commit is contained in:
@@ -126,6 +126,30 @@ single_point_crossover :: proc(parent1, parent2: ^Chromosome) -> (child1, child2
|
||||
return
|
||||
}
|
||||
|
||||
two_point_crossover :: proc(parent1, parent2: ^Chromosome) -> (child1, child2: Chromosome) {
|
||||
point1 := rand.int_max(NUMBER_OF_ITEMS)
|
||||
point2 := rand.int_max(NUMBER_OF_ITEMS)
|
||||
|
||||
if point1 > point2 {
|
||||
point1, point2 = point2, point1
|
||||
}
|
||||
|
||||
child1 = bit_array.create(NUMBER_OF_ITEMS)^
|
||||
child2 = bit_array.create(NUMBER_OF_ITEMS)^
|
||||
|
||||
for i in 0 ..< NUMBER_OF_ITEMS {
|
||||
if i >= point1 && i < point2 {
|
||||
bit_array.set(&child1, i, bit_array.get(parent2, i))
|
||||
bit_array.set(&child2, i, bit_array.get(parent1, i))
|
||||
} else {
|
||||
bit_array.set(&child1, i, bit_array.get(parent1, i))
|
||||
bit_array.set(&child2, i, bit_array.get(parent2, i))
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
main :: proc() {
|
||||
items, ok := read_data(DATA_FILE)
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user