L i2ddlmZddlmZddlmZddlZddlmZddlmZddl Z ddl m Z ddl mZerddlZdd lmZdd lmZndd lmZed Zej,d Zdej,dej0zz Zej,d ej0zZej6ej,dej0zZdZd%dZ d&dZd'dZ d(dZ!GddeZ"Gdde"Z#Gdde"Z$Gdde"Z%Gdde"Z&Gdd e"Z'Gd!d"e"Z(Gd#d$e"Z)y))) annotations)ABC)abstractmethodN)cast) TYPE_CHECKING)get_non_dominated_box_bounds)_is_pareto_front) GPRegressor) SearchSpace) _LazyImporttorch?-q=ctjj|d|j|tj}d|dz z}tj |t tjdzS)NT) dimensionscrambleseeddtypeg@rr) r quasirandom SobolEnginedrawfloat64erfinvfloatnpsqrt)dim n_samplesr sobol_samplessampless U/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/optuna/_gp/acqf.py_sample_from_normal_sobolr%!sm%%1142 d9EMMd*]S()G << 5#4 44cxttj|jd}|j d|z }|j t jtt j|t jj|jjdd|z S)Nr)minmaxr )r(r+) rrlogshape unsqueezeclamp_r tensor_EPSrspecial logsumexpsum)Y_postnon_dominated_box_lower_boundsnon_dominated_box_intervalslog_n_qmc_samplesdiffs r$logehvir;-s bffV\\"%567   B "@ @DKKELLU]];A\K] == " "488:>>b>#9x " HK\ \\r&cd|zx}tjjt |zz| |zj t zzj }||dkx}x}jrUd|dzztz dt|ztjjt |zzzj z||<|S)aH Return E_{x ~ N(0, 1)}[max(0, x+z)] The calculation depends on the value of z for numerical stability. Please refer to Eq. (9) in the following paper for more details: https://arxiv.org/pdf/2310.20708.pdf NOTE: We do not use the third condition because [-10**100, 10**100] is an overly high range. rigrr) r r3erfc _SQRT_HALFexp _INV_SQRT_2PIr-numel _LOG_SQRT_2PI _SQRT_HALF_PIerfcx)zz_halfoutsmallz_smalls r$standard_logeirJAs7 emm00*qAA 7Q;    - . ceq3w&e((//1 7A:  =7*U]]-@-@*wAV-WWW\\^ _ E Jr&cft||z |jx}z |jzSN)rJsqrt_r-)meanvarf0sigmas r$logeirRZs, 4"9#))+)=> ?%))+ MMr&c6eZdZddZeddZddZd dZy) BaseAcquisitionFuncc ||_||_yrL) length_scales search_space)selfrVrWs r$__init__zBaseAcquisitionFunc.__init__`s*(r&ctrL)NotImplementedErrorrXxs r$ eval_acqfzBaseAcquisitionFunc.eval_acqfds!!r&ctj5|jtj|j j cdddS#1swYyxYwrL)r no_gradr^ from_numpydetachnumpyr\s r$eval_acqf_no_gradz%BaseAcquisitionFunc.eval_acqf_no_gradhsM ]]_ H>>%"2"21"56==?EEG H H Hs AAA(c|jdk(sJtj|jd}|j |}|j |j |jjjfS)NrT) ndimr rarequires_grad_r^backwarditemgradrbrc)rXr]x_tensorvals r$eval_acqf_with_gradz'BaseAcquisitionFunc.eval_acqf_with_gradlskvv{{##A&55d;nnX& xxz8==//177999r&N)rV np.ndarrayrWr returnNoner] torch.Tensorrorr)r]rnrorn)r]rnroztuple[float, np.ndarray])__name__ __module__ __qualname__rYrr^rdrmr&r$rTrT_s&)""H:r&rTc>eZdZ d dfd ZddZxZS)LogEIcd||_||_||_t||j |yrL_gpr_stabilizing_noise _thresholdsuperrYrVrXgprrW thresholdstabilizing_noise __class__s r$rYzLogEI.__init__u0 "3# **L9r&c*|jj|\}}tj|js%t |||j z|jStj|jddtjS)N)rNrOrPr+r) r{ posteriorrisneginfr}rRr|r zerosr.rrXr]rNrOs r$r^zLogEI.eval_acqfsqII''* c ;;t/ tt'>'>!>4?? S QWWSb\? r&r rr rWr rrrrrorprqrsrtrurYr^ __classcell__rs@r$rxrxtsB $) :  :" : : ! :  : r&rxc>eZdZ d dfd ZddZxZS)LogPIcd||_||_||_t||j |yrLrzrs r$rYzLogPI.__init__rr&c|jj|\}}tj||jz}tj j ||jz |z SrL)r{rr rr|r3log_ndtrr})rXr]rNrOrQs r$r^zLogPI.eval_acqfsXII''* c 3!8!889}}%%tdoo'=&FGGr&rrrqrrs@r$rrsC $) :  :" : : ! :  :Hr&rc8eZdZ dfd ZddZxZS)UCBcV||_||_t| |j|yrLr{_betar~rYrVrXrrWbetars r$rYz UCB.__init__(    **L9r&c|jj|\}}|tj|j|zzSrLr{rr rrrs r$r^z UCB.eval_acqf7II''* cejjc!1222r&rr rWr rrrorprqrrs@r$rr3: :": :  :3r&rc8eZdZ dfd ZddZxZS)LCBcV||_||_t| |j|yrLrrs r$rYz LCB.__init__rr&c|jj|\}}|tj|j|zz SrLrrs r$r^z LCB.eval_acqfrr&rrqrrs@r$rrrr&rcFeZdZ d dfd ZddZxZS)ConstrainedLogEIc t|t|k(r|sJt|||||_t||Dcgc]\}}t ||||c}}|_t ||j|ycc}}wrL) lenrx_acqfzipr_constraints_acqf_listr~rYrV) rXrrWrconstraints_gpr_listconstraints_threshold_listrr{r}rs r$rYzConstrainedLogEI.__init__s $ %-G)H HMa a3 i9JK %((<>X$Y'  j $ j2C D' # **L9 ' sA;cx|jjtfd|jDzS)Nc3@K|]}|jywrLr^.0acqfr]s r$ z-ConstrainedLogEI.eval_acqf..s- "&DNN1 - )rr^r5rr\s `r$r^zConstrainedLogEI.eval_acqfs;zz##A&- *.*E*E- *   r&r)rr rWr rrrlist[GPRegressor]r list[float]rrrorprqrrs@r$rrsV$): :": : 0 : %0 :!: :& r&rcFeZdZ d dfd ZddZxZS)LogEHVIc`dfd }||_||_tjd|||_|\|_}||j z j t|_t |)tj|D cgc]} | jc} d|ycc} w)Ncfj }|t|d}tj|d}tjtj d|zd|ztj }t||\}}tj| tj| fS)NF)assume_unique_lexsortedraxisg?g?) rcr rr* nextaftermaximuminfrr ra) loss_vals pareto_sols ref_pointlbsubsY_trains r$_get_non_dominated_box_boundsz7LogEHVI.__init__.._get_non_dominated_box_boundss (I#$4YX]$^_Kyq1I RZZiy%QSUSYSYZI3KKHC##SD)5+;+;SD+AA Ar&r+)r r!rrr)roz!tuple[torch.Tensor, torch.Tensor])r| _gpr_listr%r._fixed_samples_non_dominated_box_lower_bounds clamp_min_r2_non_dominated_box_intervalsr~rYrrNrV) rXgpr_listrWr n_qmc_samplesqmc_seedrrnon_dominated_box_upper_boundsrrs ` r$rYzLogEHVI.__init__s B#4!7 b!]  * + M,.L +T-Q-Q Q *T  ) x!H#"3"3!HqQS_`!Hs B+ crg}t|jD]g\}}|j|\}}tj||j z}|j |d|d|jd|fzzittj|d|j|jS)N).N.r+r,)r6r7r8) enumeraterrr rr|appendrr;stackrr)rXr]r6irrNrOstdevs r$r^zLogEHVI.eval_acqfs/ \FAs a(ID#JJsT%<%<<=E MM$y/E),X$Y'  j $ j2C D' # x!H#"3"3!HqQS_`' "Is B$B* ctfd|jD}|jttj |S||jj zS)Nc3@K|]}|jywrLrrs r$rz/ConstrainedLogEHVI.eval_acqf..8s%`DdnnQ&7%`r)r5rrrr Tensorr^)rXr]constraints_acqf_valuess ` r$r^zConstrainedLogEHVI.eval_acqf7sP"%%`DD_D_%`"` ::  &=> >&)=)=a)@@@r&r)rrrWr rztorch.Tensor | Nonerrrrrrrrrrrorprqrrs@r$rrsu$)a#a"a( a  a  a0a%0a!a a:Ar&r)r rr!rrrrorr)r6rrr7rrr8rrrorr)rErrrorr)rNrrrOrrrPrrorr)* __future__rabcrrmathtypingrrrcroptuna._hypervolumeroptuna.study._multi_objectiver r optuna._gp.gpr optuna._gp.search_spacer optuna._importsr rr>pir@rCr-rBr2r%r;rJrRrTrxrrrrrrrvr&r$rsS"  <:)3+  ETYYs^ IDIIa$''k**  #-( 1tww;/0   5] ]$0]".] ](2N :#:*  0H H. 3  3 3  3  * 87 !7 t"A,"Ar&