sleipnirgroup-jormungandr 0.0.1.dev473__tar.gz → 0.0.1.dev474__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 (104) hide show
  1. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/pyproject.toml +1 -1
  3. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/interior_point.cpp +0 -27
  4. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/newton.cpp +0 -13
  5. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/sqp.cpp +0 -13
  6. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/CMakeLists.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/LICENSE.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/README.md +0 -0
  9. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/SleipnirConfig.cmake.in +0 -0
  10. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/cmake/modules/BuildTypes.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/cmake/modules/CompilerFlags.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/cmake/modules/Pybind11Mkdoc.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/cmake/modules/SubdirList.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/.styleguide +0 -0
  15. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/adjoint_expression_graph.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/expression.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/gradient.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/hessian.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/slice.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/variable.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/control/ocp.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/multistart.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/problem.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/solver/interior_point.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/solver/options.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/assert.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/concepts.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/function_ref.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/pool.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/print.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/small_vector.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/spy.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/include/sleipnir/util/symbol_exports.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/__init__.py +0 -0
  45. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/autodiff/__init__.py +0 -0
  46. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/control/__init__.py +0 -0
  47. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_expression_type.cpp +0 -0
  48. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_gradient.cpp +0 -0
  49. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_hessian.cpp +0 -0
  50. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_jacobian.cpp +0 -0
  51. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_variable.cpp +0 -0
  52. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_variable_block.cpp +0 -0
  53. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  54. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/binders.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/control/bind_ocp.cpp +0 -0
  56. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/docstrings.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/main.cpp +0 -0
  58. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/optimization/bind_equality_constraints.cpp +0 -0
  59. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  60. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/optimization/bind_problem.cpp +0 -0
  61. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  62. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  63. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/cpp/try_cast.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/optimization/__init__.py +0 -0
  65. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/autodiff/gradient_test.py +0 -0
  66. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/autodiff/hessian_test.py +0 -0
  67. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/autodiff/jacobian_test.py +0 -0
  68. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/autodiff/variable_matrix_test.py +0 -0
  69. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/autodiff/variable_test.py +0 -0
  70. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/cart_pole_util.py +0 -0
  71. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/control/cart_pole_ocp_test.py +0 -0
  72. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/control/differential_drive_ocp_test.py +0 -0
  73. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/control/flywheel_ocp_test.py +0 -0
  74. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/differential_drive_util.py +0 -0
  75. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/arm_on_elevator_problem_test.py +0 -0
  76. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/cart_pole_problem_test.py +0 -0
  77. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/constraints_test.py +0 -0
  78. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/decision_variable_test.py +0 -0
  79. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/differential_drive_problem_test.py +0 -0
  80. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/double_integrator_problem_test.py +0 -0
  81. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/exit_status_test.py +0 -0
  82. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/flywheel_problem_test.py +0 -0
  83. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/linear_problem_test.py +0 -0
  84. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/multistart_test.py +0 -0
  85. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/nonlinear_problem_test.py +0 -0
  86. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/quadratic_problem_test.py +0 -0
  87. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/optimization/trivial_problem_test.py +0 -0
  88. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/jormungandr/test/rk4.py +0 -0
  89. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/.styleguide +0 -0
  90. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/autodiff/variable_matrix.cpp +0 -0
  91. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/inertia.hpp +0 -0
  92. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/problem.cpp +0 -0
  93. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/regularized_ldlt.hpp +0 -0
  94. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/util/error_estimate.hpp +0 -0
  95. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/util/filter.hpp +0 -0
  96. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  97. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/util/is_locally_infeasible.hpp +0 -0
  98. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/optimization/solver/util/kkt_error.hpp +0 -0
  99. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/util/pool.cpp +0 -0
  100. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/util/print_diagnostics.hpp +0 -0
  101. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/util/scope_exit.hpp +0 -0
  102. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/util/scoped_profiler.hpp +0 -0
  103. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/util/setup_profiler.hpp +0 -0
  104. {sleipnirgroup_jormungandr-0.0.1.dev473 → sleipnirgroup_jormungandr-0.0.1.dev474}/src/util/solve_profiler.hpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.0.1.dev473
3
+ Version: 0.0.1.dev474
4
4
  Summary: A linearity-exploiting sparse nonlinear constrained optimization problem solver that uses the interior-point method.
5
5
  License: Copyright (c) Sleipnir contributors
6
6
 
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "sleipnirgroup-jormungandr"
3
3
  description = "A linearity-exploiting sparse nonlinear constrained optimization problem solver that uses the interior-point method."
4
- version = "0.0.1.dev473"
4
+ version = "0.0.1.dev474"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9"
7
7
  dependencies = [ "matplotlib", "numpy", "scipy" ]
@@ -233,7 +233,6 @@ ExitStatus interior_point(
233
233
  constexpr double α_min = 1e-7;
234
234
 
235
235
  int full_step_rejected_counter = 0;
236
- int step_too_small_counter = 0;
237
236
 
238
237
  // Error estimate
239
238
  double E_0 = std::numeric_limits<double>::infinity();
@@ -571,22 +570,6 @@ ExitStatus interior_point(
571
570
  full_step_rejected_counter = 0;
572
571
  }
573
572
 
574
- // Handle very small search directions by letting αₖ = αₖᵐᵃˣ when
575
- // max(|pₖˣ(i)|/(1 + |xₖ(i)|)) < 10ε_mach.
576
- //
577
- // See section 3.9 of [2].
578
- double max_step_scaled = 0.0;
579
- for (int row = 0; row < x.rows(); ++row) {
580
- max_step_scaled = std::max(
581
- max_step_scaled, std::abs(step.p_x[row]) / (1.0 + std::abs(x[row])));
582
- }
583
- if (max_step_scaled < 10.0 * std::numeric_limits<double>::epsilon()) {
584
- α = α_max;
585
- ++step_too_small_counter;
586
- } else {
587
- step_too_small_counter = 0;
588
- }
589
-
590
573
  // xₖ₊₁ = xₖ + αₖpₖˣ
591
574
  // sₖ₊₁ = sₖ + αₖpₖˢ
592
575
  // yₖ₊₁ = yₖ + αₖᶻpₖʸ
@@ -665,16 +648,6 @@ ExitStatus interior_point(
665
648
  if (std::chrono::steady_clock::now() - solve_start_time > options.timeout) {
666
649
  return ExitStatus::TIMEOUT;
667
650
  }
668
-
669
- // The search direction has been very small twice, so assume the problem has
670
- // been solved as well as possible given finite precision and reduce the
671
- // barrier parameter.
672
- //
673
- // See section 3.9 of [2].
674
- if (step_too_small_counter >= 2 && μ > μ_min) {
675
- update_barrier_parameter_and_reset_filter();
676
- continue;
677
- }
678
651
  }
679
652
 
680
653
  return ExitStatus::SUCCESS;
@@ -214,19 +214,6 @@ ExitStatus newton(const NewtonMatrixCallbacks& matrix_callbacks,
214
214
  }
215
215
  }
216
216
 
217
- // Handle very small search directions by letting αₖ = αₖᵐᵃˣ when
218
- // max(|pₖˣ(i)|/(1 + |xₖ(i)|)) < 10ε_mach.
219
- //
220
- // See section 3.9 of [2].
221
- double max_step_scaled = 0.0;
222
- for (int row = 0; row < x.rows(); ++row) {
223
- max_step_scaled = std::max(max_step_scaled,
224
- std::abs(p_x(row)) / (1.0 + std::abs(x(row))));
225
- }
226
- if (max_step_scaled < 10.0 * std::numeric_limits<double>::epsilon()) {
227
- α = α_max;
228
- }
229
-
230
217
  line_search_profiler.stop();
231
218
 
232
219
  // xₖ₊₁ = xₖ + αₖpₖˣ
@@ -432,19 +432,6 @@ ExitStatus sqp(const SQPMatrixCallbacks& matrix_callbacks,
432
432
  full_step_rejected_counter = 0;
433
433
  }
434
434
 
435
- // Handle very small search directions by letting αₖ = αₖᵐᵃˣ when
436
- // max(|pₖˣ(i)|/(1 + |xₖ(i)|)) < 10ε_mach.
437
- //
438
- // See section 3.9 of [2].
439
- double max_step_scaled = 0.0;
440
- for (int row = 0; row < x.rows(); ++row) {
441
- max_step_scaled = std::max(
442
- max_step_scaled, std::abs(step.p_x(row)) / (1.0 + std::abs(x(row))));
443
- }
444
- if (max_step_scaled < 10.0 * std::numeric_limits<double>::epsilon()) {
445
- α = α_max;
446
- }
447
-
448
435
  // xₖ₊₁ = xₖ + αₖpₖˣ
449
436
  // yₖ₊₁ = yₖ + αₖpₖʸ
450
437
  x += α * step.p_x;