RandomSplitCrossover.py 1010 B

1234567891011121314151617181920212223242526272829303132
  1. # main imports
  2. import random
  3. import sys
  4. # module imports
  5. from .Crossover import Crossover
  6. from ...solutions.BinarySolution import BinarySolution
  7. from ...solutions.Solution import Solution
  8. class RandomSplitCrossover(Crossover):
  9. def apply(self, solution):
  10. size = solution.size
  11. # copy data of solution
  12. firstData = solution.data.copy()
  13. # get best solution from current algorithm
  14. secondData = self.algo.bestSolution.data.copy()
  15. splitIndex = random.randint(0, len(secondData))
  16. if random.uniform(0, 1) > 0.5:
  17. firstData[splitIndex:(size - 1)] = firstData[splitIndex:(size - 1)]
  18. currentData = firstData
  19. else:
  20. secondData[splitIndex:(size - 1)] = firstData[splitIndex:(size -
  21. 1)]
  22. currentData = secondData
  23. # create solution of same kind with new data
  24. return globals()[type(solution).__name__](currentData, size)