MCPcopy Index your code
hub / github.com/TheAlgorithms/Python / main

Function main

graphs/ant_colony_optimization_algorithms.py:29–99  ·  view source on GitHub ↗

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
)

Source from the content-addressed store, hash-verified

27
28
29def 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())))

Calls 4

city_selectFunction · 0.85
pheromone_updateFunction · 0.85
keysMethod · 0.80
appendMethod · 0.45

Tested by

no test coverage detected