L iddlmZddlZddlmZddlmZddlmZddlm Z ddlm Z ddl m Z dd l m Z dd l mZdd l mZdd lmZGd dej$ZedGddeZy)) annotationsN)experimental_class)Study)BaseErrorEvaluator)CrossValidationErrorEvaluator)StaticErrorEvaluator)BaseImprovementEvaluator)BestValueStagnationEvaluator)DEFAULT_MIN_N_TRIALS)RegretBoundEvaluator) TrialStatec6eZdZdZej ddZy)BaseTerminatorzBase class for terminators.cy)N)selfstudys b/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/optuna/terminator/terminator.pyshould_terminatezBaseTerminator.should_terminates Nrrreturnbool)__name__ __module__ __qualname____doc__abcabstractmethodrrrrrrs%  rr) metaclassz3.2.0c>eZdZdZddef ddZddZddZy) TerminatoraT Automatic stopping mechanism for Optuna studies. This class implements an automatic stopping mechanism for Optuna studies, aiming to prevent unnecessary computation. The study is terminated when the statistical error, e.g. cross-validation error, exceeds the room left for optimization. For further information about the algorithm, please refer to the following paper: - `A. Makarova et al. Automatic termination for hyperparameter optimization. `__ Args: improvement_evaluator: An evaluator object for assessing the room left for optimization. Defaults to a :class:`~optuna.terminator.improvement.evaluator.RegretBoundEvaluator` object. error_evaluator: An evaluator for calculating the statistical error, e.g. cross-validation error. Defaults to a :class:`~optuna.terminator.CrossValidationErrorEvaluator` object. min_n_trials: The minimum number of trials before termination is considered. Defaults to ``20``. Raises: ValueError: If ``min_n_trials`` is not a positive integer. Example: .. testcode:: import logging import sys from sklearn.datasets import load_wine from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score from sklearn.model_selection import KFold import optuna from optuna.terminator import Terminator from optuna.terminator import report_cross_validation_scores study = optuna.create_study(direction="maximize") terminator = Terminator() min_n_trials = 20 while True: trial = study.ask() X, y = load_wine(return_X_y=True) clf = RandomForestClassifier( max_depth=trial.suggest_int("max_depth", 2, 32), min_samples_split=trial.suggest_float("min_samples_split", 0, 1), criterion=trial.suggest_categorical("criterion", ("gini", "entropy")), ) scores = cross_val_score(clf, X, y, cv=KFold(n_splits=5, shuffle=True)) report_cross_validation_scores(trial, scores) value = scores.mean() logging.info(f"Trial #{trial.number} finished with value {value}.") study.tell(trial, value) if trial.number > min_n_trials and terminator.should_terminate(study): logging.info("Terminated by Optuna Terminator!") break .. seealso:: Please refer to :class:`~optuna.terminator.TerminatorCallback` for how to use the terminator mechanism with the :func:`~optuna.study.Study.optimize` method. Nc|dkr td|xs t|_|xs|j|_||_y)Nrz4`min_n_trials` is expected to be a positive integer.) ValueErrorr _improvement_evaluator_initialize_error_evaluator_error_evaluator _min_n_trials)rimprovement_evaluatorerror_evaluator min_n_trialss r__init__zTerminator.__init__esG 1 ST T&;&U?S?U# / U43S3S3U)rcbt|jtr tdSt S)Nr)constant) isinstancer%r rr)rs rr&z&Terminator._initialize_error_evaluatorrs' d113O P'3 3,..rcH|jtjg}t||jkry|j j |j|j}|jj |j|j}||k}|S)zJJudge whether the study should be terminated based on the reported values.)statesF)trialsstudy_direction) get_trialsr COMPLETElenr(r%evaluater2 directionr')rrr2 improvementerrorrs rrzTerminator.should_terminatews!!**=*=)>!? v;++ +11::<<!OO; %%..<</ '.r)r)zBaseImprovementEvaluator | Noner*zBaseErrorEvaluator | Noner+intrNone)rrr)rrrrr r,r&rrrrr"r"sKHXBF590 *> *3 * *  */  rr") __future__rroptuna._experimentalroptuna.study.studyroptuna.terminator.errorevalrrr'optuna.terminator.improvement.evaluatorr r r r optuna.trialr ABCMetarr"rrrrDs\" 3$:E<LPHH# s{{ Gn n n r