
    (^i*                    x    d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	 erd dl
mZ  ed       G d d	e	             Zy)
    )annotations)TYPE_CHECKINGN)experimental_class)BaseCrossover)Studyz3.0.0c                  \    e Zd ZdZdZd	d
dZddZddZ	 	 	 	 	 	 	 	 	 	 ddZe	dd       Z
y)UNDXCrossovera'  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://doi.org/10.1109/CEC.1999.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))``.
       Nc                     || _         || _        y )N)	_sigma_xi
_sigma_eta)selfsigma_xi	sigma_etas      i/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/optuna/samplers/nsgaii/_crossovers/_undx.py__init__zUNDXCrossover.__init__'   s    !#    c                    t         j                  |      }|d   |d   z
  }|t        j                  ||      |z  z
  }t        j                  j                  |d      }|S )N   r   ord)r	   _normalized_x1_to_x2npdotlinalgnorm)r   parents_paramse_12v_13v_12_3m_12_3s         r   _distance_from_x_to_pslz%UNDXCrossover._distance_from_x_to_psl+   sb     11
 a >!#44tT*T11A.r   c                
   t         j                  |      }t        j                  |      }t        j                  |      dk7  r||d<   |j
                  }t        j                  j                  |      \  }}|j
                  dd  S )Nr      )r	   r   r   identitycount_nonzeroTr   qr)r   r   nr   basis_matrixbasis_matrix_tQ_s           r    _orthonormal_basis_vector_to_pslz.UNDXCrossover._orthonormal_basis_vector_to_psl7   sn    11
 {{1~D!Q&"LO%yy||N+1ss12wr   c                   t        |      }|d   |d   z   dz  }|d   |d   z
  }| j                  dt        j                  |      z  }n| j                  }|j	                  d|dz  |      }	|j	                  d| j
                  dz        }
| j                  ||      }|}|
|z  }|dkD  rVt        j                  |      }| j                  |      }t        |dz
        D ]  }||	|   ||   z  z  } ||z  }||z   |z   }|S ||z   }|S )Nr   r$   r   gffffff?)size)
lenr   r   sqrtnormalr   r.   zerosr"   range)r   r   rngstudysearch_space_boundsr)   xpdr   etasxiesonetwothreeDichild_paramss                     r   	crossoverzUNDXCrossover.crossoverF   s8    #$Q."33q81q 11??"rwwqz)IIzz!Y\z2ZZ4>>1,-22A
 1fq5HHQKE,,^<A1q5\ )a2a5()QJE9u,L
  9Lr   c                    | d   | d   z
  }t         j                  j                  |d      }|t        j                  |dd       z  }|S )Nr$   r   r   r   g|=)r   r   r   clip)r   v_12m_12r   s       r   r   z"UNDXCrossover._normalized_x1_to_x2l   sJ     a >!#44yy~~d~*bggdE400r   )g      ?N)r   floatr   zfloat | NonereturnNone)r   
np.ndarrayrJ   znp.floating)r   rL   r)   intrJ   rL   )
r   rL   r6   znp.random.RandomStater7   r   r8   rL   rJ   rL   )r   rL   rJ   rL   )__name__
__module____qualname____doc__	n_parentsr   r"   r.   rD   staticmethodr    r   r   r	   r	      sg    ( I$
$"$ #$ 	$
 ($ 
$L  r   r	   )
__future__r   typingr   numpyr   optuna._experimentalr   (optuna.samplers.nsgaii._crossovers._baser   optuna.studyr   r	   rT   r   r   <module>r[      s?    "    3 B " GcM c cr   