sleipnirgroup-jormungandr 0.6.7.dev21__tar.gz → 0.6.7.dev23__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.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +11 -4
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/cart_pole_ocp_test.py +39 -28
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/differential_drive_ocp_test.py +18 -23
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/ipm.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/ipm_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/sqp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/bounds.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/dense_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/filter.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/optimization/solver/util/sparse_kkt_solver.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/near.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/solver/exit_status_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/solver/ipm.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.7.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/util/pool.cpp +0 -0
|
@@ -167,11 +167,13 @@ ExitStatus feasibility_restoration(
|
|
|
167
167
|
DenseVector fr_x{num_vars + 2 * num_eq};
|
|
168
168
|
fr_x << x, p_e_0, n_e_0;
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
// Start the constraints pₑ, nₑ ≥ 0 with zero violation
|
|
171
|
+
DenseVector fr_s{2 * num_eq};
|
|
172
|
+
fr_s << p_e_0, n_e_0;
|
|
171
173
|
|
|
172
174
|
DenseVector fr_y = DenseVector::Zero(num_eq);
|
|
173
175
|
|
|
174
|
-
//
|
|
176
|
+
// Start the duals with perfect complementarity with respect to the slacks
|
|
175
177
|
DenseVector fr_z{2 * num_eq};
|
|
176
178
|
fr_z << fr_μ * p_e_0.cwiseInverse(), fr_μ * n_e_0.cwiseInverse();
|
|
177
179
|
|
|
@@ -428,13 +430,18 @@ ExitStatus feasibility_restoration(
|
|
|
428
430
|
DenseVector fr_x{num_vars + 2 * num_eq + 2 * num_ineq};
|
|
429
431
|
fr_x << x, p_e_0, n_e_0, p_i_0, n_i_0;
|
|
430
432
|
|
|
433
|
+
// Use the original problem's slacks for cᵢ(x) − pᵢ + nᵢ ≥ 0 since
|
|
434
|
+
// cᵢ(x) − pᵢ + nᵢ = s by construction.
|
|
435
|
+
//
|
|
436
|
+
// Start the constraints pₑ, nₑ, pᵢ, nᵢ ≥ 0 with zero violation.
|
|
431
437
|
DenseVector fr_s{s.rows() + 2 * num_eq + 2 * num_ineq};
|
|
432
438
|
fr_s.segment(0, s.rows()) = s;
|
|
433
|
-
fr_s.segment(s.rows(), 2 * num_eq + 2 * num_ineq)
|
|
439
|
+
fr_s.segment(s.rows(), 2 * num_eq + 2 * num_ineq) << p_e_0, n_e_0, p_i_0,
|
|
440
|
+
n_i_0;
|
|
434
441
|
|
|
435
442
|
DenseVector fr_y = DenseVector::Zero(c_e.rows());
|
|
436
443
|
|
|
437
|
-
//
|
|
444
|
+
// Start the duals with perfect complementarity with respect to the slacks
|
|
438
445
|
DenseVector fr_z{c_i.rows() + 2 * num_eq + 2 * num_ineq};
|
|
439
446
|
fr_z << fr_μ * s.cwiseInverse(), fr_μ * p_e_0.cwiseInverse(),
|
|
440
447
|
fr_μ * n_e_0.cwiseInverse(), fr_μ * p_i_0.cwiseInverse(),
|
|
@@ -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.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/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.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/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.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/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.dev21 → sleipnirgroup_jormungandr-0.6.7.dev23}/src/util/pool.cpp
RENAMED
|
File without changes
|