ant colony optimization (tsz. ant colony optimizations)
Ant Colony Optimization (ACO, magyarul: hangyakolóniás optimalizáció) egy metaheurisztikus algoritmus, amelyet kombinatorikus optimalizálási problémák megoldására használnak. A módszert Marco Dorigo vezette be 1992-ben, és inspirációját a valódi hangyák viselkedéséből nyerte, különösen abból, ahogyan feromonokat használnak az útvonalak megjelölésére.
A valódi hangyák:
Számítógépes modellben:
Fogalom | Jelentés |
---|---|
Feromon | Mesterséges jel, ami a megoldások minőségét jelzi |
Heurisztika | Problémaspecifikus érték (pl. távolság reciprok) |
Tabu lista | Tiltólista a ciklusok elkerülésére |
Párolgás | Feromon csökkenése idővel → diverzitás fenntartása |
ahol:
Probléma | Leírás |
---|---|
Travelling Salesman Problem | Legrövidebb körút |
Ütemezési problémák | Gyártás, iskolai beosztás |
Routing problémák | Adathálózat, logisztika |
Jármű útvonal | Vehicle Routing Problem (VRP) |
Telepítési feladatok | Pl. vezeték tervezés |
import numpy as np
def distance_matrix(coords):
return np.linalg.norm(coords - coords, axis=-1)
def initialize_pheromones(n, initial=1.0):
return np.full((n, n), initial)
def aco_tsp(coords, n_ants=10, n_iter=100, alpha=1, beta=5, rho=0.1, Q=100):
n = len(coords)
dist = distance_matrix(coords)
pheromone = initialize_pheromones(n)
best_path, best_len = None, np.inf
for _ in range(n_iter):
paths, lengths = ,
for _ in range(n_ants):
visited =
while len(visited) < n:
i = visited
probs =
for j in range(n):
if j not in visited:
tau = pheromone ** alpha
eta = (1 / dist) ** beta
probs.append((j, tau * eta))
total = sum(p for _, p in probs)
probs =
next_city = np.random.choice(, p=)
visited.append(next_city)
visited.append(0) # vissza kezdővárosba
length = sum(dist]] for i in range(n))
if length < best_len:
best_len = length
best_path = visited
paths.append(visited)
lengths.append(length)
# Feromonfrissítés
pheromone *= (1 - rho)
for path, length in zip(paths, lengths):
for i in range(n):
pheromone]] += Q / length
return best_path, best_len
Paraméter | Jelentés | Hatás |
---|---|---|
Feromon súlya | nagy → erősebb tanulás | |
Heurisztika súlya | nagy → mohóbb viselkedés | |
Párolgási arány | nagy → gyors felejtés | |
Feromonmennyiség | kis érték → kevesebb tanulás |
Fogalom | Leírás |
---|---|
ACO | Véletlenszerű keresés + feromonos tanulás |
Alkalmazások | TSP, VRP, ütemezés, routing |
Fő komponensek | Feromon, heurisztika, párolgás |
Előny | Adaptív, robusztus keresés |
Eszközök | Python (ACO-Py), C++, MATLAB könyvtárak |