metaheurisztikus algoritmus
Kiejtés
- IPA: [ ˈmɛtɒɦɛuristikuʃɒlɡoritmuʃ]
Főnév
- (matematika) A metaheurisztikus algoritmusok olyan általános módszerek, amelyek különféle optimalizációs problémák közelítő megoldásait keresik. Ezeket a módszereket gyakran használják komplex problémák esetén, amelyek megoldása hagyományos algoritmusokkal nehézkes vagy időigényes lenne. A metaheurisztikák célja a globális optimum megtalálása anélkül, hogy teljes mértékben bejárnák a keresési teret.
Jellemzők
- Keresési stratégia:
- Heurisztikus szabályokkal vezérelt keresési folyamat.
- Problémafüggetlenség:
- Különféle típusú optimalizációs problémákra alkalmazhatók.
- Globális és lokális keresés:
- Egyensúlyt próbálnak találni a keresési tér feltárása (exploration) és a legjobb megoldás finomítása (exploitation) között.
- Nem garantált optimalitás:
- A megtalált megoldás nem mindig optimális, de közel optimális lehet.
Fő Metaheurisztikus Algoritmusok
1. Genetikus algoritmus (Genetic Algorithm, GA)
Az evolúciós biológián alapul, és a populációt iteratívan fejleszti: - Kezdeti populáció: Random módon generált megoldások. - Szelekció: Az adott populáció legjobb egyedeinek kiválasztása. - Keresztezés: Az egyedek kombinálása új megoldások létrehozására. - Mutáció: Véletlenszerű módosítások a sokszínűség fenntartása érdekében.
Python Implementáció:
import random
def genetic_algorithm(fitness_func, bounds, population_size=50, generations=100, mutation_rate=0.1):
def generate_individual():
return random.uniform(bounds[0], bounds[1])
def mutate(individual):
if random.random() < mutation_rate:
return individual + random.uniform(-0.1, 0.1)
return individual
def crossover(parent1, parent2):
return (parent1 + parent2) / 2
population = [generate_individual() for _ in range(population_size)]
for _ in range(generations):
population = sorted(population, key=fitness_func)
next_generation = population[:10] # Elitizmus
while len(next_generation) < population_size:
parent1, parent2 = random.sample(population[:20], 2)
child = crossover(parent1, parent2)
child = mutate(child)
next_generation.append(child)
population = next_generation
best_solution = min(population, key=fitness_func)
return best_solution, fitness_func(best_solution)
# Példa: Minimalizáljuk az f(x) = (x - 5)^2 függvényt
result = genetic_algorithm(lambda x: (x - 5)**2, bounds=(0, 10))
print("Legjobb pont:", result[0])
print("Legjobb érték:", result[1])
2. Szimulált lehűlés (Simulated Annealing, SA)
Fizikai folyamatokon alapul, különösen a kristályok hűtésének modellezésén: - Kezdeti hőmérséklet: Magas érték, ami lehetővé teszi, hogy a keresés a távoli régiókat is bejárja. - Hőmérséklet csökkentése: A hőmérséklet fokozatos csökkentésével a keresés egyre finomabbá válik.
Python Implementáció:
import math
import random
def simulated_annealing(f, bounds, temp=1000, cooling_rate=0.99, max_iter=1000):
current_solution = random.uniform(bounds[0], bounds[1])
current_value = f(current_solution)
best_solution = current_solution
best_value = current_value
for _ in range(max_iter):
new_solution = current_solution + random.uniform(-1, 1)
if bounds[0] <= new_solution <= bounds[1]:
new_value = f(new_solution)
delta = new_value - current_value
if delta < 0 or math.exp(-delta / temp) > random.random():
current_solution = new_solution
current_value = new_value
if new_value < best_value:
best_solution = new_solution
best_value = new_value
temp *= cooling_rate
return best_solution, best_value
# Példa: Minimalizáljuk az f(x) = (x - 3)^2 függvényt
result = simulated_annealing(lambda x: (x - 3)**2, bounds=(0, 10))
print("Legjobb pont:", result[0])
print("Legjobb érték:", result[1])
3. Hangya kolónia optimalizáció (Ant Colony Optimization, ACO)
A hangyák útvonalkeresési viselkedését modellezi: - Feromonok: A lehetséges megoldások közötti utak népszerűségének jelölésére. - Keresés: A hangyák kezdetben véletlenszerűen keresnek, majd a jobb utak erősödnek.
Python Implementáció:
Egy egyszerű ACO példaként alkalmazható az Utazó Ügynök Problémában (TSP).
4. Részecskeraj optimalizáció (Particle Swarm Optimization, PSO)
A rajok, például halrajok és madárrajok viselkedésén alapul: - Részecskék: A keresési tér különböző pontjain helyezkednek el. - Mozgás: A részecskék a legjobb ismert megoldások felé mozognak.
Python Implementáció:
import random
def particle_swarm_optimization(f, bounds, num_particles=30, iterations=100):
dim = 1
particles = [random.uniform(bounds[0], bounds[1]) for _ in range(num_particles)]
velocities = [random.uniform(-1, 1) for _ in range(num_particles)]
personal_best = particles[:]
personal_best_values = [f(p) for p in particles]
global_best = personal_best[personal_best_values.index(min(personal_best_values))]
for _ in range(iterations):
for i in range(num_particles):
velocities[i] = 0.5 * velocities[i] + 0.5 * random.random() * (personal_best[i] - particles[i]) + 0.5 * random.random() * (global_best - particles[i])
particles[i] += velocities[i]
particles[i] = max(min(particles[i], bounds[1]), bounds[0])
if f(particles[i]) < f(personal_best[i]):
personal_best[i] = particles[i]
global_best = personal_best[personal_best_values.index(min([f(p) for p in personal_best]))]
return global_best, f(global_best)
# Példa: Minimalizáljuk az f(x) = (x - 2)^2 függvényt
result = particle_swarm_optimization(lambda x: (x - 2)**2, bounds=(0, 10))
print("Legjobb pont:", result[0])
print("Legjobb érték:", result[1])
Alkalmazások
- Logisztikai problémák:
- Jármű útvonaltervezés.
- Ütemezési problémák.
- Mesterséges intelligencia:
- Paraméterek optimalizálása gépi tanulási modellekben.
- Kémiai tervezés és biológia:
- Fehérjeszerkezet elemzés.
- Gyógyszerkutatás.
- Gazdaság és pénzügy:
- Befektetési portfólió optimalizálás.
Előnyök és Hátrányok
Előnyök
- Problémafüggetlenség: Sokféle probléma esetén alkalmazható.
- Rugalmasság: Alkalmazkodik a komplex korlátokhoz.
- Egyszerű implementáció: Kisebb technikai háttérrel is használható.
Hátrányok
- Nem garantált optimalitás: Nem mindig találja meg a legjobb megoldást.
- Időigényes lehet: Nagy problémák esetén.
Összegzés
A metaheurisztikus algoritmusok hatékony és rugalmas megoldást kínálnak a komplex optimalizációs problémákra. Pythonban egyszerűen implementálhatók, és számos tudományos és ipari alkalmazásban bizonyították hatékonyságukat. Bár nem garantálják az optimális megoldást, gyakran jó közelítést nyújtanak rövid idő alatt.
Fordítások
- metaheurisztikus algoritmus - Értelmező szótár (MEK)
- metaheurisztikus algoritmus - Etimológiai szótár (UMIL)
- metaheurisztikus algoritmus - Szótár.net (hu-hu)
- metaheurisztikus algoritmus - DeepL (hu-de)
- metaheurisztikus algoritmus - Яндекс (hu-ru)
- metaheurisztikus algoritmus - Google (hu-en)
- metaheurisztikus algoritmus - Helyesírási szótár (MTA)
- metaheurisztikus algoritmus - Wikidata
- metaheurisztikus algoritmus - Wikipédia (magyar)