133 lines
3.7 KiB
Python
133 lines
3.7 KiB
Python
import sys
|
|
from enum import Enum
|
|
|
|
import numpy as np
|
|
|
|
|
|
# Exit status.
|
|
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.
|
|
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.
|
|
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,
|
|
}
|
|
|
|
# Printing options.
|
|
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,
|
|
)
|
|
},
|
|
}
|
|
|
|
# Constants.
|
|
BARRIER = 2.0 ** min(
|
|
100,
|
|
np.finfo(float).maxexp // 2,
|
|
-np.finfo(float).minexp // 2,
|
|
)
|