settings.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import sys
  2. from enum import Enum
  3. import numpy as np
  4. # Exit status.
  5. class ExitStatus(Enum):
  6. """
  7. Exit statuses.
  8. """
  9. RADIUS_SUCCESS = 0
  10. TARGET_SUCCESS = 1
  11. FIXED_SUCCESS = 2
  12. CALLBACK_SUCCESS = 3
  13. FEASIBLE_SUCCESS = 4
  14. MAX_EVAL_WARNING = 5
  15. MAX_ITER_WARNING = 6
  16. INFEASIBLE_ERROR = -1
  17. LINALG_ERROR = -2
  18. class Options(str, Enum):
  19. """
  20. Options.
  21. """
  22. DEBUG = "debug"
  23. FEASIBILITY_TOL = "feasibility_tol"
  24. FILTER_SIZE = "filter_size"
  25. HISTORY_SIZE = "history_size"
  26. MAX_EVAL = "maxfev"
  27. MAX_ITER = "maxiter"
  28. NPT = "nb_points"
  29. RHOBEG = "radius_init"
  30. RHOEND = "radius_final"
  31. SCALE = "scale"
  32. STORE_HISTORY = "store_history"
  33. TARGET = "target"
  34. VERBOSE = "disp"
  35. class Constants(str, Enum):
  36. """
  37. Constants.
  38. """
  39. DECREASE_RADIUS_FACTOR = "decrease_radius_factor"
  40. INCREASE_RADIUS_FACTOR = "increase_radius_factor"
  41. INCREASE_RADIUS_THRESHOLD = "increase_radius_threshold"
  42. DECREASE_RADIUS_THRESHOLD = "decrease_radius_threshold"
  43. DECREASE_RESOLUTION_FACTOR = "decrease_resolution_factor"
  44. LARGE_RESOLUTION_THRESHOLD = "large_resolution_threshold"
  45. MODERATE_RESOLUTION_THRESHOLD = "moderate_resolution_threshold"
  46. LOW_RATIO = "low_ratio"
  47. HIGH_RATIO = "high_ratio"
  48. VERY_LOW_RATIO = "very_low_ratio"
  49. PENALTY_INCREASE_THRESHOLD = "penalty_increase_threshold"
  50. PENALTY_INCREASE_FACTOR = "penalty_increase_factor"
  51. SHORT_STEP_THRESHOLD = "short_step_threshold"
  52. LOW_RADIUS_FACTOR = "low_radius_factor"
  53. BYRD_OMOJOKUN_FACTOR = "byrd_omojokun_factor"
  54. THRESHOLD_RATIO_CONSTRAINTS = "threshold_ratio_constraints"
  55. LARGE_SHIFT_FACTOR = "large_shift_factor"
  56. LARGE_GRADIENT_FACTOR = "large_gradient_factor"
  57. RESOLUTION_FACTOR = "resolution_factor"
  58. IMPROVE_TCG = "improve_tcg"
  59. # Default options.
  60. DEFAULT_OPTIONS = {
  61. Options.DEBUG.value: False,
  62. Options.FEASIBILITY_TOL.value: np.sqrt(np.finfo(float).eps),
  63. Options.FILTER_SIZE.value: sys.maxsize,
  64. Options.HISTORY_SIZE.value: sys.maxsize,
  65. Options.MAX_EVAL.value: lambda n: 500 * n,
  66. Options.MAX_ITER.value: lambda n: 1000 * n,
  67. Options.NPT.value: lambda n: 2 * n + 1,
  68. Options.RHOBEG.value: 1.0,
  69. Options.RHOEND.value: 1e-6,
  70. Options.SCALE.value: False,
  71. Options.STORE_HISTORY.value: False,
  72. Options.TARGET.value: -np.inf,
  73. Options.VERBOSE.value: False,
  74. }
  75. # Default constants.
  76. DEFAULT_CONSTANTS = {
  77. Constants.DECREASE_RADIUS_FACTOR.value: 0.5,
  78. Constants.INCREASE_RADIUS_FACTOR.value: np.sqrt(2.0),
  79. Constants.INCREASE_RADIUS_THRESHOLD.value: 2.0,
  80. Constants.DECREASE_RADIUS_THRESHOLD.value: 1.4,
  81. Constants.DECREASE_RESOLUTION_FACTOR.value: 0.1,
  82. Constants.LARGE_RESOLUTION_THRESHOLD.value: 250.0,
  83. Constants.MODERATE_RESOLUTION_THRESHOLD.value: 16.0,
  84. Constants.LOW_RATIO.value: 0.1,
  85. Constants.HIGH_RATIO.value: 0.7,
  86. Constants.VERY_LOW_RATIO.value: 0.01,
  87. Constants.PENALTY_INCREASE_THRESHOLD.value: 1.5,
  88. Constants.PENALTY_INCREASE_FACTOR.value: 2.0,
  89. Constants.SHORT_STEP_THRESHOLD.value: 0.5,
  90. Constants.LOW_RADIUS_FACTOR.value: 0.1,
  91. Constants.BYRD_OMOJOKUN_FACTOR.value: 0.8,
  92. Constants.THRESHOLD_RATIO_CONSTRAINTS.value: 2.0,
  93. Constants.LARGE_SHIFT_FACTOR.value: 10.0,
  94. Constants.LARGE_GRADIENT_FACTOR.value: 10.0,
  95. Constants.RESOLUTION_FACTOR.value: 2.0,
  96. Constants.IMPROVE_TCG.value: True,
  97. }
  98. # Printing options.
  99. PRINT_OPTIONS = {
  100. "threshold": 6,
  101. "edgeitems": 2,
  102. "linewidth": sys.maxsize,
  103. "formatter": {
  104. "float_kind": lambda x: np.format_float_scientific(
  105. x,
  106. precision=3,
  107. unique=False,
  108. pad_left=2,
  109. )
  110. },
  111. }
  112. # Constants.
  113. BARRIER = 2.0 ** min(
  114. 100,
  115. np.finfo(float).maxexp // 2,
  116. -np.finfo(float).minexp // 2,
  117. )