sleipnirgroup-jormungandr 0.6.7.dev31__tar.gz → 0.6.7.dev33__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.

Potentially problematic release.


This version of sleipnirgroup-jormungandr might be problematic. Click here for more details.

Files changed (124) hide show
  1. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +35 -9
  3. sleipnirgroup_jormungandr-0.6.7.dev33/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +30 -0
  4. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/src/sleipnir/__init__.py +1 -1
  5. sleipnirgroup_jormungandr-0.6.7.dev31/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -133
  6. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/CMakeLists.txt +0 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/LICENSE.txt +0 -0
  8. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/README.md +0 -0
  9. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/SleipnirConfig.cmake.in +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/cmake/BuildTypes.cmake +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/cmake/CompilerFlags.cmake +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/cmake/Pybind11Mkdoc.cmake +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/cmake/SubdirList.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/cmake/arm-none-eabi.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/expression.hpp +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/gradient.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/hessian.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/slice.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/variable.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/multistart.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/ocp.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/problem.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/newton.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/options.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/assert.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/concepts.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/empty.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/function_ref.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/pool.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/print.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/profiler.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/scope_exit.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/spy.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/include/sleipnir/util/symbol_exports.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/pyproject.toml +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_variable.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/binders.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/docstrings.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/for_each_type.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/main.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/bind_ocp.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/bind_problem.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/cpp/try_cast.hpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/src/sleipnir/autodiff/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/src/sleipnir/optimization/__init__.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/autodiff/gradient_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/autodiff/hessian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/autodiff/jacobian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/autodiff/variable_matrix_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/autodiff/variable_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/differential_drive_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/differential_drive_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/double_integrator_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/flywheel_ocp_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/flywheel_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/linear_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/multistart_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/near.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/nonlinear_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/problem_spy_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/quadratic_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/rk4.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/solver/exit_status_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/python/test/optimization/trivial_problem_test.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/autodiff/gradient.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/autodiff/hessian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/autodiff/jacobian.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/autodiff/variable_matrix.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/optimization/ocp.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/optimization/problem.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/optimization/solver/ipm.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/optimization/solver/newton.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/optimization/solver/sqp.cpp +0 -0
  124. {sleipnirgroup_jormungandr-0.6.7.dev31 → sleipnirgroup_jormungandr-0.6.7.dev33}/src/util/pool.cpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sleipnirgroup-jormungandr
3
- Version: 0.6.7.dev31
3
+ Version: 0.6.7.dev33
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -634,17 +634,39 @@ ExitStatus feasibility_restoration(
634
634
  fr_x, fr_s, fr_y, fr_z, fr_μ, iterations);
635
635
 
636
636
  x = fr_x.segment(0, x.rows());
637
- s = fr_s.segment(0, s.rows());
638
637
 
639
638
  if (status == ExitStatus::CALLBACK_REQUESTED_STOP) {
640
- auto g = matrices.g(x);
641
- auto A_e = matrices.A_e(x);
642
- auto A_i = matrices.A_i(x);
643
-
644
- auto [y_estimate, z_estimate] =
645
- lagrange_multiplier_estimate(g, A_e, A_i, s, μ);
646
- y = y_estimate;
647
- z = z_estimate;
639
+ const DenseVector s_old = s;
640
+
641
+ // Re-center the slacks on the original constraints cᵢ(x) if they're
642
+ // sufficiently feasible, and on 1 otherwise.
643
+ //
644
+ // We can't use the slacks of cᵢ(x) − pᵢ + nᵢ ≥ 0 because feasibility
645
+ // restoration's barrier parameter fr_μ drives them toward 0 independently
646
+ // of the original problem's barrier parameter μ. Slacks much smaller than μ
647
+ // make Σ = S⁻¹Z and μS⁻¹e very large, which causes very large dual steps
648
+ // after returning.
649
+ const DenseVector c_i = matrices.c_i(x);
650
+ s = (c_i.array() >= Scalar(1e-2)).select(c_i, Scalar(1));
651
+
652
+ // Reset the equality constraint duals since the restoration phase didn't
653
+ // take the cost function into account
654
+ y.setZero();
655
+
656
+ // Update the inequality constraint duals with a Newton step for
657
+ // complementarity, taking the change in slacks during the restoration
658
+ // phase as the primal step.
659
+ //
660
+ // pᶻ = μS⁻¹e − z − Σpˢ
661
+ //
662
+ // If the result isn't strictly positive or is too large, reset all of them
663
+ // to 1.
664
+ const DenseVector Σ = z.cwiseQuotient(s_old);
665
+ const DenseVector p_s = s - s_old;
666
+ z += μ * s_old.cwiseInverse() - z - Σ.cwiseProduct(p_s);
667
+ if ((z.array() <= Scalar(0)).any() || (z.array() > Scalar(1e3)).any()) {
668
+ z.setOnes();
669
+ }
648
670
 
649
671
  return ExitStatus::SUCCESS;
650
672
  } else if (status == ExitStatus::SUCCESS) {
@@ -654,6 +676,9 @@ ExitStatus feasibility_restoration(
654
676
  // infeasibility anywhere else risks false positives (e.g., a
655
677
  // point-in-time test can reject iterates the solver would otherwise
656
678
  // escape). See section 3.3, p. 14 of [2].
679
+
680
+ s = fr_s.segment(0, s.rows());
681
+
657
682
  DenseVector c_e = matrices.c_e(x);
658
683
  if (matrices.scaling.c_e.size() > 0) {
659
684
  c_e = matrices.scaling.c_e.cwiseInverse().cwiseProduct(c_e);
@@ -688,6 +713,7 @@ ExitStatus feasibility_restoration(
688
713
 
689
714
  return ExitStatus::FEASIBILITY_RESTORATION_FAILED;
690
715
  } else {
716
+ s = fr_s.segment(0, s.rows());
691
717
  return ExitStatus::FEASIBILITY_RESTORATION_FAILED;
692
718
  }
693
719
  }
@@ -0,0 +1,30 @@
1
+ // Copyright (c) Sleipnir contributors
2
+
3
+ #pragma once
4
+
5
+ #include <Eigen/Core>
6
+ #include <Eigen/SparseCholesky>
7
+ #include <Eigen/SparseCore>
8
+
9
+ namespace slp {
10
+
11
+ /// Estimates Lagrange multipliers for SQP.
12
+ ///
13
+ /// @tparam Scalar Scalar type.
14
+ /// @param g Cost function gradient ∇f.
15
+ /// @param A_e Equality constraint Jacobian Aₑ(x).
16
+ template <typename Scalar>
17
+ Eigen::Vector<Scalar, Eigen::Dynamic> lagrange_multiplier_estimate(
18
+ const Eigen::SparseVector<Scalar>& g,
19
+ const Eigen::SparseMatrix<Scalar>& A_e) {
20
+ // Lagrange multiplier estimates
21
+ //
22
+ // ∇f − Aₑᵀy = 0
23
+ // Aₑᵀy = ∇f
24
+ // y = (AₑAₑᵀ)⁻¹Aₑ∇f
25
+ return Eigen::SimplicialLDLT<Eigen::SparseMatrix<Scalar>>{A_e *
26
+ A_e.transpose()}
27
+ .solve(A_e * g);
28
+ }
29
+
30
+ } // namespace slp
@@ -2,4 +2,4 @@
2
2
 
3
3
  from ._sleipnir import *
4
4
 
5
- __version__ = "0.6.7.dev31"
5
+ __version__ = "0.6.7.dev33"
@@ -1,133 +0,0 @@
1
- // Copyright (c) Sleipnir contributors
2
-
3
- #pragma once
4
-
5
- #include <algorithm>
6
- #include <utility>
7
-
8
- #include <Eigen/Core>
9
- #include <Eigen/SparseCholesky>
10
- #include <Eigen/SparseCore>
11
- #include <gch/small_vector.hpp>
12
-
13
- #include "sleipnir/optimization/solver/util/append_as_triplets.hpp"
14
-
15
- namespace slp {
16
-
17
- /// Lagrange multiplier estimates.
18
- ///
19
- /// @tparam Scalar Scalar type.
20
- template <typename Scalar>
21
- struct LagrangeMultiplierEstimate {
22
- /// Equality constraint dual estimate.
23
- Eigen::Vector<Scalar, Eigen::Dynamic> y;
24
- /// Inequality constraint dual estimate.
25
- Eigen::Vector<Scalar, Eigen::Dynamic> z;
26
- };
27
-
28
- /// Estimates Lagrange multipliers for SQP.
29
- ///
30
- /// @tparam Scalar Scalar type.
31
- /// @param g Cost function gradient ∇f.
32
- /// @param A_e Equality constraint Jacobian Aₑ(x).
33
- template <typename Scalar>
34
- Eigen::Vector<Scalar, Eigen::Dynamic> lagrange_multiplier_estimate(
35
- const Eigen::SparseVector<Scalar>& g,
36
- const Eigen::SparseMatrix<Scalar>& A_e) {
37
- // Lagrange multiplier estimates
38
- //
39
- // ∇f − Aₑᵀy = 0
40
- // Aₑᵀy = ∇f
41
- // y = (AₑAₑᵀ)⁻¹Aₑ∇f
42
- return Eigen::SimplicialLDLT<Eigen::SparseMatrix<Scalar>>{A_e *
43
- A_e.transpose()}
44
- .solve(A_e * g);
45
- }
46
-
47
- /// Estimates Lagrange multipliers for interior-point method.
48
- ///
49
- /// @tparam Scalar Scalar type.
50
- /// @param g Cost function gradient ∇f.
51
- /// @param A_e Equality constraint Jacobian Aₑ(x).
52
- /// @param A_i Inequality constraint Jacobian Aᵢ(x).
53
- /// @param s Inequality constraint slack variables.
54
- /// @param μ Barrier parameter.
55
- template <typename Scalar>
56
- LagrangeMultiplierEstimate<Scalar> lagrange_multiplier_estimate(
57
- const Eigen::SparseVector<Scalar>& g,
58
- const Eigen::SparseMatrix<Scalar>& A_e,
59
- const Eigen::SparseMatrix<Scalar>& A_i,
60
- const Eigen::Vector<Scalar, Eigen::Dynamic>& s, Scalar μ) {
61
- using DenseVector = Eigen::Vector<Scalar, Eigen::Dynamic>;
62
- using SparseMatrix = Eigen::SparseMatrix<Scalar>;
63
-
64
- // Lagrange multiplier estimates
65
- //
66
- // ∇f − Aₑᵀy − Aᵢᵀz = 0
67
- // Sz − μe = 0
68
- //
69
- // Aₑᵀy + Aᵢᵀz = ∇f
70
- // −Sz = −μe
71
- //
72
- // [Aₑᵀ Aᵢᵀ][y] = [ ∇f]
73
- // [ 0 −S ][z] [−μe]
74
- //
75
- // [Aₑ 0]ᵀ[y] = [ ∇f]
76
- // [Aᵢ −S] [z] [−μe]
77
- //
78
- // Let  = [Aₑ 0]
79
- // [Aᵢ −S]
80
- //
81
- // Âᵀ[y] = [ ∇f]
82
- // [z] [−μe]
83
- //
84
- // [y] = (ÂÂᵀ)⁻¹Â[ ∇f]
85
- // [z] [−μe]
86
-
87
- gch::small_vector<Eigen::Triplet<Scalar>> triplets;
88
-
89
- // Â = [Aₑ 0]
90
- // [Aᵢ −S]
91
- triplets.reserve(A_e.nonZeros() + A_i.nonZeros() + s.rows());
92
- append_as_triplets(triplets, 0, 0, {A_e, A_i});
93
- append_diagonal_as_triplets(triplets, A_e.rows(), A_i.cols(), (-s).eval());
94
- SparseMatrix A_hat{A_e.rows() + A_i.rows(), A_e.cols() + s.rows()};
95
- A_hat.setFromSortedTriplets(triplets.begin(), triplets.end());
96
-
97
- // lhs = ÂÂᵀ
98
- SparseMatrix lhs = A_hat * A_hat.transpose();
99
-
100
- // rhs = Â[ ∇f]
101
- // [−μe]
102
- DenseVector rhs_temp{g.rows() + s.rows()};
103
- rhs_temp.segment(0, g.rows()) = g;
104
- rhs_temp.segment(g.rows(), s.rows()).setConstant(-μ);
105
- DenseVector rhs = A_hat * rhs_temp;
106
-
107
- Eigen::SimplicialLDLT<SparseMatrix> yz_estimator{lhs};
108
- DenseVector sol = yz_estimator.solve(rhs);
109
- DenseVector y = sol.segment(0, A_e.rows());
110
- DenseVector z = sol.segment(A_e.rows(), s.rows());
111
-
112
- // A requirement for the convergence proof is that the primal-dual barrier
113
- // term Hessian Σₖ₊₁ does not deviate arbitrarily much from the primal barrier
114
- // term Hessian μSₖ₊₁⁻².
115
- //
116
- // Σₖ₊₁ = μSₖ₊₁⁻²
117
- // Sₖ₊₁⁻¹Zₖ₊₁ = μSₖ₊₁⁻²
118
- // Zₖ₊₁ = μSₖ₊₁⁻¹
119
- //
120
- // We ensure this by resetting
121
- //
122
- // zₖ₊₁ = clamp(zₖ₊₁, 1/κ_Σ μ/sₖ₊₁, κ_Σ μ/sₖ₊₁)
123
- //
124
- // for some fixed κ_Σ ≥ 1 after each step. See equation (16) of [2].
125
- for (int row = 0; row < z.rows(); ++row) {
126
- constexpr Scalar κ_Σ(1e10);
127
- z[row] = std::clamp(z[row], Scalar(1) / κ_Σ * μ / s[row], κ_Σ * μ / s[row]);
128
- }
129
-
130
- return {std::move(y), std::move(z)};
131
- }
132
-
133
- } // namespace slp