artificial bee colony algorithm (tsz. artificial bee colony algorithms)
A Artificial Bee Colony (ABC) algoritmus egy bioinspirált metaheurisztikus optimalizálási módszer, amelyet Karaboga (2005) vezetett be. Az algoritmus a méhkolónia kollektív viselkedését utánozza, különösen a nektárforrások (megoldások) keresését. Kiválóan alkalmazható folytonos és kombinatorikus optimalizálási problémák megoldására.
A valódi méhek három csoportra oszthatók:
Az algoritmus ezen viselkedésminták sztochasztikus modellezésén alapul.
Olyan folytonos vagy diszkrét keresési térben találni egy megoldást , amely minimalizálja vagy maximalizálja az adott célfüggvényt .
ahol:
Ha jobb, mint , akkor a méh lecseréli a megoldást.
Ezután a választott megoldásból szintén új javaslatot generál az előzőhöz hasonlóan.
Inicializáld a kolóniát (N megoldás) ismétlés, amíg konvergencia: - Dolgozó méhek javítanak meglévő megoldásokat - Kóborló méhek választanak a javítottak közül és próbálnak újakat - Felderítő méhek véletlenszerűen keresnek új megoldást, ha kell - Frissítsd a legjobb megoldást
import numpy as np
def objective(x):
return sum(x**2)
def artificial_bee_colony(obj_fn, dim=2, n_bees=20, max_iter=100, limit=50, lb=-10, ub=10):
food_sources = np.random.uniform(lb, ub, (n_bees, dim))
fitness = np.array()
trial = np.zeros(n_bees)
best = food_sources
for _ in range(max_iter):
# Employed bees
for i in range(n_bees):
k = np.random.choice()
phi = np.random.uniform(-1, 1, dim)
v = food_sources + phi * (food_sources - food_sources)
v = np.clip(v, lb, ub)
f_v = obj_fn(v)
if f_v < fitness:
food_sources = v
fitness = f_v
trial = 0
else:
trial += 1
# Onlooker bees
prob = 1 - fitness / fitness.sum()
for _ in range(n_bees):
i = np.random.choice(n_bees, p=prob / prob.sum())
k = np.random.choice()
phi = np.random.uniform(-1, 1, dim)
v = food_sources + phi * (food_sources - food_sources)
v = np.clip(v, lb, ub)
f_v = obj_fn(v)
if f_v < fitness:
food_sources = v
fitness = f_v
trial = 0
else:
trial += 1
# Scout bees
for i in range(n_bees):
if trial > limit:
food_sources = np.random.uniform(lb, ub, dim)
fitness = obj_fn(food_sources)
trial = 0
best = food_sources
return best, obj_fn(best)
✅ Előnyök | ❌ Hátrányok |
---|---|
Egyszerű, robusztus algoritmus | Sok paraméter hangolása szükséges |
Jó feltárás + kiaknázás egyensúly | Lassú lehet nagy dimenzióban |
Nem igényel derivált | Sok véletlen elem → instabilitás |
Terület | Példa |
---|---|
Mérnöki optimalizálás | Gépek, szerkezetek, robotok |
Gépi tanulás | Hiperparaméter-keresés |
Hálózatok | Útvonaloptimalizálás |
Bioinformatika | Fehérjeszerkezet előrejelzés |
Adatbányászat | Klaszterezés, kiválasztás |
Fogalom | Leírás |
---|---|
ABC algoritmus | Méhviselkedés alapján tanuló optimalizáló módszer |
Módszer típusa | Metaheurisztika |
Mechanizmus | Dolgozó + kóborló + felderítő méhek |
Előnye | Rugalmas, deriváltmentes |
Használata | Folytonos, diszkrét, globális optimalizálás |