sleipnirgroup-jormungandr 0.6.7.dev67__tar.gz → 0.6.7.dev69__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.
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/problem.hpp +38 -58
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm.hpp +82 -137
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton.hpp +36 -75
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp.hpp +69 -115
- sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/optimization/solver/util/time_trace.hpp +164 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print_diagnostics.hpp +160 -51
- sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/util/time_tracer.hpp +401 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/__init__.py +1 -1
- sleipnirgroup_jormungandr-0.6.7.dev67/include/sleipnir/util/profiler.hpp +0 -187
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/arity.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/slice_tuple.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/text_wrap.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/postprocess_stubs.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/near.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/ipm.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev67 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/util/pool.cpp +0 -0
|
@@ -35,12 +35,13 @@
|
|
|
35
35
|
#include "sleipnir/optimization/solver/sqp_matrix_callbacks.hpp"
|
|
36
36
|
#include "sleipnir/optimization/solver/util/bounds.hpp"
|
|
37
37
|
#include "sleipnir/optimization/solver/util/problem_scaling.hpp"
|
|
38
|
+
#include "sleipnir/optimization/solver/util/time_trace.hpp"
|
|
38
39
|
#include "sleipnir/util/empty.hpp"
|
|
39
40
|
#include "sleipnir/util/print.hpp"
|
|
40
41
|
#include "sleipnir/util/print_diagnostics.hpp"
|
|
41
|
-
#include "sleipnir/util/profiler.hpp"
|
|
42
42
|
#include "sleipnir/util/spy.hpp"
|
|
43
43
|
#include "sleipnir/util/symbol_exports.hpp"
|
|
44
|
+
#include "sleipnir/util/time_tracer.hpp"
|
|
44
45
|
|
|
45
46
|
namespace slp {
|
|
46
47
|
|
|
@@ -413,6 +414,7 @@ class Problem {
|
|
|
413
414
|
DenseVector& x) {
|
|
414
415
|
using SparseMatrix = Eigen::SparseMatrix<Scalar>;
|
|
415
416
|
using SparseVector = Eigen::SparseVector<Scalar>;
|
|
417
|
+
using enum SetupTimeTracerID;
|
|
416
418
|
|
|
417
419
|
VariableMatrix<Scalar> x_ad{m_decision_variables};
|
|
418
420
|
|
|
@@ -430,27 +432,23 @@ class Problem {
|
|
|
430
432
|
iteration_callbacks.emplace_back(callback);
|
|
431
433
|
}
|
|
432
434
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
ad_setup_profilers.emplace_back("↳ ∇²ₓₓL");
|
|
437
|
-
|
|
438
|
-
ad_setup_profilers[0].start();
|
|
435
|
+
TimeTracerTree<SetupTimeTracer, newton_setup_time_trace> ad_setup_tracers{
|
|
436
|
+
options.diagnostics};
|
|
437
|
+
ScopedTimeTracer setup_tracer{ad_setup_tracers[SETUP]};
|
|
439
438
|
|
|
440
439
|
// Set up gradient autodiff
|
|
441
|
-
|
|
440
|
+
PhaseTimeTracer phase_tracer{ad_setup_tracers[GRADIENT]};
|
|
442
441
|
Gradient g{f, x_ad};
|
|
443
|
-
ad_setup_profilers[1].stop();
|
|
444
442
|
|
|
445
443
|
// Set up Lagrangian Hessian autodiff
|
|
446
|
-
|
|
444
|
+
phase_tracer.next(ad_setup_tracers[HESSIAN]);
|
|
447
445
|
Hessian<Scalar, Eigen::Lower> H{f, x_ad};
|
|
448
|
-
ad_setup_profilers[2].stop();
|
|
449
446
|
|
|
450
|
-
|
|
447
|
+
phase_tracer.stop();
|
|
448
|
+
setup_tracer.stop();
|
|
451
449
|
|
|
452
450
|
if (options.diagnostics) {
|
|
453
|
-
print_setup_diagnostics(
|
|
451
|
+
print_setup_diagnostics(ad_setup_tracers);
|
|
454
452
|
}
|
|
455
453
|
|
|
456
454
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
@@ -498,6 +496,7 @@ class Problem {
|
|
|
498
496
|
DenseVector& x) {
|
|
499
497
|
using SparseMatrix = Eigen::SparseMatrix<Scalar>;
|
|
500
498
|
using SparseVector = Eigen::SparseVector<Scalar>;
|
|
499
|
+
using enum SetupTimeTracerID;
|
|
501
500
|
|
|
502
501
|
VariableMatrix<Scalar> x_ad{m_decision_variables};
|
|
503
502
|
|
|
@@ -519,44 +518,35 @@ class Problem {
|
|
|
519
518
|
VariableMatrix<Scalar> c_e_ad{m_equality_constraints};
|
|
520
519
|
VariableMatrix<Scalar> y_ad(num_equality_constraints);
|
|
521
520
|
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
ad_setup_profilers.emplace_back("↳ ∇²ₓₓL");
|
|
526
|
-
ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_f");
|
|
527
|
-
ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
|
|
528
|
-
ad_setup_profilers.emplace_back("↳ ∂cₑ/∂x");
|
|
529
|
-
|
|
530
|
-
ad_setup_profilers[0].start();
|
|
521
|
+
TimeTracerTree<SetupTimeTracer, sqp_setup_time_trace> ad_setup_tracers{
|
|
522
|
+
options.diagnostics};
|
|
523
|
+
ScopedTimeTracer setup_tracer{ad_setup_tracers[SETUP]};
|
|
531
524
|
|
|
532
525
|
// Set up gradient autodiff
|
|
533
|
-
|
|
526
|
+
PhaseTimeTracer phase_tracer{ad_setup_tracers[GRADIENT]};
|
|
534
527
|
Gradient g{f, x_ad};
|
|
535
|
-
ad_setup_profilers[1].stop();
|
|
536
528
|
|
|
537
|
-
|
|
529
|
+
phase_tracer.next(ad_setup_tracers[HESSIAN]);
|
|
538
530
|
|
|
539
531
|
// Set up cost part of Lagrangian Hessian autodiff
|
|
540
|
-
|
|
532
|
+
PhaseTimeTracer hessian_phase_tracer{ad_setup_tracers[HESSIAN_COST]};
|
|
541
533
|
Hessian<Scalar, Eigen::Lower> H_f{f, x_ad};
|
|
542
|
-
ad_setup_profilers[3].stop();
|
|
543
534
|
|
|
544
535
|
// Set up constraint part of Lagrangian Hessian autodiff
|
|
545
|
-
|
|
536
|
+
hessian_phase_tracer.next(ad_setup_tracers[HESSIAN_CONSTRAINTS]);
|
|
546
537
|
Hessian<Scalar, Eigen::Lower> H_c{-y_ad.T() * c_e_ad, x_ad};
|
|
547
|
-
ad_setup_profilers[4].stop();
|
|
548
538
|
|
|
549
|
-
|
|
539
|
+
hessian_phase_tracer.stop();
|
|
550
540
|
|
|
551
541
|
// Set up equality constraint Jacobian autodiff
|
|
552
|
-
|
|
542
|
+
phase_tracer.next(ad_setup_tracers[EQUALITY_JACOBIAN]);
|
|
553
543
|
Jacobian A_e{c_e_ad, x_ad};
|
|
554
|
-
ad_setup_profilers[5].stop();
|
|
555
544
|
|
|
556
|
-
|
|
545
|
+
phase_tracer.stop();
|
|
546
|
+
setup_tracer.stop();
|
|
557
547
|
|
|
558
548
|
if (options.diagnostics) {
|
|
559
|
-
print_setup_diagnostics(
|
|
549
|
+
print_setup_diagnostics(ad_setup_tracers);
|
|
560
550
|
}
|
|
561
551
|
|
|
562
552
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
@@ -626,6 +616,7 @@ class Problem {
|
|
|
626
616
|
DenseVector& x) {
|
|
627
617
|
using SparseMatrix = Eigen::SparseMatrix<Scalar>;
|
|
628
618
|
using SparseVector = Eigen::SparseVector<Scalar>;
|
|
619
|
+
using enum SetupTimeTracerID;
|
|
629
620
|
|
|
630
621
|
VariableMatrix<Scalar> x_ad{m_decision_variables};
|
|
631
622
|
|
|
@@ -650,51 +641,40 @@ class Problem {
|
|
|
650
641
|
VariableMatrix<Scalar> y_ad(num_equality_constraints);
|
|
651
642
|
VariableMatrix<Scalar> z_ad(num_inequality_constraints);
|
|
652
643
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
ad_setup_profilers.emplace_back("↳ ∇²ₓₓL");
|
|
657
|
-
ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_f");
|
|
658
|
-
ad_setup_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
|
|
659
|
-
ad_setup_profilers.emplace_back("↳ ∂cₑ/∂x");
|
|
660
|
-
ad_setup_profilers.emplace_back("↳ ∂cᵢ/∂x");
|
|
661
|
-
|
|
662
|
-
ad_setup_profilers[0].start();
|
|
644
|
+
TimeTracerTree<SetupTimeTracer, ipm_setup_time_trace> ad_setup_tracers{
|
|
645
|
+
options.diagnostics};
|
|
646
|
+
ScopedTimeTracer setup_tracer{ad_setup_tracers[SETUP]};
|
|
663
647
|
|
|
664
648
|
// Set up gradient autodiff
|
|
665
|
-
|
|
649
|
+
PhaseTimeTracer phase_tracer{ad_setup_tracers[GRADIENT]};
|
|
666
650
|
Gradient g{f, x_ad};
|
|
667
|
-
ad_setup_profilers[1].stop();
|
|
668
651
|
|
|
669
|
-
|
|
652
|
+
phase_tracer.next(ad_setup_tracers[HESSIAN]);
|
|
670
653
|
|
|
671
654
|
// Set up cost part of Lagrangian Hessian autodiff
|
|
672
|
-
|
|
655
|
+
PhaseTimeTracer hessian_phase_tracer{ad_setup_tracers[HESSIAN_COST]};
|
|
673
656
|
Hessian<Scalar, Eigen::Lower> H_f{f, x_ad};
|
|
674
|
-
ad_setup_profilers[3].stop();
|
|
675
657
|
|
|
676
658
|
// Set up constraint part of Lagrangian Hessian autodiff
|
|
677
|
-
|
|
659
|
+
hessian_phase_tracer.next(ad_setup_tracers[HESSIAN_CONSTRAINTS]);
|
|
678
660
|
Hessian<Scalar, Eigen::Lower> H_c{-y_ad.T() * c_e_ad - z_ad.T() * c_i_ad,
|
|
679
661
|
x_ad};
|
|
680
|
-
ad_setup_profilers[4].stop();
|
|
681
662
|
|
|
682
|
-
|
|
663
|
+
hessian_phase_tracer.stop();
|
|
683
664
|
|
|
684
665
|
// Set up equality constraint Jacobian autodiff
|
|
685
|
-
|
|
666
|
+
phase_tracer.next(ad_setup_tracers[EQUALITY_JACOBIAN]);
|
|
686
667
|
Jacobian A_e{c_e_ad, x_ad};
|
|
687
|
-
ad_setup_profilers[5].stop();
|
|
688
668
|
|
|
689
669
|
// Set up inequality constraint Jacobian autodiff
|
|
690
|
-
|
|
670
|
+
phase_tracer.next(ad_setup_tracers[INEQUALITY_JACOBIAN]);
|
|
691
671
|
Jacobian A_i{c_i_ad, x_ad};
|
|
692
|
-
ad_setup_profilers[6].stop();
|
|
693
672
|
|
|
694
|
-
|
|
673
|
+
phase_tracer.stop();
|
|
674
|
+
setup_tracer.stop();
|
|
695
675
|
|
|
696
676
|
if (options.diagnostics) {
|
|
697
|
-
print_setup_diagnostics(
|
|
677
|
+
print_setup_diagnostics(ad_setup_tracers);
|
|
698
678
|
}
|
|
699
679
|
|
|
700
680
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
#include <chrono>
|
|
7
7
|
#include <cmath>
|
|
8
8
|
#include <functional>
|
|
9
|
+
#include <optional>
|
|
9
10
|
#include <span>
|
|
10
11
|
|
|
11
12
|
#include <Eigen/Core>
|
|
@@ -24,11 +25,12 @@
|
|
|
24
25
|
#include "sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp"
|
|
25
26
|
#include "sleipnir/optimization/solver/util/kkt_error.hpp"
|
|
26
27
|
#include "sleipnir/optimization/solver/util/kkt_solver.hpp"
|
|
28
|
+
#include "sleipnir/optimization/solver/util/time_trace.hpp"
|
|
27
29
|
#include "sleipnir/util/assert.hpp"
|
|
28
30
|
#include "sleipnir/util/print_diagnostics.hpp"
|
|
29
|
-
#include "sleipnir/util/profiler.hpp"
|
|
30
31
|
#include "sleipnir/util/scope_exit.hpp"
|
|
31
32
|
#include "sleipnir/util/symbol_exports.hpp"
|
|
33
|
+
#include "sleipnir/util/time_tracer.hpp"
|
|
32
34
|
|
|
33
35
|
// See docs/algorithms.md#Works_cited for citation definitions.
|
|
34
36
|
//
|
|
@@ -145,99 +147,62 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
145
147
|
DenseVector p_y;
|
|
146
148
|
/// Inequality constraint dual step.
|
|
147
149
|
DenseVector p_z;
|
|
150
|
+
|
|
151
|
+
/// Returns the infinity norm of the primal step.
|
|
152
|
+
///
|
|
153
|
+
/// @return The infinity norm of the primal step.
|
|
154
|
+
Scalar primal_inf_norm() const {
|
|
155
|
+
return std::max(p_x.template lpNorm<Eigen::Infinity>(),
|
|
156
|
+
p_s.template lpNorm<Eigen::Infinity>());
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// Returns the infinity norm of the dual step.
|
|
160
|
+
///
|
|
161
|
+
/// @return The infinity norm of the dual step.
|
|
162
|
+
Scalar dual_inf_norm() const {
|
|
163
|
+
return std::max(p_y.template lpNorm<Eigen::Infinity>(),
|
|
164
|
+
p_z.template lpNorm<Eigen::Infinity>());
|
|
165
|
+
}
|
|
148
166
|
};
|
|
149
167
|
|
|
150
168
|
using std::isfinite;
|
|
151
169
|
|
|
152
170
|
const auto solve_start_time = std::chrono::steady_clock::now();
|
|
153
171
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
solve_profilers.emplace_back(" ↳ f(x)");
|
|
166
|
-
solve_profilers.emplace_back(" ↳ ∇f(x)");
|
|
167
|
-
solve_profilers.emplace_back(" ↳ ∇²ₓₓL");
|
|
168
|
-
solve_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
|
|
169
|
-
solve_profilers.emplace_back(" ↳ cₑ(x)");
|
|
170
|
-
solve_profilers.emplace_back(" ↳ ∂cₑ/∂x");
|
|
171
|
-
solve_profilers.emplace_back(" ↳ cᵢ(x)");
|
|
172
|
-
solve_profilers.emplace_back(" ↳ ∂cᵢ/∂x");
|
|
173
|
-
|
|
174
|
-
auto& solver_prof = solve_profilers[0];
|
|
175
|
-
auto& setup_prof = solve_profilers[1];
|
|
176
|
-
auto& inner_iter_prof = solve_profilers[2];
|
|
177
|
-
auto& iter_callbacks_prof = solve_profilers[3];
|
|
178
|
-
auto& kkt_matrix_build_prof = solve_profilers[4];
|
|
179
|
-
auto& kkt_matrix_decomp_prof = solve_profilers[5];
|
|
180
|
-
auto& kkt_system_solve_prof = solve_profilers[6];
|
|
181
|
-
auto& line_search_prof = solve_profilers[7];
|
|
182
|
-
auto& soc_prof = solve_profilers[8];
|
|
183
|
-
auto& feasibility_restoration_prof = solve_profilers[9];
|
|
184
|
-
|
|
185
|
-
// Set up profiled matrix callbacks
|
|
172
|
+
using enum SolveTimeTracerID;
|
|
173
|
+
|
|
174
|
+
// Prints final solver diagnostics when the solver exits
|
|
175
|
+
//
|
|
176
|
+
// Feasibility restoration still traces so its iterations can be printed, but
|
|
177
|
+
// the outer solver prints the final solver diagnostics.
|
|
178
|
+
SolveDiagnostics<ipm_time_trace> diagnostics{options.diagnostics,
|
|
179
|
+
!in_feasibility_restoration};
|
|
180
|
+
|
|
181
|
+
// Set up traced matrix callbacks if diagnostics are enabled. Feasibility
|
|
182
|
+
// restoration's callbacks call the outer solver's, which are already traced.
|
|
186
183
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
[&](const DenseVector& x) -> SparseVector {
|
|
205
|
-
ScopedProfiler prof{g_prof};
|
|
206
|
-
return matrix_callbacks.g(x);
|
|
207
|
-
},
|
|
208
|
-
[&](const DenseVector& x, const DenseVector& y,
|
|
209
|
-
const DenseVector& z) -> SparseMatrix {
|
|
210
|
-
ScopedProfiler prof{H_prof};
|
|
211
|
-
return matrix_callbacks.H(x, y, z);
|
|
212
|
-
},
|
|
213
|
-
[&](const DenseVector& x, const DenseVector& y,
|
|
214
|
-
const DenseVector& z) -> SparseMatrix {
|
|
215
|
-
ScopedProfiler prof{H_c_prof};
|
|
216
|
-
return matrix_callbacks.H_c(x, y, z);
|
|
217
|
-
},
|
|
218
|
-
[&](const DenseVector& x) -> DenseVector {
|
|
219
|
-
ScopedProfiler prof{c_e_prof};
|
|
220
|
-
return matrix_callbacks.c_e(x);
|
|
221
|
-
},
|
|
222
|
-
[&](const DenseVector& x) -> SparseMatrix {
|
|
223
|
-
ScopedProfiler prof{A_e_prof};
|
|
224
|
-
return matrix_callbacks.A_e(x);
|
|
225
|
-
},
|
|
226
|
-
[&](const DenseVector& x) -> DenseVector {
|
|
227
|
-
ScopedProfiler prof{c_i_prof};
|
|
228
|
-
return matrix_callbacks.c_i(x);
|
|
229
|
-
},
|
|
230
|
-
[&](const DenseVector& x) -> SparseMatrix {
|
|
231
|
-
ScopedProfiler prof{A_i_prof};
|
|
232
|
-
return matrix_callbacks.A_i(x);
|
|
233
|
-
},
|
|
234
|
-
matrix_callbacks.scaling};
|
|
184
|
+
std::optional<IPMMatrixCallbacks<Scalar>> traced_matrices;
|
|
185
|
+
if (options.diagnostics && !in_feasibility_restoration) {
|
|
186
|
+
traced_matrices.emplace(
|
|
187
|
+
matrix_callbacks.num_decision_variables,
|
|
188
|
+
matrix_callbacks.num_equality_constraints,
|
|
189
|
+
matrix_callbacks.num_inequality_constraints,
|
|
190
|
+
traced(diagnostics[COST], matrix_callbacks.f),
|
|
191
|
+
traced(diagnostics[GRADIENT], matrix_callbacks.g),
|
|
192
|
+
traced(diagnostics[HESSIAN], matrix_callbacks.H),
|
|
193
|
+
traced(diagnostics[HESSIAN_CONSTRAINTS], matrix_callbacks.H_c),
|
|
194
|
+
traced(diagnostics[EQUALITY_CONSTRAINTS], matrix_callbacks.c_e),
|
|
195
|
+
traced(diagnostics[EQUALITY_JACOBIAN], matrix_callbacks.A_e),
|
|
196
|
+
traced(diagnostics[INEQUALITY_CONSTRAINTS], matrix_callbacks.c_i),
|
|
197
|
+
traced(diagnostics[INEQUALITY_JACOBIAN], matrix_callbacks.A_i),
|
|
198
|
+
matrix_callbacks.scaling);
|
|
199
|
+
}
|
|
200
|
+
const auto& matrices = traced_matrices ? *traced_matrices : matrix_callbacks;
|
|
235
201
|
#else
|
|
236
202
|
const auto& matrices = matrix_callbacks;
|
|
237
203
|
#endif
|
|
238
204
|
|
|
239
|
-
|
|
240
|
-
setup_prof.start();
|
|
205
|
+
ScopedTimeTracer setup_tracer{diagnostics[SETUP]};
|
|
241
206
|
|
|
242
207
|
Scalar f = matrices.f(x);
|
|
243
208
|
SparseVector g = matrices.g(x);
|
|
@@ -359,32 +324,23 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
359
324
|
Scalar E_0 = unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
|
|
360
325
|
matrices.scaling, g, A_e, c_e, A_i, c_i, s, y, z, Scalar(0));
|
|
361
326
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
// Prints
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
}
|
|
376
|
-
print_solver_diagnostics(solve_profilers);
|
|
377
|
-
}
|
|
378
|
-
}};
|
|
379
|
-
|
|
380
|
-
// Print initial iterate diagnostics
|
|
381
|
-
if (options.diagnostics) {
|
|
382
|
-
print_initial_iterate_diagnostics(E_0, f, constraint_violation(c_e, c_i, s),
|
|
383
|
-
s.dot(z), μ);
|
|
384
|
-
}
|
|
327
|
+
setup_tracer.stop();
|
|
328
|
+
|
|
329
|
+
// Prints initial iterate diagnostics now and closes the iterate diagnostics
|
|
330
|
+
// table when the solver exits.
|
|
331
|
+
//
|
|
332
|
+
// Feasibility restoration's iterations are printed in the outer solver's
|
|
333
|
+
// table, so it doesn't open its own.
|
|
334
|
+
IterateDiagnosticsTable table{
|
|
335
|
+
options.diagnostics && !in_feasibility_restoration,
|
|
336
|
+
E_0,
|
|
337
|
+
f,
|
|
338
|
+
constraint_violation(c_e, c_i, s),
|
|
339
|
+
s.dot(z),
|
|
340
|
+
μ};
|
|
385
341
|
|
|
386
342
|
while (E_0 > Scalar(options.tolerance)) {
|
|
387
|
-
|
|
343
|
+
ScopedTimeTracer inner_iter_tracer{diagnostics[ITERATION]};
|
|
388
344
|
|
|
389
345
|
// Check for diverging iterates
|
|
390
346
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite() ||
|
|
@@ -392,7 +348,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
392
348
|
return ExitStatus::DIVERGING_ITERATES;
|
|
393
349
|
}
|
|
394
350
|
|
|
395
|
-
|
|
351
|
+
PhaseTimeTracer phase_tracer{diagnostics[CALLBACKS]};
|
|
396
352
|
|
|
397
353
|
// Call iteration callbacks
|
|
398
354
|
for (const auto& callback : iteration_callbacks) {
|
|
@@ -401,8 +357,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
401
357
|
}
|
|
402
358
|
}
|
|
403
359
|
|
|
404
|
-
|
|
405
|
-
ScopedProfiler kkt_matrix_build_profiler{kkt_matrix_build_prof};
|
|
360
|
+
phase_tracer.next(diagnostics[KKT_MATRIX_BUILD]);
|
|
406
361
|
|
|
407
362
|
// S = diag(s)
|
|
408
363
|
// Z = diag(z)
|
|
@@ -431,8 +386,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
431
386
|
A_i.transpose() * (-Σ * c_i + μ * s.cwiseInverse() + z);
|
|
432
387
|
rhs.segment(x.rows(), y.rows()) = -c_e;
|
|
433
388
|
|
|
434
|
-
|
|
435
|
-
ScopedProfiler kkt_matrix_decomp_profiler{kkt_matrix_decomp_prof};
|
|
389
|
+
phase_tracer.next(diagnostics[KKT_MATRIX_DECOMP]);
|
|
436
390
|
|
|
437
391
|
Step step;
|
|
438
392
|
Scalar α_max(1);
|
|
@@ -448,8 +402,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
448
402
|
return ExitStatus::FACTORIZATION_FAILED;
|
|
449
403
|
}
|
|
450
404
|
|
|
451
|
-
|
|
452
|
-
ScopedProfiler kkt_system_solve_profiler{kkt_system_solve_prof};
|
|
405
|
+
phase_tracer.next(diagnostics[KKT_SYSTEM_SOLVE]);
|
|
453
406
|
|
|
454
407
|
auto compute_step = [&](Step& step, const DenseVector& c_i_minus_s) {
|
|
455
408
|
// p = [ pˣ]
|
|
@@ -465,8 +418,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
465
418
|
};
|
|
466
419
|
compute_step(step, c_i - s);
|
|
467
420
|
|
|
468
|
-
|
|
469
|
-
ScopedProfiler line_search_profiler{line_search_prof};
|
|
421
|
+
phase_tracer.next(diagnostics[LINE_SEARCH]);
|
|
470
422
|
|
|
471
423
|
// αᵐᵃˣ = max(α ∈ (0, 1] : sₖ + αpₖˢ ≥ (1−τⱼ)sₖ)
|
|
472
424
|
α_max = fraction_to_the_boundary_rule<Scalar>(s, step.p_s, τ);
|
|
@@ -555,26 +507,23 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
555
507
|
bool step_acceptable = false;
|
|
556
508
|
for (int soc_iteration = 0; soc_iteration < 5 && !step_acceptable;
|
|
557
509
|
++soc_iteration) {
|
|
558
|
-
|
|
510
|
+
ScopedTimeTracer soc_tracer{diagnostics[SOC]};
|
|
559
511
|
|
|
560
512
|
scope_exit soc_exit{[&] {
|
|
561
|
-
|
|
513
|
+
soc_tracer.stop();
|
|
562
514
|
|
|
563
515
|
if (options.diagnostics && step_acceptable) {
|
|
564
|
-
|
|
516
|
+
print_iterate_diagnostics(
|
|
565
517
|
iterations, IterationType::SECOND_ORDER_CORRECTION,
|
|
566
|
-
|
|
518
|
+
soc_tracer.current_duration(),
|
|
567
519
|
unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
|
|
568
520
|
matrices.scaling, g, A_e, trial_c_e, A_i, trial_c_i,
|
|
569
521
|
trial_s, trial_y, trial_z, Scalar(0)),
|
|
570
522
|
trial_f, constraint_violation(trial_c_e, trial_c_i, trial_s),
|
|
571
523
|
trial_s.dot(trial_z), μ, solver.hessian_regularization(),
|
|
572
524
|
solver.constraint_jacobian_regularization(),
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
std::max(soc_step.p_y.template lpNorm<Eigen::Infinity>(),
|
|
576
|
-
soc_step.p_z.template lpNorm<Eigen::Infinity>()),
|
|
577
|
-
α_soc, Scalar(1), α_reduction_factor, α_z_soc);
|
|
525
|
+
soc_step.primal_inf_norm(), soc_step.dual_inf_norm(), α_soc,
|
|
526
|
+
Scalar(1), α_reduction_factor, α_z_soc);
|
|
578
527
|
}
|
|
579
528
|
}};
|
|
580
529
|
|
|
@@ -696,7 +645,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
696
645
|
}
|
|
697
646
|
}
|
|
698
647
|
|
|
699
|
-
|
|
648
|
+
phase_tracer.stop();
|
|
700
649
|
|
|
701
650
|
// If solver stalled, invoke feasibility restoration
|
|
702
651
|
if (!call_feasibility_restoration && !in_feasibility_restoration) {
|
|
@@ -708,8 +657,8 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
708
657
|
}
|
|
709
658
|
|
|
710
659
|
if (call_feasibility_restoration) {
|
|
711
|
-
|
|
712
|
-
|
|
660
|
+
ScopedTimeTracer feasibility_restoration_tracer{
|
|
661
|
+
diagnostics[FEASIBILITY_RESTORATION]};
|
|
713
662
|
|
|
714
663
|
// If already in feasibility restoration mode, running it again won't help
|
|
715
664
|
if (in_feasibility_restoration) {
|
|
@@ -821,22 +770,18 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
821
770
|
}
|
|
822
771
|
}
|
|
823
772
|
|
|
824
|
-
|
|
773
|
+
inner_iter_tracer.stop();
|
|
825
774
|
|
|
826
775
|
if (options.diagnostics) {
|
|
827
|
-
|
|
776
|
+
print_iterate_diagnostics(
|
|
828
777
|
iterations,
|
|
829
778
|
in_feasibility_restoration ? IterationType::FEASIBILITY_RESTORATION
|
|
830
779
|
: IterationType::NORMAL,
|
|
831
|
-
|
|
780
|
+
inner_iter_tracer.current_duration(), E_0, f,
|
|
832
781
|
constraint_violation(c_e, c_i, s), s.dot(z), μ,
|
|
833
782
|
solver.hessian_regularization(),
|
|
834
|
-
solver.constraint_jacobian_regularization(),
|
|
835
|
-
|
|
836
|
-
step.p_s.template lpNorm<Eigen::Infinity>()),
|
|
837
|
-
std::max(step.p_y.template lpNorm<Eigen::Infinity>(),
|
|
838
|
-
step.p_z.template lpNorm<Eigen::Infinity>()),
|
|
839
|
-
α, α_max, α_reduction_factor, α_z);
|
|
783
|
+
solver.constraint_jacobian_regularization(), step.primal_inf_norm(),
|
|
784
|
+
step.dual_inf_norm(), α, α_max, α_reduction_factor, α_z);
|
|
840
785
|
}
|
|
841
786
|
|
|
842
787
|
++iterations;
|