sleipnirgroup-jormungandr 0.6.6.dev18__tar.gz → 0.6.6.dev19__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.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/interior_point.hpp +0 -19
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/sqp.hpp +0 -10
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/bounds.hpp +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +60 -2
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/filter.hpp +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/solver/exit_status_test.py +33 -0
- sleipnirgroup_jormungandr-0.6.6.dev18/include/sleipnir/optimization/solver/util/is_locally_infeasible.hpp +0 -62
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/newton.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/optimization/solver/interior_point.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/util/pool.cpp +0 -0
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
#include "sleipnir/optimization/solver/util/feasibility_restoration.hpp"
|
|
22
22
|
#include "sleipnir/optimization/solver/util/filter.hpp"
|
|
23
23
|
#include "sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp"
|
|
24
|
-
#include "sleipnir/optimization/solver/util/is_locally_infeasible.hpp"
|
|
25
24
|
#include "sleipnir/optimization/solver/util/kkt_error.hpp"
|
|
26
25
|
#include "sleipnir/optimization/solver/util/regularized_ldlt.hpp"
|
|
27
26
|
#include "sleipnir/util/assert.hpp"
|
|
@@ -383,24 +382,6 @@ ExitStatus interior_point(
|
|
|
383
382
|
ScopedProfiler inner_iter_profiler{inner_iter_prof};
|
|
384
383
|
ScopedProfiler feasibility_check_profiler{feasibility_check_prof};
|
|
385
384
|
|
|
386
|
-
// Check for local equality constraint infeasibility
|
|
387
|
-
if (is_equality_locally_infeasible(A_e, c_e)) {
|
|
388
|
-
if (options.diagnostics) {
|
|
389
|
-
print_c_e_local_infeasibility_error(c_e, Scalar(options.tolerance));
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
return ExitStatus::LOCALLY_INFEASIBLE;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// Check for local inequality constraint infeasibility
|
|
396
|
-
if (is_inequality_locally_infeasible(A_i, c_i)) {
|
|
397
|
-
if (options.diagnostics) {
|
|
398
|
-
print_c_i_local_infeasibility_error(c_i, Scalar(options.tolerance));
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
return ExitStatus::LOCALLY_INFEASIBLE;
|
|
402
|
-
}
|
|
403
|
-
|
|
404
385
|
// Check for diverging iterates
|
|
405
386
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite() ||
|
|
406
387
|
s.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !s.allFinite()) {
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
#include "sleipnir/optimization/solver/util/append_as_triplets.hpp"
|
|
20
20
|
#include "sleipnir/optimization/solver/util/feasibility_restoration.hpp"
|
|
21
21
|
#include "sleipnir/optimization/solver/util/filter.hpp"
|
|
22
|
-
#include "sleipnir/optimization/solver/util/is_locally_infeasible.hpp"
|
|
23
22
|
#include "sleipnir/optimization/solver/util/kkt_error.hpp"
|
|
24
23
|
#include "sleipnir/optimization/solver/util/regularized_ldlt.hpp"
|
|
25
24
|
#include "sleipnir/util/assert.hpp"
|
|
@@ -260,15 +259,6 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
260
259
|
ScopedProfiler inner_iter_profiler{inner_iter_prof};
|
|
261
260
|
ScopedProfiler feasibility_check_profiler{feasibility_check_prof};
|
|
262
261
|
|
|
263
|
-
// Check for local equality constraint infeasibility
|
|
264
|
-
if (is_equality_locally_infeasible(A_e, c_e)) {
|
|
265
|
-
if (options.diagnostics) {
|
|
266
|
-
print_c_e_local_infeasibility_error(c_e, Scalar(options.tolerance));
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
return ExitStatus::LOCALLY_INFEASIBLE;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
262
|
// Check for diverging iterates
|
|
273
263
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite()) {
|
|
274
264
|
return ExitStatus::DIVERGING_ITERATES;
|
|
@@ -215,7 +215,7 @@ void project_onto_bounds(
|
|
|
215
215
|
// We assume that bound infeasibility is handled elsewhere.
|
|
216
216
|
slp_assert(lower <= upper);
|
|
217
217
|
|
|
218
|
-
// See B.2 in [
|
|
218
|
+
// See B.2 in [4] and section 3.6 in [2]
|
|
219
219
|
if (isfinite(lower) && isfinite(upper)) {
|
|
220
220
|
auto p_L = std::min(κ_1 * std::max(Scalar(1), abs(lower)),
|
|
221
221
|
κ_2 * (upper - lower));
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
#include "sleipnir/optimization/solver/util/append_as_triplets.hpp"
|
|
22
22
|
#include "sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp"
|
|
23
23
|
#include "sleipnir/optimization/solver/util/problem_scaling.hpp"
|
|
24
|
+
#include "sleipnir/util/print_diagnostics.hpp"
|
|
24
25
|
|
|
25
26
|
namespace slp {
|
|
26
27
|
|
|
@@ -318,7 +319,26 @@ ExitStatus feasibility_restoration(
|
|
|
318
319
|
|
|
319
320
|
return ExitStatus::SUCCESS;
|
|
320
321
|
} else if (status == ExitStatus::SUCCESS) {
|
|
321
|
-
|
|
322
|
+
// Feasibility restoration converged to a minimizer of the constraint
|
|
323
|
+
// violation. If the constraint violation is still above the tolerance,
|
|
324
|
+
// that minimizer is a certificate of local infeasibility. Declaring local
|
|
325
|
+
// infeasibility anywhere else risks false positives (e.g., a
|
|
326
|
+
// point-in-time test can reject iterates the solver would otherwise
|
|
327
|
+
// escape). See section 3.3, p. 14 of [2].
|
|
328
|
+
DenseVector c_e = matrices.c_e(x);
|
|
329
|
+
if (matrices.scaling.c_e.size() > 0) {
|
|
330
|
+
c_e = matrices.scaling.c_e.cwiseInverse().cwiseProduct(c_e);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
if (c_e.template lpNorm<Eigen::Infinity>() > Scalar(options.tolerance)) {
|
|
334
|
+
if (options.diagnostics) {
|
|
335
|
+
print_c_e_local_infeasibility_error(c_e, Scalar(options.tolerance));
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return ExitStatus::LOCALLY_INFEASIBLE;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return ExitStatus::FEASIBILITY_RESTORATION_FAILED;
|
|
322
342
|
} else {
|
|
323
343
|
return ExitStatus::FEASIBILITY_RESTORATION_FAILED;
|
|
324
344
|
}
|
|
@@ -621,7 +641,45 @@ ExitStatus feasibility_restoration(
|
|
|
621
641
|
|
|
622
642
|
return ExitStatus::SUCCESS;
|
|
623
643
|
} else if (status == ExitStatus::SUCCESS) {
|
|
624
|
-
|
|
644
|
+
// Feasibility restoration converged to a minimizer of the constraint
|
|
645
|
+
// violation. If the constraint violation is still above the tolerance,
|
|
646
|
+
// that minimizer is a certificate of local infeasibility. Declaring local
|
|
647
|
+
// infeasibility anywhere else risks false positives (e.g., a
|
|
648
|
+
// point-in-time test can reject iterates the solver would otherwise
|
|
649
|
+
// escape). See section 3.3, p. 14 of [2].
|
|
650
|
+
DenseVector c_e = matrices.c_e(x);
|
|
651
|
+
if (matrices.scaling.c_e.size() > 0) {
|
|
652
|
+
c_e = matrices.scaling.c_e.cwiseInverse().cwiseProduct(c_e);
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
DenseVector c_i = matrices.c_i(x);
|
|
656
|
+
if (matrices.scaling.c_i.size() > 0) {
|
|
657
|
+
c_i = matrices.scaling.c_i.cwiseInverse().cwiseProduct(c_i);
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// Inequality constraints cᵢ(x) ≥ 0 are only violated where they're
|
|
661
|
+
// negative
|
|
662
|
+
const DenseVector c_i_violation = (-c_i).cwiseMax(Scalar(0));
|
|
663
|
+
|
|
664
|
+
const bool c_e_violated =
|
|
665
|
+
c_e.template lpNorm<Eigen::Infinity>() > Scalar(options.tolerance);
|
|
666
|
+
const bool c_i_violated = c_i_violation.template lpNorm<Eigen::Infinity>() >
|
|
667
|
+
Scalar(options.tolerance);
|
|
668
|
+
|
|
669
|
+
if (c_e_violated || c_i_violated) {
|
|
670
|
+
if (options.diagnostics) {
|
|
671
|
+
if (c_e_violated) {
|
|
672
|
+
print_c_e_local_infeasibility_error(c_e, Scalar(options.tolerance));
|
|
673
|
+
}
|
|
674
|
+
if (c_i_violated) {
|
|
675
|
+
print_c_i_local_infeasibility_error(c_i, Scalar(options.tolerance));
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
return ExitStatus::LOCALLY_INFEASIBLE;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
return ExitStatus::FEASIBILITY_RESTORATION_FAILED;
|
|
625
683
|
} else {
|
|
626
684
|
return ExitStatus::FEASIBILITY_RESTORATION_FAILED;
|
|
627
685
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""These tests ensure coverage of the off-nominal exit statuses"""
|
|
2
2
|
|
|
3
|
+
import pytest
|
|
3
4
|
from sleipnir.autodiff import ExpressionType, sqrt
|
|
4
5
|
from sleipnir.optimization import ExitStatus, Problem
|
|
5
6
|
|
|
@@ -72,6 +73,38 @@ def test_locally_infeasible_inequality_constraints():
|
|
|
72
73
|
assert problem.solve(diagnostics=True) == ExitStatus.LOCALLY_INFEASIBLE
|
|
73
74
|
|
|
74
75
|
|
|
76
|
+
def test_small_equality_constraint_scaling_is_feasible():
|
|
77
|
+
problem = Problem()
|
|
78
|
+
|
|
79
|
+
x = problem.decision_variable()
|
|
80
|
+
x.set_value(5005)
|
|
81
|
+
|
|
82
|
+
problem.subject_to(1e-5 * (x - 5) == 0)
|
|
83
|
+
|
|
84
|
+
assert problem.cost_function_type() == ExpressionType.NONE
|
|
85
|
+
assert problem.equality_constraint_type() == ExpressionType.LINEAR
|
|
86
|
+
assert problem.inequality_constraint_type() == ExpressionType.NONE
|
|
87
|
+
|
|
88
|
+
assert problem.solve(diagnostics=True) == ExitStatus.SUCCESS
|
|
89
|
+
assert x.value() == pytest.approx(5, abs=1e-3)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def test_small_inequality_constraint_scaling_is_feasible():
|
|
93
|
+
problem = Problem()
|
|
94
|
+
|
|
95
|
+
x = problem.decision_variable()
|
|
96
|
+
x.set_value(5005)
|
|
97
|
+
|
|
98
|
+
problem.subject_to(1e-5 * (5 - x) >= 0)
|
|
99
|
+
|
|
100
|
+
assert problem.cost_function_type() == ExpressionType.NONE
|
|
101
|
+
assert problem.equality_constraint_type() == ExpressionType.NONE
|
|
102
|
+
assert problem.inequality_constraint_type() == ExpressionType.LINEAR
|
|
103
|
+
|
|
104
|
+
assert problem.solve(diagnostics=True) == ExitStatus.SUCCESS
|
|
105
|
+
assert x.value() <= 5 + 1e-3
|
|
106
|
+
|
|
107
|
+
|
|
75
108
|
def test_nonfinite_cost():
|
|
76
109
|
problem = Problem()
|
|
77
110
|
x = problem.decision_variable()
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Sleipnir contributors
|
|
2
|
-
|
|
3
|
-
#pragma once
|
|
4
|
-
|
|
5
|
-
#include <Eigen/Core>
|
|
6
|
-
#include <Eigen/SparseCore>
|
|
7
|
-
|
|
8
|
-
// See docs/algorithms.md#Works_cited for citation definitions
|
|
9
|
-
|
|
10
|
-
namespace slp {
|
|
11
|
-
|
|
12
|
-
/// Returns true if the problem's equality constraints are locally infeasible.
|
|
13
|
-
///
|
|
14
|
-
/// @tparam Scalar Scalar type.
|
|
15
|
-
/// @param A_e Equality constraint Jacobian Aₑ(x).
|
|
16
|
-
/// @param c_e Equality constraints cₑ(x).
|
|
17
|
-
template <typename Scalar>
|
|
18
|
-
bool is_equality_locally_infeasible(
|
|
19
|
-
const Eigen::SparseMatrix<Scalar>& A_e,
|
|
20
|
-
const Eigen::Vector<Scalar, Eigen::Dynamic>& c_e) {
|
|
21
|
-
// The equality constraints are locally infeasible if
|
|
22
|
-
//
|
|
23
|
-
// Aₑᵀcₑ → 0
|
|
24
|
-
// ‖cₑ‖ > ε
|
|
25
|
-
//
|
|
26
|
-
// See "Infeasibility detection" in section 6 of [3].
|
|
27
|
-
return A_e.rows() > 0 && (A_e.transpose() * c_e).norm() < Scalar(1e-6) &&
|
|
28
|
-
c_e.norm() > Scalar(1e-2);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/// Returns true if the problem's inequality constraints are locally infeasible.
|
|
32
|
-
///
|
|
33
|
-
/// @tparam Scalar Scalar type.
|
|
34
|
-
/// @param A_i Inequality constraint Jacobian Aᵢ(x).
|
|
35
|
-
/// @param c_i Inequality constraints cᵢ(x).
|
|
36
|
-
template <typename Scalar>
|
|
37
|
-
bool is_inequality_locally_infeasible(
|
|
38
|
-
const Eigen::SparseMatrix<Scalar>& A_i,
|
|
39
|
-
const Eigen::Vector<Scalar, Eigen::Dynamic>& c_i) {
|
|
40
|
-
// The inequality constraints are locally infeasible if
|
|
41
|
-
//
|
|
42
|
-
// Aᵢᵀcᵢ⁺ → 0
|
|
43
|
-
// ‖cᵢ⁺‖ > ε
|
|
44
|
-
//
|
|
45
|
-
// where cᵢ⁺ = min(cᵢ, 0).
|
|
46
|
-
//
|
|
47
|
-
// See "Infeasibility detection" in section 6 of [3].
|
|
48
|
-
//
|
|
49
|
-
// cᵢ⁺ is used instead of cᵢ⁻ from the paper to follow the convention that
|
|
50
|
-
// feasible inequality constraints are ≥ 0.
|
|
51
|
-
if (A_i.rows() > 0) {
|
|
52
|
-
Eigen::Vector<Scalar, Eigen::Dynamic> c_i_plus = c_i.cwiseMin(Scalar(0));
|
|
53
|
-
if ((A_i.transpose() * c_i_plus).norm() < Scalar(1e-6) &&
|
|
54
|
-
c_i_plus.norm() > Scalar(1e-6)) {
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
} // namespace slp
|
{sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/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
|
{sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/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.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/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.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev19}/src/util/pool.cpp
RENAMED
|
File without changes
|