class_docstr: Class version of NSGA-III selection including memory for best, worst and
  extreme points. Registering this operator in a toolbox is a bit different
  than classical operators, it requires to instantiate the class instead
  of just registering the function::
  
      >>> from deap import base
      >>> ref_points = uniform_reference_points(nobj=3, p=12)
      >>> toolbox = base.Toolbox()
      >>> toolbox.register("select", selNSGA3WithMemory(ref_points))
class_docstr_tok: ["Class","version","of","NSGA-III","selection","including","memory","for","best",",","worst","and","extreme","points",".","Registering","this","operator","in","a","toolbox","is","a","bit","different","than","classical","operators",",","it","requires","to","instantiate","the","class","instead","of","just","registering","the","function",":",":",">",">",">","from","deap","import","base",">",">",">","ref_points","=","uniform_reference_points","(","nobj=3",",","p=12",")",">",">",">","toolbox","=","base.Toolbox","(",")",">",">",">","toolbox.register","(","``","select","''",",","selNSGA3WithMemory","(","ref_points",")",")"]
code: def __init__(self, ref_points, nd="log"):
      self.ref_points = ref_points
      self.nd = nd
      self.best_point = numpy.full((1, ref_points.shape[1]), numpy.inf)
      self.worst_point = numpy.full(
          (1, ref_points.shape[1]), -numpy.inf
      )
      self.extreme_points = None
  
imports: import bisect
  from collections import defaultdict, namedtuple
  from itertools import chain
  import math
  from operator import attrgetter, itemgetter
  import random
  import numpy
label_desc: Use image node_id 1 to create a new selNSGA3WithMemory object from inherited base classes: object with example: obj = selNSGA3WithMemory(ref_points, nd)