dfbench 0.2.1__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. {dfbench-0.2.1 → dfbench-0.3.0}/PKG-INFO +24 -19
  2. {dfbench-0.2.1 → dfbench-0.3.0}/README.md +20 -17
  3. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Algorithm-Status.md +7 -7
  4. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Algorithms.md +120 -119
  5. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Architecture-Overview.md +16 -16
  6. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Benchmarking.md +13 -13
  7. {dfbench-0.2.1 → dfbench-0.3.0}/docs/FAQ.md +6 -6
  8. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Home.md +4 -4
  9. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Implementing-a-New-Algorithm.md +30 -26
  10. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Installation.md +2 -2
  11. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Metrics-Reference.md +26 -26
  12. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Objective-API-Reference.md +48 -46
  13. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Problems.md +33 -33
  14. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Storage-and-Checkpointing.md +19 -4
  15. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Testing.md +14 -13
  16. {dfbench-0.2.1 → dfbench-0.3.0}/docs/Utilities-and-Helpers.md +6 -6
  17. {dfbench-0.2.1 → dfbench-0.3.0}/docs/algorithm-status/main.typ +8 -8
  18. {dfbench-0.2.1 → dfbench-0.3.0}/docs/algorithm-status/template.typ +12 -12
  19. {dfbench-0.2.1 → dfbench-0.3.0}/pyproject.toml +4 -2
  20. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/__init__.py +2 -2
  21. dfbench-0.3.0/src/dfbench/algorithms/__init__.py +262 -0
  22. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/_dfo_common.py +7 -7
  23. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/_scipy_common.py +14 -8
  24. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/nelder_mead.py +7 -1
  25. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/omads_mads.py +6 -7
  26. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/pdfo/lincoa.py +8 -20
  27. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/pdfo/newuoa.py +3 -3
  28. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/pdfo/uobyqa.py +4 -4
  29. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/powell.py +7 -1
  30. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/pybobyqa.py +5 -5
  31. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/__init__.py +0 -2
  32. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/cmaes_sep_cma.py +5 -6
  33. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/evosax_es.py +8 -10
  34. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/evox_es.py +28 -30
  35. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/evox_pso.py +12 -12
  36. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/jax_es.py +18 -20
  37. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/nevergrad/_common.py +2 -2
  38. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/nevergrad/ngopt.py +5 -9
  39. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/nevergrad/oneplusone.py +4 -8
  40. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/nevergrad/tbpsa.py +5 -9
  41. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/pycma_cmaes.py +17 -21
  42. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/generative/vae_sampling.py +8 -3
  43. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/global_search/__init__.py +2 -0
  44. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/global_search/basin_hopping.py +10 -5
  45. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/global_search/dual_annealing.py +7 -1
  46. {dfbench-0.2.1/src/dfbench/algorithms/evolutionary → dfbench-0.3.0/src/dfbench/algorithms/global_search}/random_search.py +2 -2
  47. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/__init__.py +1 -1
  48. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/adam_gd.py +6 -1
  49. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/custom_jax.py +7 -1
  50. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/lbfgs_gd.py +7 -1
  51. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/na_adam_gd.py +7 -1
  52. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/_common.py +8 -2
  53. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adabelief.py +1 -2
  54. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adadelta.py +1 -2
  55. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adafactor.py +1 -2
  56. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adagrad.py +1 -2
  57. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adam.py +1 -2
  58. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adamax.py +1 -2
  59. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adamaxw.py +1 -2
  60. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adamw.py +1 -2
  61. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/adan.py +1 -2
  62. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/amsgrad.py +1 -2
  63. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/lamb.py +1 -2
  64. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/lion.py +1 -2
  65. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/lookahead.py +3 -3
  66. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/nadam.py +1 -2
  67. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/nadamw.py +1 -2
  68. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/noisy_sgd.py +1 -2
  69. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/novograd.py +1 -2
  70. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/oadam.py +1 -2
  71. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/ogd.py +1 -2
  72. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/polyak_sgd.py +2 -2
  73. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/radam.py +1 -2
  74. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/rmsprop.py +1 -2
  75. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/rprop.py +1 -2
  76. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/sam.py +2 -3
  77. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/schedule_free_adam.py +1 -3
  78. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/sgd.py +1 -2
  79. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/sign.py +1 -2
  80. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/sm3.py +1 -2
  81. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/sophia.py +3 -3
  82. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/yogi.py +1 -2
  83. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax_lbfgs.py +9 -3
  84. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/sa_gd.py +7 -1
  85. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/_common.py +18 -23
  86. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/sr1.py +6 -1
  87. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/__init__.py +2 -2
  88. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/ax_baxus.py +11 -6
  89. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/ax_saasbo.py +29 -25
  90. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/__init__.py +2 -2
  91. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/_botorch_common.py +10 -4
  92. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_bo.py +14 -9
  93. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_gebo.py +14 -9
  94. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_linebo.py +12 -7
  95. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_qkg.py +11 -7
  96. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_qnei.py +12 -8
  97. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_rembo.py +13 -8
  98. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/botorch/botorch_turbo.py +11 -6
  99. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/hebo_bo.py +6 -7
  100. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/restir.py +11 -6
  101. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/smac_bo.py +7 -8
  102. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/surrogate_based/turbo_lbfgs.py +22 -12
  103. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/utils/gp.py +6 -1
  104. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/utils/initial_design.py +6 -1
  105. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/utils/misc.py +7 -1
  106. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/algorithm.py +5 -4
  107. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/display.py +6 -6
  108. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/objective.py +57 -38
  109. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/problem.py +5 -5
  110. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/exporter.py +58 -16
  111. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/manager.py +1 -1
  112. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/saveconfig.py +1 -1
  113. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/serializers.py +2 -2
  114. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/state.py +18 -18
  115. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/base_problem.py +8 -2
  116. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/uifo/uifo_problem.py +9 -9
  117. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/voyager/constrained_voyager_problem.py +1 -1
  118. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/voyager/voyager_problem.py +2 -2
  119. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/voyager/voyager_tuning_problem.py +2 -2
  120. {dfbench-0.2.1 → dfbench-0.3.0}/tests/slow/test_algorithms_integration.py +1 -1
  121. {dfbench-0.2.1 → dfbench-0.3.0}/tests/slow/test_benchmark_full.py +2 -2
  122. dfbench-0.3.0/tests/slow/test_problem_bounds_gradients.py +106 -0
  123. {dfbench-0.2.1 → dfbench-0.3.0}/tests/slow/test_problems_full.py +6 -6
  124. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_algorithm_protocol.py +2 -2
  125. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_algorithms_uniform.py +7 -7
  126. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_algorithms_unit.py +11 -9
  127. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_api_imports.py +3 -3
  128. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_benchmark_smoke.py +4 -4
  129. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_cma_family.py +5 -5
  130. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_config.py +10 -10
  131. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_dfo_algorithms.py +1 -1
  132. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_display.py +12 -12
  133. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_init_env.py +2 -2
  134. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_metrics.py +16 -16
  135. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_objective_invariants.py +29 -29
  136. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_objective_penalty_fn.py +3 -4
  137. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_objective_randomness.py +10 -10
  138. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_problem_bounds_overrides.py +4 -4
  139. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_problem_protocol.py +4 -4
  140. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_problem_spec.py +2 -2
  141. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_scipy_wrapper.py +1 -17
  142. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_storage.py +33 -9
  143. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_utils.py +5 -5
  144. dfbench-0.2.1/src/dfbench/algorithms/__init__.py +0 -221
  145. {dfbench-0.2.1 → dfbench-0.3.0}/.gitignore +0 -0
  146. {dfbench-0.2.1 → dfbench-0.3.0}/LICENSE +0 -0
  147. {dfbench-0.2.1 → dfbench-0.3.0}/docs/_Sidebar.md +0 -0
  148. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/__init__.py +0 -0
  149. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/derivative_free/pdfo/__init__.py +0 -0
  150. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/evolutionary/nevergrad/__init__.py +0 -0
  151. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/optax/__init__.py +0 -0
  152. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/__init__.py +0 -0
  153. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/bfgs.py +0 -0
  154. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/cobyla.py +0 -0
  155. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/cobyqa.py +0 -0
  156. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/dogleg.py +0 -0
  157. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/lbfgsb.py +0 -0
  158. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/newton_cg.py +0 -0
  159. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/nonlinear_cg.py +0 -0
  160. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/slsqp.py +0 -0
  161. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/tnc.py +0 -0
  162. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/trust_constr.py +0 -0
  163. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/trust_krylov.py +0 -0
  164. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/gradient_based/scipy/trust_ncg.py +0 -0
  165. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/utils/__init__.py +0 -0
  166. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/algorithms/utils/weighted_acq.py +0 -0
  167. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/benchmark/__init__.py +0 -0
  168. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/benchmark/benchmark.py +0 -0
  169. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/benchmark/metrics.py +0 -0
  170. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/_init_env.py +0 -0
  171. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/config.py +0 -0
  172. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/__init__.py +0 -0
  173. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/backends.py +0 -0
  174. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/storage/resolver.py +0 -0
  175. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/core/utils.py +0 -0
  176. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/__init__.py +0 -0
  177. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/uifo/__init__.py +0 -0
  178. {dfbench-0.2.1 → dfbench-0.3.0}/src/dfbench/problems/voyager/__init__.py +0 -0
  179. {dfbench-0.2.1 → dfbench-0.3.0}/tests/__init__.py +0 -0
  180. {dfbench-0.2.1 → dfbench-0.3.0}/tests/conftest.py +0 -0
  181. {dfbench-0.2.1 → dfbench-0.3.0}/tests/slow/__init__.py +0 -0
  182. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_bo_batch.py +0 -0
  183. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_custom_jax_batch.py +0 -0
  184. {dfbench-0.2.1 → dfbench-0.3.0}/tests/test_objective_space_mode.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dfbench
3
- Version: 0.2.1
4
- Summary: Differometor Benchmark - Optimization algorithms and problem definitions
3
+ Version: 0.3.0
4
+ Summary: dfbench: A Black-Box Optimization Framework for JAX-Differentiable Gravitational Wave Detector Discovery
5
5
  Project-URL: Homepage, https://github.com/artificial-scientist-lab/Differometor-Benchmark
6
6
  Project-URL: Repository, https://github.com/artificial-scientist-lab/Differometor-Benchmark
7
7
  Project-URL: Documentation, https://github.com/artificial-scientist-lab/Differometor-Benchmark/tree/main/docs
@@ -34,6 +34,7 @@ Requires-Dist: cmaes>=0.10.0; extra == 'all'
34
34
  Requires-Dist: evosax>=0.1.6; extra == 'all'
35
35
  Requires-Dist: evox>=1.3.0; extra == 'all'
36
36
  Requires-Dist: gpytorch>=1.14; extra == 'all'
37
+ Requires-Dist: hebo>=0.3.2; extra == 'all'
37
38
  Requires-Dist: nevergrad>=1.0.12; extra == 'all'
38
39
  Requires-Dist: omads>=2408.0; extra == 'all'
39
40
  Requires-Dist: optax>=0.2.6; extra == 'all'
@@ -54,6 +55,7 @@ Provides-Extra: bo
54
55
  Requires-Dist: ax-platform>=1.2.4; extra == 'bo'
55
56
  Requires-Dist: botorch>=0.16.1; extra == 'bo'
56
57
  Requires-Dist: gpytorch>=1.14; extra == 'bo'
58
+ Requires-Dist: hebo>=0.3.2; extra == 'bo'
57
59
  Requires-Dist: torch>=2.9.1; extra == 'bo'
58
60
  Provides-Extra: cuda12
59
61
  Requires-Dist: jax[cuda12]==0.9.0.1; extra == 'cuda12'
@@ -88,11 +90,14 @@ Provides-Extra: torch
88
90
  Requires-Dist: torch>=2.9.1; extra == 'torch'
89
91
  Description-Content-Type: text/markdown
90
92
 
91
- > [!IMPORTANT]
92
- > **BETA RELEASE:** This repository is currently in beta. The official competition will start on **July ~7**.
93
-
94
93
  # Differometor Benchmark
95
94
 
95
+ [![image](https://img.shields.io/pypi/v/dfbench.svg)](https://pypi.python.org/pypi/dfbench)
96
+ [![image](https://img.shields.io/pypi/l/dfbench)](https://pypi.python.org/pypi/dfbench)
97
+ [![image](https://img.shields.io/pypi/pyversions/dfbench.svg)](https://pypi.python.org/pypi/dfbench)
98
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
99
+ [![Tests](https://img.shields.io/github/actions/workflow/status/artificial-scientist-lab/Differometor-Benchmark/tests.yaml?branch=main&label=tests&logo=github)](https://github.com/artificial-scientist-lab/Differometor-Benchmark/actions/workflows/tests.yaml)
100
+
96
101
  A benchmarking framework for optimization algorithms on gravitational-wave detector design problems, built on top of the [Differometor](https://github.com/artificial-scientist-lab/Differometor) simulator.
97
102
 
98
103
  > **For detailed documentation, see the [Wiki](https://github.com/artificial-scientist-lab/Differometor-Benchmark/wiki).**
@@ -135,7 +140,7 @@ obj.plot_loss()
135
140
  obj.save_run_to_file("my_run.npz")
136
141
  ```
137
142
 
138
- **A loss below 0 means your solution beats the real Voyager detector's sensitivity.** (On `VoyagerProblem` without physical constraints you might be burning mirrors.)
143
+ **A loss below 0 means your solution beats the real Voyager detector's sensitivity.** (On `VoyagerProblem` without physical constraints, you might be burning mirrors.)
139
144
 
140
145
  ### Evaluation Methods
141
146
 
@@ -157,8 +162,8 @@ The problems are JAX-based and differentiable up to second order. Use whichever
157
162
  ```python
158
163
  from dfbench import t2j, j2t
159
164
 
160
- params_jax = t2j(params_torch) # Torch JAX
161
- losses_torch = j2t(obj.vmap_value(params_jax)) # JAX Torch
165
+ params_jax = t2j(params_torch) # Torch -> JAX
166
+ losses_torch = j2t(obj.vmap_value(params_jax)) # JAX -> Torch
162
167
  ```
163
168
 
164
169
  This adds negligible overhead compared to the objective function itself.
@@ -226,8 +231,8 @@ OptimizationAlgorithm.optimize()
226
231
 
227
232
 
228
233
  ┌───────────┐ records losses, params, grads, timestamps
229
- │ Objective │ ──► enforces time / eval budgets
230
- └─────┬─────┘ bounded unbounded sigmoid transform
234
+ │ Objective │ ──> enforces time / eval budgets
235
+ └─────┬─────┘ bounded <-> unbounded sigmoid transform
231
236
 
232
237
 
233
238
  ContinuousProblem (VoyagerProblem, VoyagerTuningProblem, ConstrainedVoyagerProblem, UIFOProblem)
@@ -250,15 +255,15 @@ src/dfbench/
250
255
  │ ├── problem.py # ContinuousProblem ABC + ProblemSpec
251
256
  │ ├── algorithm.py # OptimizationAlgorithm ABC + AlgorithmType enum
252
257
  │ ├── objective.py # Objective wrapper (central piece)
253
- │ └── utils.py # torchjax conversion, inverse sigmoid
258
+ │ └── utils.py # torch<->jax conversion, inverse sigmoid
254
259
  ├── algorithms/
255
260
  │ ├── derivative_free/ # OMADS, PDFO/Py-BOBYQA, NelderMead, Powell
256
- │ ├── global_search/ # SciPy BasinHopping, DualAnnealing
257
- │ ├── evolutionary/ # RandomSearch, EvoxPSO, EvoxES, Nevergrad, CMA family
261
+ │ ├── global_search/ # RandomSearch, SciPy BasinHopping, DualAnnealing
262
+ │ ├── evolutionary/ # EvoxPSO, EvoxES, Nevergrad, CMA family
258
263
  │ ├── gradient_based/
259
264
  │ │ ├── optax/ # 34 Optax-based optimizers (OptaxAdam, OptaxLAMB, ...)
260
- │ │ ├── scipy/ # 13 SciPy-based optimizers (BFGS, TNC, SLSQP, )
261
- │ │ ├── custom_jax.py # Native-JAX custom/hybrid batch (SGLD, ASAM, GDL-BFGS, )
265
+ │ │ ├── scipy/ # 13 SciPy-based optimizers (BFGS, TNC, SLSQP, ...)
266
+ │ │ ├── custom_jax.py # Native-JAX custom/hybrid batch (SGLD, ASAM, GD->L-BFGS, ...)
262
267
  │ │ └── *.py # Custom-loop algorithms (AdamGD, LBFGSGD, SAGD, NAAdamGD, OptaxLBFGS)
263
268
  │ ├── surrogate_based/
264
269
  │ │ ├── botorch/ # BotorchBO, BotorchTuRBO, BotorchqNEI, BotorchqKG,
@@ -369,7 +374,7 @@ The interface is designed to make this as simple as possible. You write the opti
369
374
 
370
375
  1. Subclass `OptimizationAlgorithm`
371
376
  2. Declare `algorithm_str` and `algorithm_type`
372
- 3. Implement `optimize(objective, ...) None`
377
+ 3. Implement `optimize(objective, ...) -> None`
373
378
  4. Use `Objective` for all function evaluations
374
379
  5. The `Objective` is mutated in place, thereby no return is needed
375
380
 
@@ -392,7 +397,7 @@ class MyAlgorithm(OptimizationAlgorithm):
392
397
  """My optimization algorithm."""
393
398
 
394
399
  algorithm_str = "my_algorithm"
395
- algorithm_type = AlgorithmType.EVOLUTIONARY # match one of the algorithms/ subfolders
400
+ algorithm_type = AlgorithmType.GLOBAL_SEARCH # match one of the algorithms/ subfolders
396
401
 
397
402
  def __init__(self, batch_size: int = 50) -> None:
398
403
  """Algorithm-level meta-parameters that don't change between runs."""
@@ -513,7 +518,6 @@ See [Objective API Reference](https://github.com/artificial-scientist-lab/Differ
513
518
  | `BFGS`, `LBFGSB`, `NonlinearCG`, `NewtonCG` | Gradient | Classical SciPy gradient and quasi-Newton methods |
514
519
  | `TrustNCG`, `TrustKrylov`, `TrustConstr`, `Dogleg`, `SR1` | Gradient | Trust-region and constrained SciPy methods |
515
520
  | `TNC`, `SLSQP`, `COBYQA`, `COBYLA` | Gradient | Bounded physical-space SciPy solvers |
516
- | `RandomSearch` | Evolutionary | Unbiased baseline, no hyperparameters |
517
521
  | `EvoxPSO` | Evolutionary | Swarm intelligence, many variants (CLPSO, CSO, ...) |
518
522
  | `EvoxES` | Evolutionary | CMA-ES, OpenES, XNES, and more (EvoX backend) |
519
523
  | `PyCMACMAES` | Evolutionary | Vanilla CMA-ES (pycma backend) |
@@ -529,6 +533,7 @@ See [Objective API Reference](https://github.com/artificial-scientist-lab/Differ
529
533
  | `OmadsMADS`, `OmadsOrthoMADS` | Derivative-Free | MADS / OrthoMADS direct search (OMADS) |
530
534
  | `PDFOUOBYQA`, `PDFONEWUOA`, `PDFOLINCOA`, `PyBOBYQA` | Derivative-Free | Powell-style trust-region DFO (PDFO + Py-BOBYQA) |
531
535
  | `NelderMead`, `Powell` | Derivative-Free | SciPy classical simplex / direction-set search |
536
+ | `RandomSearch` | Global Search | Unbiased, derivative-free global search baseline, no hyperparameters |
532
537
  | `BasinHopping`, `DualAnnealing` | Global Search | SciPy stochastic global optimization |
533
538
  | `NevergradOnePlusOne`, `NevergradTBPSA`, `NevergradNGOpt` | Evolutionary | Nevergrad rugged-landscape baselines |
534
539
  | `BotorchBO` | Surrogate | Sample-efficient Bayesian Optimization |
@@ -557,7 +562,7 @@ Reference implementations worth reading:
557
562
  - `gradient_based/adam_gd.py`: gradient-based pattern (custom loop)
558
563
  - `gradient_based/optax/adam.py`: Optax wrapper pattern (minimal subclass)
559
564
  - `gradient_based/scipy/_common.py`: shared SciPy wrapper, caching, and budget handling
560
- - `evolutionary/random_search.py`: simplest batched example
565
+ - `global_search/random_search.py`: simplest batched example
561
566
  - `evolutionary/evox_es.py`: wrapping an external library (EvoX/PyTorch)
562
567
  - `evolutionary/pycma_cmaes.py`: wrapping pycma (ask/tell, restart strategies)
563
568
  - `evolutionary/jax_es.py`: native JAX ES without external library
@@ -1,8 +1,11 @@
1
- > [!IMPORTANT]
2
- > **BETA RELEASE:** This repository is currently in beta. The official competition will start on **July ~7**.
3
-
4
1
  # Differometor Benchmark
5
2
 
3
+ [![image](https://img.shields.io/pypi/v/dfbench.svg)](https://pypi.python.org/pypi/dfbench)
4
+ [![image](https://img.shields.io/pypi/l/dfbench)](https://pypi.python.org/pypi/dfbench)
5
+ [![image](https://img.shields.io/pypi/pyversions/dfbench.svg)](https://pypi.python.org/pypi/dfbench)
6
+ [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
7
+ [![Tests](https://img.shields.io/github/actions/workflow/status/artificial-scientist-lab/Differometor-Benchmark/tests.yaml?branch=main&label=tests&logo=github)](https://github.com/artificial-scientist-lab/Differometor-Benchmark/actions/workflows/tests.yaml)
8
+
6
9
  A benchmarking framework for optimization algorithms on gravitational-wave detector design problems, built on top of the [Differometor](https://github.com/artificial-scientist-lab/Differometor) simulator.
7
10
 
8
11
  > **For detailed documentation, see the [Wiki](https://github.com/artificial-scientist-lab/Differometor-Benchmark/wiki).**
@@ -45,7 +48,7 @@ obj.plot_loss()
45
48
  obj.save_run_to_file("my_run.npz")
46
49
  ```
47
50
 
48
- **A loss below 0 means your solution beats the real Voyager detector's sensitivity.** (On `VoyagerProblem` without physical constraints you might be burning mirrors.)
51
+ **A loss below 0 means your solution beats the real Voyager detector's sensitivity.** (On `VoyagerProblem` without physical constraints, you might be burning mirrors.)
49
52
 
50
53
  ### Evaluation Methods
51
54
 
@@ -67,8 +70,8 @@ The problems are JAX-based and differentiable up to second order. Use whichever
67
70
  ```python
68
71
  from dfbench import t2j, j2t
69
72
 
70
- params_jax = t2j(params_torch) # Torch JAX
71
- losses_torch = j2t(obj.vmap_value(params_jax)) # JAX Torch
73
+ params_jax = t2j(params_torch) # Torch -> JAX
74
+ losses_torch = j2t(obj.vmap_value(params_jax)) # JAX -> Torch
72
75
  ```
73
76
 
74
77
  This adds negligible overhead compared to the objective function itself.
@@ -136,8 +139,8 @@ OptimizationAlgorithm.optimize()
136
139
 
137
140
 
138
141
  ┌───────────┐ records losses, params, grads, timestamps
139
- │ Objective │ ──► enforces time / eval budgets
140
- └─────┬─────┘ bounded unbounded sigmoid transform
142
+ │ Objective │ ──> enforces time / eval budgets
143
+ └─────┬─────┘ bounded <-> unbounded sigmoid transform
141
144
 
142
145
 
143
146
  ContinuousProblem (VoyagerProblem, VoyagerTuningProblem, ConstrainedVoyagerProblem, UIFOProblem)
@@ -160,15 +163,15 @@ src/dfbench/
160
163
  │ ├── problem.py # ContinuousProblem ABC + ProblemSpec
161
164
  │ ├── algorithm.py # OptimizationAlgorithm ABC + AlgorithmType enum
162
165
  │ ├── objective.py # Objective wrapper (central piece)
163
- │ └── utils.py # torchjax conversion, inverse sigmoid
166
+ │ └── utils.py # torch<->jax conversion, inverse sigmoid
164
167
  ├── algorithms/
165
168
  │ ├── derivative_free/ # OMADS, PDFO/Py-BOBYQA, NelderMead, Powell
166
- │ ├── global_search/ # SciPy BasinHopping, DualAnnealing
167
- │ ├── evolutionary/ # RandomSearch, EvoxPSO, EvoxES, Nevergrad, CMA family
169
+ │ ├── global_search/ # RandomSearch, SciPy BasinHopping, DualAnnealing
170
+ │ ├── evolutionary/ # EvoxPSO, EvoxES, Nevergrad, CMA family
168
171
  │ ├── gradient_based/
169
172
  │ │ ├── optax/ # 34 Optax-based optimizers (OptaxAdam, OptaxLAMB, ...)
170
- │ │ ├── scipy/ # 13 SciPy-based optimizers (BFGS, TNC, SLSQP, )
171
- │ │ ├── custom_jax.py # Native-JAX custom/hybrid batch (SGLD, ASAM, GDL-BFGS, )
173
+ │ │ ├── scipy/ # 13 SciPy-based optimizers (BFGS, TNC, SLSQP, ...)
174
+ │ │ ├── custom_jax.py # Native-JAX custom/hybrid batch (SGLD, ASAM, GD->L-BFGS, ...)
172
175
  │ │ └── *.py # Custom-loop algorithms (AdamGD, LBFGSGD, SAGD, NAAdamGD, OptaxLBFGS)
173
176
  │ ├── surrogate_based/
174
177
  │ │ ├── botorch/ # BotorchBO, BotorchTuRBO, BotorchqNEI, BotorchqKG,
@@ -279,7 +282,7 @@ The interface is designed to make this as simple as possible. You write the opti
279
282
 
280
283
  1. Subclass `OptimizationAlgorithm`
281
284
  2. Declare `algorithm_str` and `algorithm_type`
282
- 3. Implement `optimize(objective, ...) None`
285
+ 3. Implement `optimize(objective, ...) -> None`
283
286
  4. Use `Objective` for all function evaluations
284
287
  5. The `Objective` is mutated in place, thereby no return is needed
285
288
 
@@ -302,7 +305,7 @@ class MyAlgorithm(OptimizationAlgorithm):
302
305
  """My optimization algorithm."""
303
306
 
304
307
  algorithm_str = "my_algorithm"
305
- algorithm_type = AlgorithmType.EVOLUTIONARY # match one of the algorithms/ subfolders
308
+ algorithm_type = AlgorithmType.GLOBAL_SEARCH # match one of the algorithms/ subfolders
306
309
 
307
310
  def __init__(self, batch_size: int = 50) -> None:
308
311
  """Algorithm-level meta-parameters that don't change between runs."""
@@ -423,7 +426,6 @@ See [Objective API Reference](https://github.com/artificial-scientist-lab/Differ
423
426
  | `BFGS`, `LBFGSB`, `NonlinearCG`, `NewtonCG` | Gradient | Classical SciPy gradient and quasi-Newton methods |
424
427
  | `TrustNCG`, `TrustKrylov`, `TrustConstr`, `Dogleg`, `SR1` | Gradient | Trust-region and constrained SciPy methods |
425
428
  | `TNC`, `SLSQP`, `COBYQA`, `COBYLA` | Gradient | Bounded physical-space SciPy solvers |
426
- | `RandomSearch` | Evolutionary | Unbiased baseline, no hyperparameters |
427
429
  | `EvoxPSO` | Evolutionary | Swarm intelligence, many variants (CLPSO, CSO, ...) |
428
430
  | `EvoxES` | Evolutionary | CMA-ES, OpenES, XNES, and more (EvoX backend) |
429
431
  | `PyCMACMAES` | Evolutionary | Vanilla CMA-ES (pycma backend) |
@@ -439,6 +441,7 @@ See [Objective API Reference](https://github.com/artificial-scientist-lab/Differ
439
441
  | `OmadsMADS`, `OmadsOrthoMADS` | Derivative-Free | MADS / OrthoMADS direct search (OMADS) |
440
442
  | `PDFOUOBYQA`, `PDFONEWUOA`, `PDFOLINCOA`, `PyBOBYQA` | Derivative-Free | Powell-style trust-region DFO (PDFO + Py-BOBYQA) |
441
443
  | `NelderMead`, `Powell` | Derivative-Free | SciPy classical simplex / direction-set search |
444
+ | `RandomSearch` | Global Search | Unbiased, derivative-free global search baseline, no hyperparameters |
442
445
  | `BasinHopping`, `DualAnnealing` | Global Search | SciPy stochastic global optimization |
443
446
  | `NevergradOnePlusOne`, `NevergradTBPSA`, `NevergradNGOpt` | Evolutionary | Nevergrad rugged-landscape baselines |
444
447
  | `BotorchBO` | Surrogate | Sample-efficient Bayesian Optimization |
@@ -467,7 +470,7 @@ Reference implementations worth reading:
467
470
  - `gradient_based/adam_gd.py`: gradient-based pattern (custom loop)
468
471
  - `gradient_based/optax/adam.py`: Optax wrapper pattern (minimal subclass)
469
472
  - `gradient_based/scipy/_common.py`: shared SciPy wrapper, caching, and budget handling
470
- - `evolutionary/random_search.py`: simplest batched example
473
+ - `global_search/random_search.py`: simplest batched example
471
474
  - `evolutionary/evox_es.py`: wrapping an external library (EvoX/PyTorch)
472
475
  - `evolutionary/pycma_cmaes.py`: wrapping pycma (ask/tell, restart strategies)
473
476
  - `evolutionary/jax_es.py`: native JAX ES without external library
@@ -18,7 +18,7 @@
18
18
 
19
19
  ---
20
20
 
21
- ## `EvoxES` Multi-Algorithm Wrapper (on `main`)
21
+ ## `EvoxES`: Multi-Algorithm Wrapper (on `main`)
22
22
 
23
23
  `EvoxES` is a single class that wraps **12 distinct EvoX evolution strategies** selectable via its `variant` parameter.
24
24
  Each variant is a separate algorithm from the EvoX library.
@@ -38,7 +38,7 @@ Each variant is a separate algorithm from the EvoX library.
38
38
  | `GuidedES` | Guided Evolution Strategy | ES |
39
39
  | `ESMC` | Evolution Strategy with Monte Carlo | ES |
40
40
 
41
- ## `EvoxPSO` Multi-Algorithm Wrapper (on `main`)
41
+ ## `EvoxPSO`: Multi-Algorithm Wrapper (on `main`)
42
42
 
43
43
  `EvoxPSO` is a single class that wraps **7 distinct EvoX PSO variants** selectable via its `variant` parameter.
44
44
 
@@ -52,10 +52,10 @@ Each variant is a separate algorithm from the EvoX library.
52
52
  | `SLPSOGS` | Social Learning PSO with Gaussian Sampling |
53
53
  | `SLPSOUS` | Social Learning PSO with Uniform Sampling |
54
54
 
55
- ## `EvosaxES` Multi-Algorithm Wrapper (on `algorithm/evo-algorithms`)
55
+ ## `EvosaxES`: Multi-Algorithm Wrapper (on `algorithm/evo-algorithms`)
56
56
 
57
57
  `EvosaxES` is a separate evosax-backed wrapper (pure JAX, JIT-friendly) that wraps **14 variants**.
58
- Coexists with `EvoxES` different backend, class names use `evosax_` prefix.
58
+ Coexists with `EvoxES` but uses a different backend; class names use `evosax_` prefix.
59
59
 
60
60
  | Variant | Full Name | Type |
61
61
  |---------|-----------|------|
@@ -129,7 +129,7 @@ Coexists with `EvoxES` — different backend, class names use `evosax_` prefix.
129
129
  |-----------|-----------|--------|--------|-------|
130
130
  | SGLD | `SGLDJAX` | Branch | `algorithm/jax-algorithms` | Stochastic Gradient Langevin Dynamics |
131
131
  | ASAM | `ASAMJAX` | Branch | `algorithm/jax-algorithms` | Adaptive Sharpness-Aware Minimization |
132
- | AdamL-BFGS Switch | `AdamToLBFGSJAX` | Branch | `algorithm/jax-algorithms` | Hybrid warm-start strategy |
132
+ | Adam->L-BFGS Switch | `AdamToLBFGSJAX` | Branch | `algorithm/jax-algorithms` | Hybrid warm-start strategy |
133
133
  | Entropy-SGD | `EntropySGDJAX` | Branch | `algorithm/jax-algorithms` | |
134
134
  | SGHMC | `SGHMCJAX` | Branch | `algorithm/jax-algorithms` | Stochastic Gradient Hamiltonian MC |
135
135
  | ARC | `ARCJAX` | Branch | `algorithm/jax-algorithms` | Adaptive Regularization with Cubics |
@@ -146,7 +146,6 @@ Coexists with `EvoxES` — different backend, class names use `evosax_` prefix.
146
146
  |-----------|-----------|--------|--------|-------|
147
147
  | EvoX ES (12 variants) | `EvoxES` | **Finished** | `main` | See variant table above |
148
148
  | EvoX PSO (7 variants) | `EvoxPSO` | **Finished** | `main` | See variant table above |
149
- | Random Search | `RandomSearch` | **Finished** | `main` | Baseline |
150
149
  | Evosax ES (14 variants) | `EvosaxES` | Branch | `algorithm/evo-algorithms` | See variant table above |
151
150
  | DE | `DE` | Branch | `algorithm/evo-algorithms` | Differential Evolution (custom impl) |
152
151
  | JADE | `JADE` | Branch | `algorithm/evo-algorithms` | Adaptive DE |
@@ -201,6 +200,7 @@ Coexists with `EvoxES` — different backend, class names use `evosax_` prefix.
201
200
  |-----------|-----------|--------|--------|-------|
202
201
  | Basin Hopping | `BasinHopping` | Branch | `algorithm/scipy-nongrad-algorithms` | SciPy stochastic global optimizer |
203
202
  | Dual Annealing | `DualAnnealing` | Branch | `algorithm/scipy-nongrad-algorithms` | SciPy stochastic global optimizer |
203
+ | Random Search | `RandomSearch` | **Finished** | `main` | Baseline |
204
204
 
205
205
  ### Surrogate-Based / Bayesian Optimization
206
206
 
@@ -214,7 +214,7 @@ Coexists with `EvoxES` — different backend, class names use `evosax_` prefix.
214
214
  | GEBO | `GEBO` | Branch | `algorithm/bo-algorithms` | Gradient-Enhanced BO |
215
215
  | LineBO | `LineBO` | Branch | `algorithm/bo-algorithms` | Line-search BO |
216
216
  | qKG | `BotorchqKG` | Branch | `algorithm/bo-algorithms` | Knowledge Gradient |
217
- | qNEI | `BotorchqNEI` | Branch | `algorithm/bo-algorithms` | Noisy Expected Improvement |
217
+ | qNEI | `BotorchQNEI` | Branch | `algorithm/bo-algorithms` | Noisy Expected Improvement |
218
218
  | REMBO | `REMBO` | Branch | `algorithm/bo-algorithms` | Random Embedding BO |
219
219
  | HEBO | `HEBO` | Branch | `algorithm/bo-algorithms` | Heteroscedastic BO |
220
220
  | SMAC | `SMAC` | Branch | `algorithm/bo-algorithms` | Sequential Model-based Config |