class_docstr: NAS Tuner using Evolution Algorithm, with weight sharing enabled
code: def __init__(
      self,
      optimize_mode,
      save_dir_root,
      population_size=32,
      graph_max_layer=6,
      graph_min_layer=3,
  ):
      self.optimize_mode = OptimizeMode(optimize_mode)
      self.indiv_counter = 0
      self.events = []
      self.thread_lock = Lock()
      self.save_dir_root = save_dir_root
      self.population = self.init_population(
          population_size, graph_max_layer, graph_min_layer
      )
      assert len(self.population) == population_size
      logger.debug("init population done.")
      return
  
imports: import copy
  import json
  import logging
  import random
  import os
  from threading import Event, Lock, current_thread
  from nni.tuner import Tuner
  from nni.utils import extract_scalar_reward
  from graph import Graph, Layer, LayerType, Enum, graph_dumps, graph_loads, unique
label_desc: Use image node_id 1 to create a new CustomerTuner object from inherited base classes: Tuner with example: obj = CustomerTuner(optimize_mode, save_dir_root, population_size, graph_max_layer, graph_min_layer)