sleipnirgroup-jormungandr 0.6.7.dev32__tar.gz → 0.6.7.dev34__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.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/PKG-INFO +1 -1
  2. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/ipm.hpp +1 -0
  3. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/newton.hpp +3 -2
  4. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/sqp.hpp +1 -0
  5. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +19 -7
  6. sleipnirgroup_jormungandr-0.6.7.dev34/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +30 -0
  7. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/src/sleipnir/__init__.py +1 -1
  8. sleipnirgroup_jormungandr-0.6.7.dev32/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -133
  9. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/CMakeLists.txt +0 -0
  10. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/LICENSE.txt +0 -0
  11. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/README.md +0 -0
  12. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/SleipnirConfig.cmake.in +0 -0
  13. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/cmake/BuildTypes.cmake +0 -0
  14. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/cmake/CompilerFlags.cmake +0 -0
  15. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/cmake/Pybind11Mkdoc.cmake +0 -0
  16. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/cmake/SubdirList.cmake +0 -0
  17. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/cmake/arm-none-eabi.cmake +0 -0
  18. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/expression.hpp +0 -0
  19. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
  20. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/expression_type.hpp +0 -0
  21. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/gradient.hpp +0 -0
  22. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/hessian.hpp +0 -0
  23. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/jacobian.hpp +0 -0
  24. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
  25. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/slice.hpp +0 -0
  26. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/variable.hpp +0 -0
  27. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/variable_block.hpp +0 -0
  28. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
  29. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/multistart.hpp +0 -0
  30. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
  31. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
  32. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
  33. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/ocp.hpp +0 -0
  34. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/problem.hpp +0 -0
  35. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
  36. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
  37. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
  38. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
  39. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/options.hpp +0 -0
  40. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
  41. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
  42. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
  43. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
  44. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
  45. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
  46. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
  47. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
  48. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
  49. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
  50. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
  51. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
  52. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
  53. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/assert.hpp +0 -0
  54. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/concepts.hpp +0 -0
  55. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/empty.hpp +0 -0
  56. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/function_ref.hpp +0 -0
  57. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
  58. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/pool.hpp +0 -0
  59. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/print.hpp +0 -0
  60. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/print_diagnostics.hpp +0 -0
  61. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/profiler.hpp +0 -0
  62. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/scope_exit.hpp +0 -0
  63. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/spy.hpp +0 -0
  64. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/include/sleipnir/util/symbol_exports.hpp +0 -0
  65. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/pyproject.toml +0 -0
  66. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
  67. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_gradient.cpp +0 -0
  68. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_hessian.cpp +0 -0
  69. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
  70. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_variable.cpp +0 -0
  71. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
  72. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
  73. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/binders.hpp +0 -0
  74. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/docstrings.hpp +0 -0
  75. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/for_each_type.hpp +0 -0
  76. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/main.cpp +0 -0
  77. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
  78. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
  79. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/bind_ocp.cpp +0 -0
  80. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/bind_problem.cpp +0 -0
  81. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
  82. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
  83. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
  84. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
  85. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
  86. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/cpp/try_cast.hpp +0 -0
  87. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/src/sleipnir/autodiff/__init__.py +0 -0
  88. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/src/sleipnir/optimization/__init__.py +0 -0
  89. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/autodiff/gradient_test.py +0 -0
  90. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/autodiff/hessian_test.py +0 -0
  91. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/autodiff/jacobian_test.py +0 -0
  92. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/autodiff/variable_matrix_test.py +0 -0
  93. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/autodiff/variable_test.py +0 -0
  94. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
  95. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/cart_pole_ocp_test.py +0 -0
  96. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/cart_pole_problem_test.py +0 -0
  97. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/cart_pole_util.py +0 -0
  98. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/constraints_test.py +0 -0
  99. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/decision_variable_test.py +0 -0
  100. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/differential_drive_ocp_test.py +0 -0
  101. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/differential_drive_problem_test.py +0 -0
  102. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/differential_drive_util.py +0 -0
  103. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/double_integrator_problem_test.py +0 -0
  104. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/flywheel_ocp_test.py +0 -0
  105. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/flywheel_problem_test.py +0 -0
  106. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/linear_problem_test.py +0 -0
  107. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/multistart_test.py +0 -0
  108. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/near.py +0 -0
  109. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/nonlinear_problem_test.py +0 -0
  110. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/problem_spy_test.py +0 -0
  111. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/quadratic_problem_test.py +0 -0
  112. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/rk4.py +0 -0
  113. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/solver/exit_status_test.py +0 -0
  114. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/python/test/optimization/trivial_problem_test.py +0 -0
  115. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/autodiff/gradient.cpp +0 -0
  116. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/autodiff/hessian.cpp +0 -0
  117. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/autodiff/jacobian.cpp +0 -0
  118. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/autodiff/variable_matrix.cpp +0 -0
  119. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/optimization/ocp.cpp +0 -0
  120. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/optimization/problem.cpp +0 -0
  121. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/optimization/solver/ipm.cpp +0 -0
  122. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/optimization/solver/newton.cpp +0 -0
  123. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/src/optimization/solver/sqp.cpp +0 -0
  124. {sleipnirgroup_jormungandr-0.6.7.dev32 → sleipnirgroup_jormungandr-0.6.7.dev34}/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.dev32
3
+ Version: 0.6.7.dev34
4
4
  Summary: Reverse mode autodiff library and NLP solver DSL
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE.txt
@@ -691,6 +691,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
691
691
  // If the step using αᵐᵃˣ reduced the KKT error, accept it anyway
692
692
  if (next_kkt_error <= Scalar(0.999) * current_kkt_error) {
693
693
  // Accept step
694
+ α = α_max;
694
695
  break;
695
696
  }
696
697
 
@@ -232,14 +232,15 @@ ExitStatus newton(
232
232
 
233
233
  trial_x = x + α_max * p_x;
234
234
 
235
+ trial_f = matrices.f(trial_x);
236
+
235
237
  Scalar next_kkt_error =
236
238
  kkt_error<Scalar, KKTErrorType::ONE_NORM>(matrices.g(trial_x));
237
239
 
238
240
  // If the step using αᵐᵃˣ reduced the KKT error, accept it anyway
239
241
  if (next_kkt_error <= Scalar(0.999) * current_kkt_error) {
240
- trial_f = matrices.f(trial_x);
241
-
242
242
  // Accept step
243
+ α = α_max;
243
244
  break;
244
245
  }
245
246
 
@@ -488,6 +488,7 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
488
488
  // If the step using αᵐᵃˣ reduced the KKT error, accept it anyway
489
489
  if (next_kkt_error <= Scalar(0.999) * current_kkt_error) {
490
490
  // Accept step
491
+ α = α_max;
491
492
  break;
492
493
  }
493
494
 
@@ -636,6 +636,8 @@ ExitStatus feasibility_restoration(
636
636
  x = fr_x.segment(0, x.rows());
637
637
 
638
638
  if (status == ExitStatus::CALLBACK_REQUESTED_STOP) {
639
+ const DenseVector s_old = s;
640
+
639
641
  // Re-center the slacks on the original constraints cᵢ(x) if they're
640
642
  // sufficiently feasible, and on 1 otherwise.
641
643
  //
@@ -647,14 +649,24 @@ ExitStatus feasibility_restoration(
647
649
  const DenseVector c_i = matrices.c_i(x);
648
650
  s = (c_i.array() >= Scalar(1e-2)).select(c_i, Scalar(1));
649
651
 
650
- const SparseVector g = matrices.g(x);
651
- const SparseMatrix A_e = matrices.A_e(x);
652
- const SparseMatrix A_i = matrices.A_i(x);
652
+ // Reset the equality constraint duals since the restoration phase didn't
653
+ // take the cost function into account
654
+ y.setZero();
653
655
 
654
- auto [y_estimate, z_estimate] =
655
- lagrange_multiplier_estimate(g, A_e, A_i, s, μ);
656
- y = y_estimate;
657
- z = z_estimate;
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
+ }
658
670
 
659
671
  return ExitStatus::SUCCESS;
660
672
  } else if (status == ExitStatus::SUCCESS) {
@@ -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.dev32"
5
+ __version__ = "0.6.7.dev34"
@@ -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