L i'ddlmZddlZddlZddlmZddlmZddlZddlZ ddl m Z ddl m Z ddlmZddlmZdd lmZdd lmZdd lmZdd lmZer#ddlmZddlZdd lmZddlmZddlm Z ddlm!Z"n6ddl#m$Z$e$dZe$dZe$dZe$dZ e$dZ"e$dZdZ%e dGddeZ&ddZ' ddZ(y) ) annotationsN)cast) TYPE_CHECKING)experimental_class)LazyRandomState)intersection_search_space)StudyDirection)"_compute_standardized_regret_bound)BaseImprovementEvaluator) FrozenTrial) TrialState)acqf)gp)prior) search_space) _LazyImporttorchz optuna._gp.gpzoptuna._gp.acqfzoptuna._gp.priorzoptuna._gp.search_spacez scipy.stats皙?z4.0.0c<eZdZdZ d ddZddZy) EMMREvaluatora Evaluates a kind of regrets, called the Expected Minimum Model Regret(EMMR). EMMR is an upper bound of "expected minimum simple regret" in the optimization process. Expected minimum simple regret is a quantity that converges to zero only if the optimization process has found the global optima. For further information about expected minimum simple regret and the algorithm, please refer to the following paper: - `A stopping criterion for Bayesian optimization by the gap of expected minimum simple regrets `__ Also, there is our blog post explaining this evaluator: - `Introducing A New Terminator: Early Termination of Black-box Optimization Based on Expected Minimum Model Regret `__ Args: deterministic_objective: A boolean value which indicates whether the objective function is deterministic. Default is :obj:`False`. delta: A float number related to the criterion for termination. Default to 0.1. For further information about this parameter, please see the aforementioned paper. min_n_trials: A minimum number of complete trials to compute the criterion. Default to 2. seed: A random seed for EMMREvaluator. Example: .. testcode:: import optuna from optuna.terminator import EMMREvaluator from optuna.terminator import MedianErrorEvaluator from optuna.terminator import Terminator sampler = optuna.samplers.TPESampler(seed=0) study = optuna.create_study(sampler=sampler, direction="minimize") emmr_improvement_evaluator = EMMREvaluator() median_error_evaluator = MedianErrorEvaluator(emmr_improvement_evaluator) terminator = Terminator( improvement_evaluator=emmr_improvement_evaluator, error_evaluator=median_error_evaluator, ) for i in range(1000): trial = study.ask() ys = [trial.suggest_float(f"x{i}", -10.0, 10.0) for i in range(5)] value = sum(ys[i] ** 2 for i in range(5)) study.tell(trial, value) if terminator.should_terminate(study): # Terminated by Optuna Terminator! break Nc|dkstj|s td||_||_||_t ||_y)Nz@`min_n_trials` is expected to be a finite integer more than one.)npisfinite ValueError_deterministic_delta min_n_trialsr_rng)selfdeterministic_objectivedeltarseeds h/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/optuna/terminator/improvement/emmr.py__init__zEMMREvaluator.__init__lsF 1 BKK $=_` `5 (#D) c 6 t|}|Dcgc]"}|jtjk(s!|$}}t ||j kr!t jjtzStj|}|j|}|jsMtj|j j"dt jjtzSt |}|j$||jfk(sJ|t&j(k(rdnd} t+j,|Dcgc]}t/t0|j2c}| z} t5j6| } | | j9z tt jj:| j=z } t | t |k(sJt5j>|dddddf| dd|j@tBjDtBjFd|jH} t5j>|| |j@tBjDtBjF| |jH} tKt+jL| }tKt+jL| dd}||ddf}||ddf}tO|| ||}tQ|dddf| \}}tQ|| \}}tQ|| \}}tQ|| \}}| d}tS| ||ddddf| dd|jT|jVjX}||z }|}t[j\td|d|zz |z}||z |z }|t^j`jc|z} ||zt^j`je|z}!tBjFdz}"d t[jfd |"|zzz}#d |z||"dzzz }$d |z||z d zz||"dzzd zz }%|t[j\d |#|$z|%zzz}&t;t jjd z|| z|!z|&zScc}wcc}w) NzM cannot consider any search space.Termination will never occur in this study.r.)XYis_categorical log_prior minimum_noise gpr_cacher!)rngg|=g@g?g?g)4rstater COMPLETElenrsys float_infomaxMARGIN_FOR_NUMARICAL_STABILITYgp_search_space SearchSpaceget_normalized_paramsdimwarningswarn __class____name__shaper MINIMIZErarrayrfloatvaluerwarn_and_convert_infmeanminstdfit_kernel_paramsr+rdefault_log_priorDEFAULT_MINIMUM_NOISE_VARrintargmax$_compute_gp_posterior_cov_two_thetas_compute_gp_posteriorr rrr/mathsqrt scipy_statsnormpdfcdflog)'r trialsstudy_directionoptuna_search_spacetcomplete_trialsrnormalized_params len_trialssign score_valsstandarized_score_valsgpr_t1gpr_ttheta_t_star_indextheta_t1_star_index theta_t_star theta_t1_star,cov_t_between_theta_t_star_and_theta_t1_starmu_t1_theta_t_with_nu_tvariance_t1_theta_t_with_nu_t_variance_t_theta_t1_starmu_t_theta_t_starvariance_t_theta_t_starmu_t1_theta_t1_stary_tkappa_t1theorem1_delta_mu_t_staralg1_delta_r_tilde_t_term1 theorem1_v theorem1_galg1_delta_r_tilde_t_term2alg1_delta_r_tilde_t_term3_lambda eq4_rhs_term1 eq4_rhs_term2 eq4_rhs_term3alg1_delta_r_tilde_t_term4s' r$evaluatezEMMREvaluator.evaluate{s7?&,O:;N;N0N1OO  $"3"3 3>>%%(FF F&223FG (>>O MM>>**+,>> >>%%(FF F)  &&:|7G7G*HHHH%(?(??rQXX_MtE1773MNQUU ,,Z8 ",z/@"@C NN    0E " )*c2C.DDDD%%SbS! ,$Sb)'66--99$($7$7 $$$'66--99$($7$7 !+A!BC!")),B3B,G"HI();Q)>? )*=q*@A 7[ u&8:M8 4 BW b!e $eB >!>'D). *!% * * *  *  *s r&rc|jtj|\}}|j|jfS)N) posteriorr from_numpyitem)x_paramsgprrFvars r$rOrOs6 e..x89ID# 99; ""r&c||k(rt|||dS|jtj|||gd\}}|jdk(sJ|dj S)NrT)joint)r0r0)rr)rOrrrr@r)r\r theta1_index theta2_indexrjcovars r$rNrNs~|#$%6|%DcJ1MM}} *L,+GHIQUHAu ;;&  ;   r&)r np.ndarrayrgp.GPRegressorr~ztuple[float, float]) r\rrrrrLrrLr~rC)) __future__rrPr4typingrrr<numpyroptuna._experimentalr"optuna.samplers._lazy_random_stateroptuna.search_spacer optuna.studyr 'optuna.terminator.improvement.evaluatorr r optuna.trialr r scipy.statsstatsrRr optuna._gpr acqf_modulerrrr8optuna._importsrr7rrOrNrr&r$rs"  3>9'VL$#%. :+  E _ %B/0K * +E!";