NSDE: Non-dominated Sorting Differential Evolution

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>
../../_images/algorithms_moo_nsde_6_1.png

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.