class_docstr: Unimodal Normal Distribution Crossover used by :class:`~optuna.samplers.NSGAIISampler`.
  
  Generates child individuals from the three parents
  using a multivariate normal distribution.
  
  - `H. Kita, I. Ono and S. Kobayashi,
    Multi-parental extension of the unimodal normal distribution crossover
    for real-coded genetic algorithms,
    Proceedings of the 1999 Congress on Evolutionary Computation-CEC99
    (Cat. No. 99TH8406), 1999, pp. 1581-1588 Vol. 2
    <https://ieeexplore.ieee.org/document/782672>`_
  
  Args:
      sigma_xi:
          Parametrizes normal distribution from which ``xi`` is drawn.
      sigma_eta:
          Parametrizes normal distribution from which ``etas`` are drawn.
          If not specified, defaults to ``0.35 / sqrt(len(search_space))``.
code: def _distance_from_x_to_psl(
      self, parents_params: np.ndarray
  ) -> np.floating:
      # The line connecting x1 to x2 is called psl (primary search line).
      # Compute the 2-norm of the vector orthogonal to psl from x3.
      e_12 = UNDXCrossover._normalized_x1_to_x2(
          parents_params
      )  # Normalized vector from x1 to x2.
      v_13 = (
          parents_params[2] - parents_params[0]
      )  # Vector from x1 to x3.
      v_12_3 = (
          v_13 - np.dot(v_13, e_12) * e_12
      )  # Vector orthogonal to v_12 through x3.
      m_12_3 = np.linalg.norm(v_12_3, ord=2)  # 2-norm of v_12_3.
  
      return m_12_3
  
file_path: optuna/optuna/samplers/nsgaii/_crossovers/_undx.py
imports: from typing import Optional
  import numpy
  from optuna._experimental import experimental_class
  from optuna.samplers.nsgaii._crossovers._base import BaseCrossover
  from optuna.study import Study
label_desc: Use image node_id 2 for calling the UNDXCrossover obj's underlying member method code with example usage: obj._distance_from_x_to_psl(parents_params) and returns: m_12_3