Skip to content

Commit

Permalink
crossover: add a crossover function with probability
Browse files Browse the repository at this point in the history
  • Loading branch information
guofei9987 committed Jun 27, 2021
1 parent ae75a37 commit c9819d1
Showing 1 changed file with 16 additions and 1 deletion.
17 changes: 16 additions & 1 deletion sko/operators/crossover.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import numpy as np

__all__ = ['crossover_1point', 'crossover_2point', 'crossover_2point_bit', 'crossover_pmx']
__all__ = ['crossover_1point', 'crossover_2point', 'crossover_2point_bit', 'crossover_pmx', 'crossover_2point_prob']


def crossover_1point(self):
Expand Down Expand Up @@ -46,6 +46,21 @@ def crossover_2point_bit(self):
return self.Chrom


def crossover_2point_prob(self, crossover_prob):
'''
2 points crossover with probability
'''
Chrom, size_pop, len_chrom = self.Chrom, self.size_pop, self.len_chrom
for i in range(0, size_pop, 2):
if np.random.rand() < crossover_prob:
n1, n2 = np.random.randint(0, self.len_chrom, 2)
if n1 > n2:
n1, n2 = n2, n1
seg1, seg2 = self.Chrom[i, n1:n2].copy(), self.Chrom[i + 1, n1:n2].copy()
self.Chrom[i, n1:n2], self.Chrom[i + 1, n1:n2] = seg2, seg1
return self.Chrom


# def crossover_rv_3(self):
# Chrom, size_pop = self.Chrom, self.size_pop
# i = np.random.randint(1, self.len_chrom) # crossover at the point i
Expand Down

0 comments on commit c9819d1

Please sign in to comment.