sleipnirgroup-jormungandr 0.6.7.dev22__tar.gz → 0.6.7.dev24__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.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/bounds.hpp +28 -24
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/cart_pole_ocp_test.py +39 -28
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/differential_drive_ocp_test.py +18 -23
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/near.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/solver/ipm.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/util/pool.cpp +0 -0
|
@@ -48,27 +48,35 @@ struct Bounds {
|
|
|
48
48
|
/// @param inequality_constraints Variables representing the left-hand side of
|
|
49
49
|
/// cᵢ(decision_variables) ≥ 0.
|
|
50
50
|
/// @param A_i The Jacobian of inequality_constraints wrt decision_variables,
|
|
51
|
-
/// evaluated anywhere
|
|
52
|
-
/// typically store Jacobians column-major, the user of this function must
|
|
53
|
-
/// perform a transpose.
|
|
51
|
+
/// evaluated anywhere.
|
|
54
52
|
template <typename Scalar>
|
|
55
|
-
Bounds<Scalar> get_bounds(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const Eigen::SparseMatrix<Scalar, Eigen::RowMajor>& A_i) {
|
|
59
|
-
// TODO: A blocked, out-of-place transpose should be much faster than
|
|
60
|
-
// traversing row major on a column major matrix unless we have few linear
|
|
61
|
-
// constraints (using a heuristic to choose between this and staying column
|
|
62
|
-
// major based on the number of constraints would be an easy performance
|
|
63
|
-
// improvement.)
|
|
64
|
-
|
|
53
|
+
Bounds<Scalar> get_bounds(std::span<Variable<Scalar>> decision_variables,
|
|
54
|
+
std::span<Variable<Scalar>> inequality_constraints,
|
|
55
|
+
const Eigen::SparseMatrix<Scalar>& A_i) {
|
|
65
56
|
// NB: Casting to long is unspecified if the size of decision_variable.size()
|
|
66
57
|
// is greater than the max long value, but then we wouldn't be able to fill
|
|
67
58
|
// A_i correctly anyway.
|
|
68
59
|
slp_assert(static_cast<Eigen::Index>(decision_variables.size()) ==
|
|
69
|
-
A_i.
|
|
60
|
+
A_i.cols());
|
|
70
61
|
slp_assert(static_cast<Eigen::Index>(inequality_constraints.size()) ==
|
|
71
|
-
A_i.
|
|
62
|
+
A_i.rows());
|
|
63
|
+
|
|
64
|
+
// For each row of A_i, count its structural nonzeros and record the column
|
|
65
|
+
// and value of its most recently visited nonzero. If the count is 1, that's
|
|
66
|
+
// the row's only nonzero; otherwise, the recorded column and value are
|
|
67
|
+
// meaningless, but those rows aren't bound constraints, so they're never
|
|
68
|
+
// read.
|
|
69
|
+
gch::small_vector<int> row_num_nonzeros(A_i.rows(), 0);
|
|
70
|
+
gch::small_vector<int> row_nonzero_col(A_i.rows());
|
|
71
|
+
gch::small_vector<Scalar> row_nonzero_value(A_i.rows());
|
|
72
|
+
for (int col = 0; col < A_i.outerSize(); ++col) {
|
|
73
|
+
for (typename Eigen::SparseMatrix<Scalar>::InnerIterator it{A_i, col}; it;
|
|
74
|
+
++it) {
|
|
75
|
+
++row_num_nonzeros[it.row()];
|
|
76
|
+
row_nonzero_col[it.row()] = it.col();
|
|
77
|
+
row_nonzero_value[it.row()] = it.value();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
72
80
|
|
|
73
81
|
// Maps each decision variable's index to the indices of its upper and lower
|
|
74
82
|
// bounds if they exist, or NO_BOUND if they do not; used only for bookkeeping
|
|
@@ -102,10 +110,7 @@ Bounds<Scalar> get_bounds(
|
|
|
102
110
|
ExpressionType::LINEAR) {
|
|
103
111
|
continue;
|
|
104
112
|
}
|
|
105
|
-
|
|
106
|
-
A_i.innerVector(constraint_index);
|
|
107
|
-
const auto non_zeros = row_A_i.nonZeros();
|
|
108
|
-
if (non_zeros != 1) {
|
|
113
|
+
if (row_num_nonzeros[constraint_index] != 1) {
|
|
109
114
|
// Constraint is not a bound because either:
|
|
110
115
|
//
|
|
111
116
|
// 1. It's in more than one variable
|
|
@@ -122,10 +127,9 @@ Bounds<Scalar> get_bounds(
|
|
|
122
127
|
// and a ≠ 0. The gradient of c is then aeᵢ (where eᵢ denotes the i-th basis
|
|
123
128
|
// element), and c(0) = b. If c(x) ≥ 0, then since either a < 0 or a > 0, we
|
|
124
129
|
// have either x ≤ -b/a or x ≥ -b/a, respectively. ∎
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
.value(); // The nonzero value of the j-th constraint's gradient.
|
|
130
|
+
//
|
|
131
|
+
// The nonzero value of the j-th constraint's gradient.
|
|
132
|
+
const auto constraint_coefficient = row_nonzero_value[constraint_index];
|
|
129
133
|
|
|
130
134
|
// The Jacobian's sparsity pattern is structural, so the single stored value
|
|
131
135
|
// can be zero if the constraint's terms cancel (e.g., x − x + 1 ≥ 0). The
|
|
@@ -134,7 +138,7 @@ Bounds<Scalar> get_bounds(
|
|
|
134
138
|
continue;
|
|
135
139
|
}
|
|
136
140
|
|
|
137
|
-
const auto decision_variable_index =
|
|
141
|
+
const auto decision_variable_index = row_nonzero_col[constraint_index];
|
|
138
142
|
const auto decision_variable_value =
|
|
139
143
|
decision_variables[decision_variable_index].value();
|
|
140
144
|
Scalar constraint_constant;
|
|
@@ -6,7 +6,6 @@ from cart_pole_util import (
|
|
|
6
6
|
cart_pole_dynamics_double,
|
|
7
7
|
cart_pole_dynamics_variable,
|
|
8
8
|
)
|
|
9
|
-
from rk4 import rk4
|
|
10
9
|
from sleipnir.autodiff import ExpressionType, VariableMatrix
|
|
11
10
|
from sleipnir.optimization import (
|
|
12
11
|
OCP,
|
|
@@ -86,28 +85,37 @@ def test_cart_pole_ocp():
|
|
|
86
85
|
assert X.value(2, 0) == pytest.approx(x_initial[2, 0], abs=1e-8)
|
|
87
86
|
assert X.value(3, 0) == pytest.approx(x_initial[3, 0], abs=1e-8)
|
|
88
87
|
|
|
89
|
-
#
|
|
90
|
-
|
|
91
|
-
#
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
88
|
+
# Verify solution
|
|
89
|
+
for k in range(N):
|
|
90
|
+
# Cart position constraints
|
|
91
|
+
assert X.value(0, k) >= 0.0
|
|
92
|
+
assert X.value(0, k) <= d_max
|
|
93
|
+
|
|
94
|
+
# Input constraints
|
|
95
|
+
assert U.value(0, k) >= -u_max
|
|
96
|
+
assert U.value(0, k) <= u_max
|
|
97
|
+
|
|
98
|
+
# Dynamics constraints
|
|
99
|
+
#
|
|
100
|
+
# Direct collocation constrains the system dynamics at the midpoint of a
|
|
101
|
+
# cubic Hermite spline through each pair of adjacent states.
|
|
102
|
+
f = cart_pole_dynamics_double
|
|
103
|
+
h = problem.dt().value(0, k)
|
|
104
|
+
x_begin = X[:, k : k + 1].value()
|
|
105
|
+
x_end = X[:, k + 1 : k + 2].value()
|
|
106
|
+
u_begin = U[:, k : k + 1].value()
|
|
107
|
+
u_end = U[:, k + 1 : k + 2].value()
|
|
108
|
+
|
|
109
|
+
xdot_begin = f(x_begin, u_begin)
|
|
110
|
+
xdot_end = f(x_end, u_end)
|
|
111
|
+
xdot_c = -3.0 / (2.0 * h) * (x_begin - x_end) - 0.25 * (xdot_begin + xdot_end)
|
|
112
|
+
|
|
113
|
+
x_c = 0.5 * (x_begin + x_end) + h / 8.0 * (xdot_begin - xdot_end)
|
|
114
|
+
u_c = 0.5 * (u_begin + u_end)
|
|
115
|
+
|
|
116
|
+
expected_xdot_c = f(x_c, u_c)
|
|
117
|
+
for row in range(xdot_c.shape[0]):
|
|
118
|
+
assert xdot_c[row, 0] == pytest.approx(expected_xdot_c[row, 0], abs=1e-8)
|
|
111
119
|
|
|
112
120
|
# Verify final state
|
|
113
121
|
assert X.value(0, N) == pytest.approx(x_final[0, 0], abs=1e-8)
|
|
@@ -121,17 +129,20 @@ def test_cart_pole_ocp():
|
|
|
121
129
|
"Time (s),Cart position (m),Pole angle (rad),Cart velocity (m/s),Pole angular velocity (rad/s)\n"
|
|
122
130
|
)
|
|
123
131
|
|
|
132
|
+
time = 0.0
|
|
124
133
|
for k in range(N + 1):
|
|
125
134
|
f.write(
|
|
126
|
-
f"{
|
|
135
|
+
f"{time},{X.value(0, k)},{X.value(1, k)},{X.value(2, k)},{X.value(3, k)}\n"
|
|
127
136
|
)
|
|
128
137
|
|
|
138
|
+
time += problem.dt().value(0, k)
|
|
139
|
+
|
|
129
140
|
# Log inputs for offline viewing
|
|
130
141
|
with open("Cart-pole inputs.csv", "w") as f:
|
|
131
142
|
f.write("Time (s),Cart force (N)\n")
|
|
132
143
|
|
|
144
|
+
time = 0.0
|
|
133
145
|
for k in range(N + 1):
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
f.write(f"{k * dt},0.0\n")
|
|
146
|
+
f.write(f"{time},{U.value(0, k)}\n")
|
|
147
|
+
|
|
148
|
+
time += problem.dt().value(0, k)
|
|
@@ -68,29 +68,24 @@ def test_differential_drive_ocp():
|
|
|
68
68
|
assert X.value(3, 0) == pytest.approx(x_initial[3, 0], abs=1e-8)
|
|
69
69
|
assert X.value(4, 0) == pytest.approx(x_initial[4, 0], abs=1e-8)
|
|
70
70
|
|
|
71
|
-
#
|
|
72
|
-
|
|
73
|
-
#
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
assert
|
|
89
|
-
assert X.value(3, k) == pytest.approx(x[3, 0], abs=1e-8)
|
|
90
|
-
assert X.value(4, k) == pytest.approx(x[4, 0], abs=1e-8)
|
|
91
|
-
|
|
92
|
-
# Project state forward
|
|
93
|
-
x = rk4(differential_drive_dynamics_double, x, u, problem.dt().value(0, k))
|
|
71
|
+
# Verify solution
|
|
72
|
+
for k in range(N):
|
|
73
|
+
# Input constraints
|
|
74
|
+
assert U.value(0, k) >= -u_max[0, 0]
|
|
75
|
+
assert U.value(0, k) <= u_max[0, 0]
|
|
76
|
+
assert U.value(1, k) >= -u_max[1, 0]
|
|
77
|
+
assert U.value(1, k) <= u_max[1, 0]
|
|
78
|
+
|
|
79
|
+
# Dynamics constraints
|
|
80
|
+
expected_x_k1 = rk4(
|
|
81
|
+
differential_drive_dynamics_double,
|
|
82
|
+
X[:, k : k + 1].value(),
|
|
83
|
+
U[:, k : k + 1].value(),
|
|
84
|
+
problem.dt().value(0, k),
|
|
85
|
+
)
|
|
86
|
+
actual_x_k1 = X[:, k + 1 : k + 2].value()
|
|
87
|
+
for row in range(actual_x_k1.shape[0]):
|
|
88
|
+
assert actual_x_k1[row, 0] == pytest.approx(expected_x_k1[row, 0], abs=1e-8)
|
|
94
89
|
|
|
95
90
|
# Verify final state
|
|
96
91
|
assert X.value(0, N) == pytest.approx(x_final[0, 0], abs=1e-8)
|
{sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/CMakeLists.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/pyproject.toml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/python/cpp/main.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sleipnirgroup_jormungandr-0.6.7.dev22 → sleipnirgroup_jormungandr-0.6.7.dev24}/src/util/pool.cpp
RENAMED
|
File without changes
|