예제 #1
0
    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')