def cross(self, p1, p2): board = Board() split = random.randint(0, p1.board.shape()[0]) for i in range(split): board.set_row(i, p1.board.get_row(i)) for i in range(split, p1.board.shape()[0]): board.set_row(i, p2.board.get_row(i)) board.invariants = InvariantsMerger.merge_invariants(p1, p2, self.__area_function(split)) genotype = BoardGenotype(board) return genotype