NSDE: Non-dominated Sorting Differential Evolution#
NSDE keeps NSGA-II’s non-dominated sorting and crowding-distance survival but replaces the simulated binary crossover and polynomial mutation with differential evolution variation. The DE variant (for example DE/rand/1/bin), the crossover rate CR, and the scaling factor F control how trial vectors are produced. This is often effective on continuous multi-objective problems where DE’s difference-vector mutation converges quickly.
Example#
[1]:
from pymoo.algorithms.moo.nsde import NSDE
from pymoo.problems import get_problem
from pymoo.optimize import minimize
from pymoo.visualization.scatter import Scatter
problem = get_problem("zdt1")
algorithm = NSDE(pop_size=100, variant="DE/rand/1/bin", CR=0.7)
res = minimize(problem,
algorithm,
('n_gen', 200),
seed=1,
verbose=False)
plot = Scatter()
plot.add(problem.pareto_front(), plot_type="line", color="black", alpha=0.7)
plot.add(res.F, facecolor="none", edgecolor="red")
plot.show()
[1]:
<pymoo.visualization.scatter.Scatter at 0x7cd0c412a850>
API#
- class pymoo.algorithms.moo.nsde.NSDE(pop_size=100, sampling=None, variant='DE/rand/1/bin', CR=0.7, F=None, gamma=0.0001, de_repair='bounce-back', survival=None, **kwargs)[source]
NSDE combines NSGA-II sorting and survival with DE mutation and crossover.
For many-objective problems, try NSDE-R, GDE3-MNN, or GDE3-2NN. For bi-objective problems, survival=RankAndCrowding(crowding_func=’pcd’) is effective.
- Parameters:
pop_size – Population size. Defaults to 100.
sampling – Sampling strategy. Defaults to LHS().
variant – DE strategy string: “DE/selection/n/crossover”. selection: ‘rand’, ‘best’, ‘current-to-best’, ‘current-to-rand’, ‘ranked’. crossover: ‘bin’ or ‘exp’. Defaults to ‘DE/rand/1/bin’.
CR – Crossover rate in [0, 1]. Defaults to 0.7.
F – Scale factor(s) in (0, 2]. Defaults to randomized in (0, 1).
gamma – Jitter deviation. Defaults to 1e-4.
de_repair – Repair for DE donor vectors: ‘bounce-back’, ‘midway’, ‘rand-init’, ‘to-bounds’.
survival – Survival strategy. Defaults to RankAndCrowding().
**kwargs – Additional keyword arguments passed to parent NSGA2.
References#
Based on NSGA-II (Deb et al., 2002) with differential evolution variation (Storn & Price, 1997). See also Kukkonen & Lampinen (2005) for generalized differential evolution.