ó
X™xTc           @   s�   d  d l  m Z d  d l m Z d  d l m Z d  d l Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ	 d	 „  Z
 e d
 k rŒ e
 ƒ  d GHn  d S(   iÿÿÿÿ(   t   division(   t   flex(   t   random_transformNt   cross_entropy_optimizerc           B   sb   e  Z d  d d d d d d d „ Z d d „ Z d	 „  Z d
 „  Z d „  Z d d „ Z d „  Z	 RS(   i   i
   i2   gH¯¼šò×z>gü©ñÒMbP?iPÃ  c         C   s-  | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | j |  _ | |  _ | |  _ |	 |  _	 |
 |  _
 | |  _ | |  _ d |  _ | |  _ |  j j ƒ  |  _ |  j j ƒ  |  _ |  j j ƒ  |  _ d |  _ |  j |  j ƒ |  _ d |  _ t } x9 | s(|  j d 7_ |  j ƒ  |  j ƒ  |  j ƒ  } qð Wd  S(   Ng        gÇY)	kŸRi    g      ð?(   t   functiont   meant   sigmat   alphat   betat   qt   nt   n_int   sample_sizet   epst
   inject_epst   monitor_cyclet   n_maxt   countt	   deep_copyt	   last_meant
   last_sigmat   best_solt
   best_scoret   compute_targett   best_sol_foundt   Falset   generate_new_means_and_sigmast   injectt   convergence_test(   t   selfR   R   R   R   R   R	   t
   elite_sizeR   R   R   R   R   t	   converged(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyt   __init__   s6    																	

g      @c         C   s‰   t  j |  j |  j ƒ } t  j |  j ƒ } | |  j k  ra |  j t | | | |  j ƒ |  _ n  |  j j ƒ  |  _ |  j j ƒ  |  _ d  S(   N(	   R   t   maxR   R   t   minR   R   R   R   (   R   t   ct   mdeltat   sdelta(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR   +   s    'c         C   sL   |  j  j | ƒ } | |  j k  rH | |  _ | j ƒ  |  _ |  j |  _ n  | S(   N(   R   t   targetR   R   R   R   R   (   R   t   xt   t(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR   4   s    	c         C   s¹   g  } t  j ƒ  } x t |  j ƒ D]n } t j d t d |  j d ƒ d |  j ƒ } | |  j |  j	 } |  j
 | ƒ } | j | ƒ | j | ƒ q" Wt  j t  j | ƒ ƒ } | | | f S(   Nt   ai   i   t   N(   R   t   doublet   rangeR   R   t	   t_variateR!   R
   R   R   R   t   appendt   sort_permutation(   R   t   sample_listt   target_listt   iiR'   R(   t   order(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyt   generate_and_score_samples<   s    +c         C   s)  |  j  ƒ  \ } } } |  j d } |  j d } xG t |  j ƒ D]6 } | | | | } | | | | | | | } q? W| |  j } | |  j | | } | } |  j d |  j |  j | |  _ |  j |  j d d |  j |  j } t j	 |  j
 |  j
 d | | | ƒ |  _
 |  j |  j ƒ d  S(   Ng        g      ð?(   R4   R   R,   R   R   R   R   R	   R   t   sqrtR   R   (   R   t   sR(   t   ot   nmt   nvR2   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR   I   s    ""&,c         C   sd   | d  k r t j } n  | d |  j IJx |  j D] } | d | IJq3 W| d |  j IJ| Jd  S(   Ns    Cycle:  %is   %5.3e s   Target : %5.3e(   t   Nonet   syst   stdoutR   R   R   (   R   t   outt   mm(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyt   print_statusY   s    c         C   s\   t  j |  j ƒ } | |  j k  r% t S|  j |  j |  j k rB t S|  j |  j k rX t St	 S(   N(
   R   R!   R   R   t   TrueR   R   R   R   R   (   R   t   max_var(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR   b   s    N(
   t   __name__t
   __module__R    R   R   R4   R   R:   R?   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR      s   #					t   test_rosenbrock_functionc           B   s   e  Z d  d „ Z d „  Z RS(   i   c         C   sÝ   | d |  _  | |  _ t j |  j  d ƒ |  _ t j |  j  d ƒ |  _ d |  _ t |  d |  j d |  j d d d	 d d
 d d d d d d d d d ƒ	|  _ |  j j	 |  _
 x- |  j
 D]" } t | d ƒ d k  s³ t ‚ q³ Wd  S(   Ni   g       @g      @i    R   R   R   g      è?R   R	   g      !@R   i
   R   i2   R   g-Cëâ6?R   iô  g      ð?g{®Gáz„?(   R
   t   dimR   R+   t   meanst   sigmast   target_countR   t	   optimizerR   t   solt   abst   AssertionError(   R   RE   R2   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR    r   s"    					c         C   s|   |  j  d 7_  | d |  j !} | |  j } d } xC t | | ƒ D]2 \ } } | d | | | d d | d 7} qB W| S(   Ni   i    g      Y@g       @(   RH   RE   t   zip(   R   t   vectort   x_vect   y_vect   resultR'   t   y(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyR&   ‡   s    *(   RB   RC   R    R&   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyRD   q   s   c           C   s   t  j d ƒ t d ƒ d  S(   Ni    i   (   R   t   set_random_seedRD   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyt   run“   s    t   __main__t   OK(   t
   __future__R    t   scitbx.array_familyR   t   scitbx.python_utilsR   R;   t   objectR   RD   RT   RB   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/cross_entropy.pyt   <module>   s   j"	