def generateDummySolution(self, max_tries): tries_counter = 0 while tries_counter < max_tries: free_cities = self.problem.cities[:] base_city = self.problem.cities[0] problem_solution = Solution() for current_car_index in range(self.problem.cars): if len(free_cities) > 0: car_cities = [] keep_searching = True while len(free_cities) > 0 and keep_searching: random_city_index = randrange(len(free_cities)) if car_cities is None: car_cities_candidate = [] else: car_cities_candidate = car_cities[:] car_cities_candidate.append(free_cities[random_city_index]) if self.compute_cities_demand(car_cities_candidate) <= self.problem.capacity: car_cities = car_cities_candidate del free_cities[random_city_index] else: keep_searching = False if len(car_cities) > 0: problem_solution.add_single_car_solution(Solution.SingleCarSolution(base_city, car_cities)) else: return problem_solution if len(free_cities) == 0 and problem_solution.is_valid_solution(self.problem): # print("Initial solution found in " + str(tries_counter + 1) + " try!") return problem_solution tries_counter = tries_counter + 1 raise Exception('Valid solution can\'t be found')