|
import sys |
|
from enum import Enum |
|
|
|
import numpy as np |
|
|
|
|
|
|
|
class ExitStatus(Enum): |
|
""" |
|
Exit statuses. |
|
""" |
|
|
|
RADIUS_SUCCESS = 0 |
|
TARGET_SUCCESS = 1 |
|
FIXED_SUCCESS = 2 |
|
CALLBACK_SUCCESS = 3 |
|
FEASIBLE_SUCCESS = 4 |
|
MAX_EVAL_WARNING = 5 |
|
MAX_ITER_WARNING = 6 |
|
INFEASIBLE_ERROR = -1 |
|
LINALG_ERROR = -2 |
|
|
|
|
|
class Options(str, Enum): |
|
""" |
|
Options. |
|
""" |
|
|
|
DEBUG = "debug" |
|
FEASIBILITY_TOL = "feasibility_tol" |
|
FILTER_SIZE = "filter_size" |
|
HISTORY_SIZE = "history_size" |
|
MAX_EVAL = "maxfev" |
|
MAX_ITER = "maxiter" |
|
NPT = "nb_points" |
|
RHOBEG = "radius_init" |
|
RHOEND = "radius_final" |
|
SCALE = "scale" |
|
STORE_HISTORY = "store_history" |
|
TARGET = "target" |
|
VERBOSE = "disp" |
|
|
|
|
|
class Constants(str, Enum): |
|
""" |
|
Constants. |
|
""" |
|
|
|
DECREASE_RADIUS_FACTOR = "decrease_radius_factor" |
|
INCREASE_RADIUS_FACTOR = "increase_radius_factor" |
|
INCREASE_RADIUS_THRESHOLD = "increase_radius_threshold" |
|
DECREASE_RADIUS_THRESHOLD = "decrease_radius_threshold" |
|
DECREASE_RESOLUTION_FACTOR = "decrease_resolution_factor" |
|
LARGE_RESOLUTION_THRESHOLD = "large_resolution_threshold" |
|
MODERATE_RESOLUTION_THRESHOLD = "moderate_resolution_threshold" |
|
LOW_RATIO = "low_ratio" |
|
HIGH_RATIO = "high_ratio" |
|
VERY_LOW_RATIO = "very_low_ratio" |
|
PENALTY_INCREASE_THRESHOLD = "penalty_increase_threshold" |
|
PENALTY_INCREASE_FACTOR = "penalty_increase_factor" |
|
SHORT_STEP_THRESHOLD = "short_step_threshold" |
|
LOW_RADIUS_FACTOR = "low_radius_factor" |
|
BYRD_OMOJOKUN_FACTOR = "byrd_omojokun_factor" |
|
THRESHOLD_RATIO_CONSTRAINTS = "threshold_ratio_constraints" |
|
LARGE_SHIFT_FACTOR = "large_shift_factor" |
|
LARGE_GRADIENT_FACTOR = "large_gradient_factor" |
|
RESOLUTION_FACTOR = "resolution_factor" |
|
IMPROVE_TCG = "improve_tcg" |
|
|
|
|
|
|
|
DEFAULT_OPTIONS = { |
|
Options.DEBUG.value: False, |
|
Options.FEASIBILITY_TOL.value: np.sqrt(np.finfo(float).eps), |
|
Options.FILTER_SIZE.value: sys.maxsize, |
|
Options.HISTORY_SIZE.value: sys.maxsize, |
|
Options.MAX_EVAL.value: lambda n: 500 * n, |
|
Options.MAX_ITER.value: lambda n: 1000 * n, |
|
Options.NPT.value: lambda n: 2 * n + 1, |
|
Options.RHOBEG.value: 1.0, |
|
Options.RHOEND.value: 1e-6, |
|
Options.SCALE.value: False, |
|
Options.STORE_HISTORY.value: False, |
|
Options.TARGET.value: -np.inf, |
|
Options.VERBOSE.value: False, |
|
} |
|
|
|
|
|
DEFAULT_CONSTANTS = { |
|
Constants.DECREASE_RADIUS_FACTOR.value: 0.5, |
|
Constants.INCREASE_RADIUS_FACTOR.value: np.sqrt(2.0), |
|
Constants.INCREASE_RADIUS_THRESHOLD.value: 2.0, |
|
Constants.DECREASE_RADIUS_THRESHOLD.value: 1.4, |
|
Constants.DECREASE_RESOLUTION_FACTOR.value: 0.1, |
|
Constants.LARGE_RESOLUTION_THRESHOLD.value: 250.0, |
|
Constants.MODERATE_RESOLUTION_THRESHOLD.value: 16.0, |
|
Constants.LOW_RATIO.value: 0.1, |
|
Constants.HIGH_RATIO.value: 0.7, |
|
Constants.VERY_LOW_RATIO.value: 0.01, |
|
Constants.PENALTY_INCREASE_THRESHOLD.value: 1.5, |
|
Constants.PENALTY_INCREASE_FACTOR.value: 2.0, |
|
Constants.SHORT_STEP_THRESHOLD.value: 0.5, |
|
Constants.LOW_RADIUS_FACTOR.value: 0.1, |
|
Constants.BYRD_OMOJOKUN_FACTOR.value: 0.8, |
|
Constants.THRESHOLD_RATIO_CONSTRAINTS.value: 2.0, |
|
Constants.LARGE_SHIFT_FACTOR.value: 10.0, |
|
Constants.LARGE_GRADIENT_FACTOR.value: 10.0, |
|
Constants.RESOLUTION_FACTOR.value: 2.0, |
|
Constants.IMPROVE_TCG.value: True, |
|
} |
|
|
|
|
|
PRINT_OPTIONS = { |
|
"threshold": 6, |
|
"edgeitems": 2, |
|
"linewidth": sys.maxsize, |
|
"formatter": { |
|
"float_kind": lambda x: np.format_float_scientific( |
|
x, |
|
precision=3, |
|
unique=False, |
|
pad_left=2, |
|
) |
|
}, |
|
} |
|
|
|
|
|
BARRIER = 2.0 ** min( |
|
100, |
|
np.finfo(float).maxexp // 2, |
|
-np.finfo(float).minexp // 2, |
|
) |
|
|