- Matematikai alapokon nyugszanak. - Példák: Lineáris programozás, dinamikus programozás, gradiens-alapú módszerek.
- Heurisztikákon alapulnak, és nagy méretű problémák közelítő megoldásait keresik. - Példák: Genetikus algoritmusok, szimulált lehűlés, részecskeraj optimalizáció.
- Diszkrét problémákra koncentrál. - Példák: Utazó ügynök probléma, jármű útvonaltervezési probléma.
- Folytonos változókkal dolgozik. - Példák: Gradiens-módszerek, Newton-módszer.
Cél egy lineáris célfüggvény minimalizálása vagy maximalizálása lineáris korlátok mellett.
Matematikai Formulázás:
Python Implementáció:
from scipy.optimize import linprog
# Példa: Minimize: c^T x = x1 + 2x2
# subject to: x1 + x2 <= 3, x1 >= 0, x2 >= 0
c =
A = ]
b =
res = linprog(c, A_ub=A, b_ub=b, bounds=(0, None), method='highs')
print("Optimal value:", res.fun)
print("Optimal solution:", res.x)
A célfüggvény lokális minimumát vagy maximumát iteratív módon keresi a gradiens mentén.
Matematikai Formulázás:
Python Implementáció:
import numpy as np
def gradient_descent(f, grad_f, x0, learning_rate=0.1, max_iter=100):
x = x0
for _ in range(max_iter):
grad = grad_f(x)
x = x - learning_rate * grad
return x
# Példa: f(x) = (x - 3)^2
f = lambda x: (x - 3)**2
grad_f = lambda x: 2 * (x - 3)
result = gradient_descent(f, grad_f, x0=0, learning_rate=0.1)
print("Optimal point:", result)
print("Optimal value:", f(result))
Az evolúciós biológiából inspirált algoritmus, amely egy populációt fejleszt iteratívan szelekció, keresztezés és mutáció révén.
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, bounds)
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 =
for _ in range(generations):
population = sorted(population, key=fitness_func)
next_generation = population # Elitizmus
while len(next_generation) < population_size:
parent1, parent2 = random.sample(population, 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("Optimal point:", result)
print("Optimal value:", result)
Egy valószínűségi algoritmus, amely a hőmérséklet csökkentésével keresi a globális minimumot.
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, bounds)
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 <= new_solution <= bounds:
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: f(x) = (x - 3)^2 függvény minimalizálása
result = simulated_annealing(lambda x: (x - 3)**2, bounds=(0, 10))
print("Optimal point:", result)
print("Optimal value:", result)
* Jármű útvonaltervezés (VRP). * Gépgyártási folyamatok optimalizálása.
* Befektetési portfólió optimalizálás. * Költségminimalizálás.
* Gépi tanulás paramétereinek finomhangolása. * Neurális hálózatok súlyozása.
* Kémiai reakciók optimalizálása. * Szerkezetek tervezése.
Az optimalizáló algoritmusok kulcsszerepet játszanak a modern tudományos és ipari alkalmazásokban. Pythonban a klasszikus matematikai optimalizációtól a metaheurisztikus megközelítésekig számos algoritmus könnyen implementálható. Az algoritmusok kiválasztása a probléma típusától, méretétől és komplexitásától függ.