
    &`i                         d dl Zd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ  G d de          Zd	 Zd
 ZddZd Zd ZdS )    N)minimize)GaussianProcessRegressor)HyperparameterKernel)pairwise_distances)euclidean_distancesc                       e Zd ZdZ	 	 	 	 	 	 ddZed             Zed             Zed	             ZddZ	d Z
d Zed             Zej        d             Zed             Zd
S )TV_SquaredExpzTime varying squared exponential kernel.
    For more info see the TV-GP-UCB paper:
    http://proceedings.mlr.press/v51/bogunovic16.pdf
          ?皙?h㈵>g     j@r         ?c                 Z    || _         || _        || _        || _        || _        || _        d S N)variancelengthscaleepsilonvariance_boundslengthscale_boundsepsilon_bounds)selfr   r   r   r   r   r   s          q/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/schedulers/pb2_utils.py__init__zTV_SquaredExp.__init__   s8     !&."4,    c                 .    t          dd| j                  S )Nr   numeric)r   r   r   s    r   hyperparameter_variancez%TV_SquaredExp.hyperparameter_variance   s    j)T5IJJJr   c                 .    t          dd| j                  S )Nr   r   )r   r   r   s    r   hyperparameter_lengthscalez(TV_SquaredExp.hyperparameter_lengthscale#   s    mY8OPPPr   c                 .    t          dd| j                  S )Nr   r   )r   r   r   s    r   hyperparameter_epsilonz$TV_SquaredExp.hyperparameter_epsilon'   s    iD4GHHHr   NFc           	         t          j        |          }||}t          j        | j        dd          }|d d df                             dd          }|d d df                             dd          }t          ||d          }d|z
  d|z  z  }|d d dd f         }	|d d dd f         }
| j        t          j        t          j        t          |	|
                     | j
        z            z  }||z  }|r^|}t          j        t          |	|
                    }||z  | j
        z  }|dz  }| |z  |z  d|z
  z  }|t          j        |||g          fS |S )Nr   r   r      	cityblock   )np
atleast_2dclipr   reshaper   r   expsquarer   r   dstack)r   XYeval_gradientr   T1T2dists
timekernel	X_spatial	Y_spatialrbfKK_gradient_variancedist2K_gradient_lengthscalenK_gradient_epsilons                     r   __call__zTV_SquaredExp.__call__+   s   M!9A'$,c22 qqq!tW__R##qqq!tW__R##"2r;77'ksU{3
 aaaeH	aaaeH	mbfY*9i@@AAADDTT
 
 
 * 	"#I1)YGGHHE%&Y1A%A"	A"#a'!1Q[!Abi$&<>PQ    r   c                 d    t          j        |j        d         | j        t           j                  S )Nr   )dtype)r*   fullshaper   float64)r   r1   s     r   diagzTV_SquaredExp.diagM   s#    wqwqz4=
CCCCr   c                     dS NF r   s    r   is_stationaryzTV_SquaredExp.is_stationaryP   s    ur   c                 N    t          j        | j        | j        | j        g          S r   )r*   logr   r   r   r   s    r   thetazTV_SquaredExp.thetaS   s     vt}d&6EFFFr   c                     t          j        |d                   | _        t          j        |d                   | _        t          j        |d                   | _        d S )Nr   r'   r)   )r*   r.   r   r   r   )r   rN   s     r   rN   zTV_SquaredExp.thetaW   sF    uQx((6%(++veAh''r   c                     t          j        t          | j                  t          | j                  t          | j                  g          S r   )r*   rM   listr   r   r   r   s    r   boundszTV_SquaredExp.bounds]   sE    vT)**T,--T())
 
 	
r   )r   r   r   r   r   r   rI   )__name__
__module____qualname____doc__r   propertyr    r"   r$   rA   rG   rK   rN   setterrR   rJ   r   r   r
   r
   	   s,         #&"- - - -  K K XK Q Q XQ I I XI       DD D D   G G XG \( ( \(
 
 
 X
 
 
r   r
   c                     | t          j        |d          z
  t          j        |d          t          j        |d          z
  dz   z  S )zgNormalize data to be in range (0,1), with respect to (wrt) boundaries,
    which can be specified.
    r   axis:0yE>)r*   minmax)datawrts     r   	normalizera   h   sP     26#A&&&&
sbfSq1111D8 r   c                     | t          j        | d          z
  t          j        | d          dz   z  } t          j        | dd          S )z5Standardize to be Gaussian N(0,1). Clip final values.r   rZ   r\   r)   )r*   meanstdr,   )r_   s    r   standardizerf   q   sH    274a((((RVDq-A-A-AD-HID74Qr   c           	      4   d}d}|t          dt          j        || j        j        d         z                      z   }|t          j        |          n|}t          j        |                    dd          t          j        |                              dd          f          j	        }	 | 
                    |          d         }	n# t          $ r d}	Y nw xY w	 |
                    |d	          \  }
}|d         d
z  }n# t          $ r d}Y nw xY w|	||z  z   S )aP  UCB acquisition function. Interesting points to note:
    1) We concat with the fixed points, because we are not optimizing wrt
       these. This is the Reward and Time, which we can't change. We want
       to find the best hyperparameters *given* the reward and time.
    2) We use m to get the mean and m1 to get the variance. If we already
       have trials running, then m1 contains this information. This reduces
       the variance at points currently running, even if we don't have
       their label.
       Ref: https://jmlr.org/papers/volume15/desautels14a/desautels14a.pdf

    g?g?r   Nr&   r'   iT)
return_stdr)   )r^   r*   rM   X_train_rE   sqrtconcatenater-   arrayTpredict
ValueError)mm1xfixedkappac1c2beta_txtestrd   _re   vars                r   UCBr{   w   s.    
B	B#aQZ%5a%8 899:::F$}BGFOOO%ENEMM"a00"(1++2E2Eb!2L2LMNNPEyy"   Ed333!fk   %#+s$   +C CC%D   DDc                     dddd}d}d}j         dddf         }d t          j         j        d	         |z
            D             }	t          |          D ]r}
t          j                            dd	j         j        d	         |z
            }t           fd
||	d|          }  |j                  }||k    r	|}|j        }st          j        |dd	          S )zOptimize acquisition function.   F)maxitermaxfundisp
   ir   Nc                     g | ]}d S ))r   r'   rJ   ).0ry   s     r   
<listcomp>z optimize_acq.<locals>.<listcomp>   s    AAAfAAAr   r'   c                 "     |            S r   rJ   )rr   rs   funcrp   rq   s    r   <lambda>zoptimize_acq.<locals>.<lambda>   s    ttAr1e,,, r   zL-BFGS-B)rR   methodoptions)	ri   rangerE   r*   randomuniformr   rr   r,   )r   rp   rq   rs   num_foptsrm   
best_value
best_thetarR   iix0resvals   ````          r   optimize_acqr      s    c599D
AJQT"JAAeAJ$4Q$7%$?@@AAAFAhh  Yq!QZ%5a%85%@AA,,,,,,,
 
 
 d1b#%''JJ7:q!$$$r   c                    d}| j         d         |k     r| j         d         S |dz
  }g }|dz   | j         d         k    rz|dz  }t          j        t          |                                                    j        }| | dddf         }|| d         }	|ddd|f         }
t          j        t          j        |
d          t          j        |
d          f          	                    d|
j         d                   }t          j        ||fd          }t          ||          }t          |	          	                    |	j        d          }t          ddd	
          }t          |d          }|                    ||           |                    |j                   |dz   | j         d         k    zt          j        |          }|t'          |dz            z   dz  }|S )z?Select the number of datapoints to keep, using cross validationr}   r   r   NrZ   r)   r'   r   r   )r   r   r   fmin_l_bfgs_b)kernel	optimizer)rE   r*   rl   rQ   valuesrm   rk   r^   r]   r-   ra   rf   sizer
   r   fitappendlog_marginal_likelihood_value_argmaxint)XrawyrawrR   r   min_lenlengthscores	base_valsX_leny_len	oldpointsold_limslimitsr1   yr   rp   idxs                     r   select_lengthr      s   Gz!}wz!}2rkTZ]**bLFfmmoo!6!6779I&111%E&NEaaa%i(I~	***BF91,E,E,EF ga+,,  ^Xy$9BBBF%((AE""**5:q99A"CS#NNNF(/RRRAEE!QKKKMM!:;;;' rkTZ]**( iWr\+++r1r   r   )numpyr*   scipy.optimizer   sklearn.gaussian_processr    sklearn.gaussian_process.kernelsr   r   sklearn.metricsr   sklearn.metrics.pairwiser   r
   ra   rf   r{   r   r   rJ   r   r   <module>r      s        # # # # # # = = = = = = C C C C C C C C . . . . . . 8 8 8 8 8 8\
 \
 \
 \
 \
F \
 \
 \
~          @% % %<    r   