sleipnirgroup-jormungandr 0.6.7.dev68__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.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/problem.hpp +38 -58
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm.hpp +62 -126
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton.hpp +36 -75
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp.hpp +54 -112
- sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/optimization/solver/util/time_trace.hpp +164 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print_diagnostics.hpp +151 -37
- sleipnirgroup_jormungandr-0.6.7.dev69/include/sleipnir/util/time_tracer.hpp +401 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/__init__.py +1 -1
- sleipnirgroup_jormungandr-0.6.7.dev68/include/sleipnir/util/profiler.hpp +0 -187
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/Pybind11MkdocPostprocess.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/constraint_violation.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/arity.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/slice_tuple.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/text_wrap.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/postprocess_stubs.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/near.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/ipm.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → sleipnirgroup_jormungandr-0.6.7.dev69}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev68 → 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
|
//
|
|
@@ -167,93 +169,40 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
167
169
|
|
|
168
170
|
const auto solve_start_time = std::chrono::steady_clock::now();
|
|
169
171
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
solve_profilers.emplace_back(" ↳ f(x)");
|
|
182
|
-
solve_profilers.emplace_back(" ↳ ∇f(x)");
|
|
183
|
-
solve_profilers.emplace_back(" ↳ ∇²ₓₓL");
|
|
184
|
-
solve_profilers.emplace_back(" ↳ ∇²ₓₓL_c");
|
|
185
|
-
solve_profilers.emplace_back(" ↳ cₑ(x)");
|
|
186
|
-
solve_profilers.emplace_back(" ↳ ∂cₑ/∂x");
|
|
187
|
-
solve_profilers.emplace_back(" ↳ cᵢ(x)");
|
|
188
|
-
solve_profilers.emplace_back(" ↳ ∂cᵢ/∂x");
|
|
189
|
-
|
|
190
|
-
auto& solver_prof = solve_profilers[0];
|
|
191
|
-
auto& setup_prof = solve_profilers[1];
|
|
192
|
-
auto& inner_iter_prof = solve_profilers[2];
|
|
193
|
-
auto& iter_callbacks_prof = solve_profilers[3];
|
|
194
|
-
auto& kkt_matrix_build_prof = solve_profilers[4];
|
|
195
|
-
auto& kkt_matrix_decomp_prof = solve_profilers[5];
|
|
196
|
-
auto& kkt_system_solve_prof = solve_profilers[6];
|
|
197
|
-
auto& line_search_prof = solve_profilers[7];
|
|
198
|
-
auto& soc_prof = solve_profilers[8];
|
|
199
|
-
auto& feasibility_restoration_prof = solve_profilers[9];
|
|
200
|
-
|
|
201
|
-
// 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.
|
|
202
183
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
[&](const DenseVector& x) -> SparseVector {
|
|
221
|
-
ScopedProfiler prof{g_prof};
|
|
222
|
-
return matrix_callbacks.g(x);
|
|
223
|
-
},
|
|
224
|
-
[&](const DenseVector& x, const DenseVector& y,
|
|
225
|
-
const DenseVector& z) -> SparseMatrix {
|
|
226
|
-
ScopedProfiler prof{H_prof};
|
|
227
|
-
return matrix_callbacks.H(x, y, z);
|
|
228
|
-
},
|
|
229
|
-
[&](const DenseVector& x, const DenseVector& y,
|
|
230
|
-
const DenseVector& z) -> SparseMatrix {
|
|
231
|
-
ScopedProfiler prof{H_c_prof};
|
|
232
|
-
return matrix_callbacks.H_c(x, y, z);
|
|
233
|
-
},
|
|
234
|
-
[&](const DenseVector& x) -> DenseVector {
|
|
235
|
-
ScopedProfiler prof{c_e_prof};
|
|
236
|
-
return matrix_callbacks.c_e(x);
|
|
237
|
-
},
|
|
238
|
-
[&](const DenseVector& x) -> SparseMatrix {
|
|
239
|
-
ScopedProfiler prof{A_e_prof};
|
|
240
|
-
return matrix_callbacks.A_e(x);
|
|
241
|
-
},
|
|
242
|
-
[&](const DenseVector& x) -> DenseVector {
|
|
243
|
-
ScopedProfiler prof{c_i_prof};
|
|
244
|
-
return matrix_callbacks.c_i(x);
|
|
245
|
-
},
|
|
246
|
-
[&](const DenseVector& x) -> SparseMatrix {
|
|
247
|
-
ScopedProfiler prof{A_i_prof};
|
|
248
|
-
return matrix_callbacks.A_i(x);
|
|
249
|
-
},
|
|
250
|
-
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;
|
|
251
201
|
#else
|
|
252
202
|
const auto& matrices = matrix_callbacks;
|
|
253
203
|
#endif
|
|
254
204
|
|
|
255
|
-
|
|
256
|
-
setup_prof.start();
|
|
205
|
+
ScopedTimeTracer setup_tracer{diagnostics[SETUP]};
|
|
257
206
|
|
|
258
207
|
Scalar f = matrices.f(x);
|
|
259
208
|
SparseVector g = matrices.g(x);
|
|
@@ -375,32 +324,23 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
375
324
|
Scalar E_0 = unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
|
|
376
325
|
matrices.scaling, g, A_e, c_e, A_i, c_i, s, y, z, Scalar(0));
|
|
377
326
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
// Prints
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
}
|
|
392
|
-
print_solver_diagnostics(solve_profilers);
|
|
393
|
-
}
|
|
394
|
-
}};
|
|
395
|
-
|
|
396
|
-
// Print initial iterate diagnostics
|
|
397
|
-
if (options.diagnostics) {
|
|
398
|
-
print_initial_iterate_diagnostics(E_0, f, constraint_violation(c_e, c_i, s),
|
|
399
|
-
s.dot(z), μ);
|
|
400
|
-
}
|
|
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
|
+
μ};
|
|
401
341
|
|
|
402
342
|
while (E_0 > Scalar(options.tolerance)) {
|
|
403
|
-
|
|
343
|
+
ScopedTimeTracer inner_iter_tracer{diagnostics[ITERATION]};
|
|
404
344
|
|
|
405
345
|
// Check for diverging iterates
|
|
406
346
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite() ||
|
|
@@ -408,7 +348,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
408
348
|
return ExitStatus::DIVERGING_ITERATES;
|
|
409
349
|
}
|
|
410
350
|
|
|
411
|
-
|
|
351
|
+
PhaseTimeTracer phase_tracer{diagnostics[CALLBACKS]};
|
|
412
352
|
|
|
413
353
|
// Call iteration callbacks
|
|
414
354
|
for (const auto& callback : iteration_callbacks) {
|
|
@@ -417,8 +357,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
417
357
|
}
|
|
418
358
|
}
|
|
419
359
|
|
|
420
|
-
|
|
421
|
-
ScopedProfiler kkt_matrix_build_profiler{kkt_matrix_build_prof};
|
|
360
|
+
phase_tracer.next(diagnostics[KKT_MATRIX_BUILD]);
|
|
422
361
|
|
|
423
362
|
// S = diag(s)
|
|
424
363
|
// Z = diag(z)
|
|
@@ -447,8 +386,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
447
386
|
A_i.transpose() * (-Σ * c_i + μ * s.cwiseInverse() + z);
|
|
448
387
|
rhs.segment(x.rows(), y.rows()) = -c_e;
|
|
449
388
|
|
|
450
|
-
|
|
451
|
-
ScopedProfiler kkt_matrix_decomp_profiler{kkt_matrix_decomp_prof};
|
|
389
|
+
phase_tracer.next(diagnostics[KKT_MATRIX_DECOMP]);
|
|
452
390
|
|
|
453
391
|
Step step;
|
|
454
392
|
Scalar α_max(1);
|
|
@@ -464,8 +402,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
464
402
|
return ExitStatus::FACTORIZATION_FAILED;
|
|
465
403
|
}
|
|
466
404
|
|
|
467
|
-
|
|
468
|
-
ScopedProfiler kkt_system_solve_profiler{kkt_system_solve_prof};
|
|
405
|
+
phase_tracer.next(diagnostics[KKT_SYSTEM_SOLVE]);
|
|
469
406
|
|
|
470
407
|
auto compute_step = [&](Step& step, const DenseVector& c_i_minus_s) {
|
|
471
408
|
// p = [ pˣ]
|
|
@@ -481,8 +418,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
481
418
|
};
|
|
482
419
|
compute_step(step, c_i - s);
|
|
483
420
|
|
|
484
|
-
|
|
485
|
-
ScopedProfiler line_search_profiler{line_search_prof};
|
|
421
|
+
phase_tracer.next(diagnostics[LINE_SEARCH]);
|
|
486
422
|
|
|
487
423
|
// αᵐᵃˣ = max(α ∈ (0, 1] : sₖ + αpₖˢ ≥ (1−τⱼ)sₖ)
|
|
488
424
|
α_max = fraction_to_the_boundary_rule<Scalar>(s, step.p_s, τ);
|
|
@@ -571,15 +507,15 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
571
507
|
bool step_acceptable = false;
|
|
572
508
|
for (int soc_iteration = 0; soc_iteration < 5 && !step_acceptable;
|
|
573
509
|
++soc_iteration) {
|
|
574
|
-
|
|
510
|
+
ScopedTimeTracer soc_tracer{diagnostics[SOC]};
|
|
575
511
|
|
|
576
512
|
scope_exit soc_exit{[&] {
|
|
577
|
-
|
|
513
|
+
soc_tracer.stop();
|
|
578
514
|
|
|
579
515
|
if (options.diagnostics && step_acceptable) {
|
|
580
|
-
|
|
516
|
+
print_iterate_diagnostics(
|
|
581
517
|
iterations, IterationType::SECOND_ORDER_CORRECTION,
|
|
582
|
-
|
|
518
|
+
soc_tracer.current_duration(),
|
|
583
519
|
unscaled_kkt_error<Scalar, KKTErrorType::INF_NORM_SCALED>(
|
|
584
520
|
matrices.scaling, g, A_e, trial_c_e, A_i, trial_c_i,
|
|
585
521
|
trial_s, trial_y, trial_z, Scalar(0)),
|
|
@@ -709,7 +645,7 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
709
645
|
}
|
|
710
646
|
}
|
|
711
647
|
|
|
712
|
-
|
|
648
|
+
phase_tracer.stop();
|
|
713
649
|
|
|
714
650
|
// If solver stalled, invoke feasibility restoration
|
|
715
651
|
if (!call_feasibility_restoration && !in_feasibility_restoration) {
|
|
@@ -721,8 +657,8 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
721
657
|
}
|
|
722
658
|
|
|
723
659
|
if (call_feasibility_restoration) {
|
|
724
|
-
|
|
725
|
-
|
|
660
|
+
ScopedTimeTracer feasibility_restoration_tracer{
|
|
661
|
+
diagnostics[FEASIBILITY_RESTORATION]};
|
|
726
662
|
|
|
727
663
|
// If already in feasibility restoration mode, running it again won't help
|
|
728
664
|
if (in_feasibility_restoration) {
|
|
@@ -834,14 +770,14 @@ ExitStatus ipm(const IPMMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
834
770
|
}
|
|
835
771
|
}
|
|
836
772
|
|
|
837
|
-
|
|
773
|
+
inner_iter_tracer.stop();
|
|
838
774
|
|
|
839
775
|
if (options.diagnostics) {
|
|
840
|
-
|
|
776
|
+
print_iterate_diagnostics(
|
|
841
777
|
iterations,
|
|
842
778
|
in_feasibility_restoration ? IterationType::FEASIBILITY_RESTORATION
|
|
843
779
|
: IterationType::NORMAL,
|
|
844
|
-
|
|
780
|
+
inner_iter_tracer.current_duration(), E_0, f,
|
|
845
781
|
constraint_violation(c_e, c_i, s), s.dot(z), μ,
|
|
846
782
|
solver.hessian_regularization(),
|
|
847
783
|
solver.constraint_jacobian_regularization(), step.primal_inf_norm(),
|