Ant colony algorithm main function >>> main(cities=cities, ants_num=10, iterations_num=20, ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) ([0, 1, 2, 3, 4, 5, 6, 7, 0], 37.909778143828696) >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, .
(
cities: dict[int, list[int]],
ants_num: int,
iterations_num: int,
pheromone_evaporation: float,
alpha: float,
beta: float,
q: float, # Pheromone system parameters Q, which is a constant
)
| 27 | |
| 28 | |
| 29 | def main( |
| 30 | cities: dict[int, list[int]], |
| 31 | ants_num: int, |
| 32 | iterations_num: int, |
| 33 | pheromone_evaporation: float, |
| 34 | alpha: float, |
| 35 | beta: float, |
| 36 | q: float, # Pheromone system parameters Q, which is a constant |
| 37 | ) -> tuple[list[int], float]: |
| 38 | """ |
| 39 | Ant colony algorithm main function |
| 40 | >>> main(cities=cities, ants_num=10, iterations_num=20, |
| 41 | ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) |
| 42 | ([0, 1, 2, 3, 4, 5, 6, 7, 0], 37.909778143828696) |
| 43 | >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, |
| 44 | ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) |
| 45 | ([0, 1, 0], 5.656854249492381) |
| 46 | >>> main(cities={0: [0, 0], 1: [2, 2], 4: [4, 4]}, ants_num=5, iterations_num=5, |
| 47 | ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) |
| 48 | Traceback (most recent call last): |
| 49 | ... |
| 50 | IndexError: list index out of range |
| 51 | >>> main(cities={}, ants_num=5, iterations_num=5, |
| 52 | ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) |
| 53 | Traceback (most recent call last): |
| 54 | ... |
| 55 | StopIteration |
| 56 | >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=0, iterations_num=5, |
| 57 | ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) |
| 58 | ([], inf) |
| 59 | >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=0, |
| 60 | ... pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10) |
| 61 | ([], inf) |
| 62 | >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, |
| 63 | ... pheromone_evaporation=1, alpha=1.0, beta=5.0, q=10) |
| 64 | ([0, 1, 0], 5.656854249492381) |
| 65 | >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5, |
| 66 | ... pheromone_evaporation=0, alpha=1.0, beta=5.0, q=10) |
| 67 | ([0, 1, 0], 5.656854249492381) |
| 68 | """ |
| 69 | # Initialize the pheromone matrix |
| 70 | cities_num = len(cities) |
| 71 | pheromone = [[1.0] * cities_num] * cities_num |
| 72 | |
| 73 | best_path: list[int] = [] |
| 74 | best_distance = float("inf") |
| 75 | for _ in range(iterations_num): |
| 76 | ants_route = [] |
| 77 | for _ in range(ants_num): |
| 78 | unvisited_cities = copy.deepcopy(cities) |
| 79 | current_city = {next(iter(cities.keys())): next(iter(cities.values()))} |
| 80 | del unvisited_cities[next(iter(current_city.keys()))] |
| 81 | ant_route = [next(iter(current_city.keys()))] |
| 82 | while unvisited_cities: |
| 83 | current_city, unvisited_cities = city_select( |
| 84 | pheromone, current_city, unvisited_cities, alpha, beta |
| 85 | ) |
| 86 | ant_route.append(next(iter(current_city.keys()))) |
no test coverage detected