szó jelentését keresi. A DICTIOUS-ban nem csak a
szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a
szót egyes és többes számban mondani. Minden, amit a
szóról tudni kell, itt található. A
szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. A
és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.
Kiejtés
Főnév
NSGA II
- (matematika, algoritmusok)
NSGA-II (Non-dominated Sorting Genetic Algorithm II)
Az NSGA-II egy továbbfejlesztett, hatékony többcélú optimalizációs algoritmus, amelyet Kalyanmoy Deb és társai fejlesztettek ki. Az NSGA-II célja, hogy többcélú optimalizációs problémákra generáljon Pareto-hatékony megoldáshalmazt, miközben javítja az eredeti NSGA algoritmus hiányosságait, például a számítási költséget és a megoldások egyenletes Pareto-front lefedettségét.
Alapelvek
Az NSGA-II kulcsfontosságú jellemzői:
- Dominált rendezés (Non-dominated Sorting):
- Az egyedeket Pareto-frontok alapján rendezi:
- Az első fronton azok a megoldások vannak, amelyeket más megoldás nem dominál.
- A második frontot az első front dominálja, de egymást nem.
- Elitizmus:
- A legjobb megoldások automatikusan átkerülnek a következő generációba.
- Tömörségi távolság (Crowding Distance):
- Az egyedek közötti sokféleség biztosítása érdekében a Pareto-fronton belüli távolságot méri a célfüggvények alapján.
- Gyorsított dominált rendezés:
- Az NSGA-II gyorsabb Pareto-rendezést használ ((O(MN^2))), ahol (M) a célfüggvények száma, (N) a populációméret.
Algoritmus működése
Az NSGA-II a genetikus algoritmusok alapelveit alkalmazza, de többcélú optimalizációra adaptálva.
Lépések
- Inicializáció:
- Generálj egy kezdeti populációt ((P_0)).
- Számítsd ki minden egyed célfüggvényértékeit.
- Dominált rendezés:
- Oszd fel a populációt Pareto-frontokba.
- Szelekció és genetikai operátorok:
- Válaszd ki a legjobb egyedeket a rangjuk (front) és a tömörségi távolságuk alapján.
- Hozz létre új utódokat keresztezés és mutáció segítségével ((Q_t)).
- Unió és új populáció létrehozása:
- Kombináld az aktuális populációt () és az utódokat () egy új unióba ().
- Rendezés és szelekció után hozz létre egy új generációt ().
- Iteráció:
- Ismételd, amíg el nem éred a megállási feltételt (pl. generációk száma vagy Pareto-front konvergencia).
Pszeudokód
NSGA-II(Population, MaxGenerations):
Initialize Population P_0
Evaluate Population P_0
for t in range(MaxGenerations):
Q_t = CrossoverAndMutation(P_t)
Evaluate Q_t
R_t = P_t + Q_t
Fronts = NonDominatedSorting(R_t)
P_{t+1} = SelectBest(Fronts, PopulationSize)
return ParetoFronts(P_MaxGenerations)
Fontos fogalmak
- Dominált rendezés:
- Egy megoldás ((A)) akkor dominál egy másikat ((B)), ha:
- (A) minden célfüggvény szempontjából legalább olyan jó, mint (B),
- és van legalább egy célfüggvény, amelyben (A) szigorúan jobb.
- Tömörségi távolság:
- Az egyedek közötti sokféleséget méri, hogy az algoritmus egyenletesen fedje le a Pareto-frontot.
- Az (i)-edik egyed tömörségi távolsága: ahol és az -edik egyed szomszédos célértékei.
- Elitizmus:
- Az NSGA-II biztosítja, hogy a Pareto-front legjobb megoldásai ne vesszenek el a következő generációk során.
Példa Pythonban
Az NSGA-II implementálására a DEAP
könyvtárat használjuk.
Példa implementáció
from deap import base, creator, tools, algorithms
import random
# Célfüggvények definiálása
def evaluate(individual):
x, y = individual
return x**2, (y - 2)**2
# Inicializáció
creator.create("FitnessMulti", base.Fitness, weights=(-1.0, -1.0)) # Minimizálás
creator.create("Individual", list, fitness=creator.FitnessMulti)
toolbox = base.Toolbox()
toolbox.register("attr_float", random.uniform, -10, 10)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_float, n=2)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
# Genetikai operátorok
toolbox.register("mate", tools.cxBlend, alpha=0.5)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.2)
toolbox.register("select", tools.selNSGA2)
toolbox.register("evaluate", evaluate)
# NSGA-II futtatása
def main():
population = toolbox.population(n=100)
ngen = 50 # Generációk száma
cxpb = 0.7 # Keresztezési valószínűség
mutpb = 0.2 # Mutációs valószínűség
algorithms.eaMuPlusLambda(population, toolbox, mu=100, lambda_=200, cxpb=cxpb,
mutpb=mutpb, ngen=ngen, stats=None, halloffame=None, verbose=True)
return population
# Futtatás
pareto_front = main()
Előnyök
- Pareto-front generálása:
- Hatékonyan képes több célfüggvény kompromisszumait feltárni.
- Elitizmus:
- A legjobb megoldások biztosítása generációk között.
- Egyenletes lefedettség:
- A Pareto-front egyenletes reprezentációját biztosítja.
- Gyors rendezés:
- Az NSGA-II gyors Pareto-rendezési algoritmust alkalmaz.
Hátrányok
- Paraméterérzékenység:
- A populációméret, keresztezési és mutációs arányok jelentősen befolyásolják az eredményt.
- Skálázhatóság:
- Nagy számú célfüggvény esetén (pl. több mint 3) az algoritmus teljesítménye romolhat.
Alkalmazások
- Mérnöki tervezés:
- Gépek, járművek és szerkezetek többcélú optimalizálása.
- Hálózattervezés:
- Adatátviteli útvonalak optimalizálása költség és késleltetés szempontjából.
- Ellátási lánc menedzsment:
- Költségek és szállítási idő kompromisszumai.
- Bioinformatika:
- Génhálózatok optimalizálása.
Összegzés
Az NSGA-II egy hatékony és széles körben használt többcélú optimalizációs algoritmus. Gyors Pareto-rendezése, elitizmusa és tömörségi távolsága miatt számos tudományos és mérnöki területen alkalmazzák. Az algoritmus a többcélú optimalizálási problémák megoldásának egyik legjobb eszköze, különösen két vagy három célfüggvény esetén.
Fordítások