sleipnirgroup-jormungandr 0.6.6.dev18__tar.gz → 0.6.6.dev20__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.dev20}/PKG-INFO +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/interior_point.hpp +15 -38
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/newton.hpp +7 -11
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/sqp.hpp +13 -27
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/bounds.hpp +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/feasibility_restoration.hpp +60 -2
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/filter.hpp +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/src/sleipnir/__init__.py +1 -1
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/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.dev20}/CMakeLists.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/LICENSE.txt +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/README.md +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/SleipnirConfig.cmake.in +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/cmake/BuildTypes.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/cmake/CompilerFlags.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/cmake/Pybind11Mkdoc.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/cmake/SubdirList.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/cmake/arm-none-eabi.cmake +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/expression.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/expression_graph.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/expression_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/gradient.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/hessian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/jacobian.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/sleipnir_base.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/slice.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/variable.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/variable_block.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/autodiff/variable_matrix.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/multistart.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/ocp/dynamics_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/ocp/timestep_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/ocp/transcription_method.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/ocp.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/problem.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/exit_status.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/interior_point_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/iteration_info.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/newton_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/options.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/sqp_matrix_callbacks.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/all_finite.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/append_as_triplets.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/dense_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/fraction_to_the_boundary_rule.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/inertia.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/kkt_error.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/lagrange_multiplier_estimate.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/problem_scaling.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/sparse_inf_norms.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/optimization/solver/util/sparse_regularized_ldlt.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/assert.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/concepts.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/empty.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/function_ref.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/intrusive_shared_ptr.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/pool.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/print.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/print_diagnostics.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/profiler.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/scope_exit.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/spy.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/include/sleipnir/util/symbol_exports.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/pyproject.toml +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_expression_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_variable.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_variable_block.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/autodiff/bind_variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/binders.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/docstrings.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/for_each_type.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/main.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/bind_equality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/bind_inequality_constraints.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/bind_ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/bind_problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/ocp/bind_dynamics_type.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/ocp/bind_timestep_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/ocp/bind_transcription_method.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/solver/bind_exit_status.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/optimization/solver/bind_iteration_info.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/cpp/try_cast.hpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/src/sleipnir/autodiff/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/src/sleipnir/optimization/__init__.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/autodiff/gradient_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/autodiff/hessian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/autodiff/jacobian_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/autodiff/variable_matrix_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/autodiff/variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/arm_on_elevator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/cart_pole_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/cart_pole_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/cart_pole_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/constraints_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/decision_variable_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/differential_drive_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/differential_drive_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/differential_drive_util.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/double_integrator_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/flywheel_ocp_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/flywheel_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/linear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/multistart_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/nonlinear_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/problem_spy_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/quadratic_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/rk4.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/python/test/optimization/trivial_problem_test.py +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/autodiff/gradient.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/autodiff/hessian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/autodiff/jacobian.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/autodiff/variable_matrix.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/optimization/ocp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/optimization/problem.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/optimization/solver/interior_point.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/optimization/solver/newton.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/src/optimization/solver/sqp.cpp +0 -0
- {sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/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"
|
|
@@ -156,7 +155,6 @@ ExitStatus interior_point(
|
|
|
156
155
|
solve_profilers.emplace_back("solver");
|
|
157
156
|
solve_profilers.emplace_back("↳ setup");
|
|
158
157
|
solve_profilers.emplace_back("↳ iteration");
|
|
159
|
-
solve_profilers.emplace_back(" ↳ feasibility check");
|
|
160
158
|
solve_profilers.emplace_back(" ↳ callbacks");
|
|
161
159
|
solve_profilers.emplace_back(" ↳ KKT matrix build");
|
|
162
160
|
solve_profilers.emplace_back(" ↳ KKT matrix decomp");
|
|
@@ -176,25 +174,24 @@ ExitStatus interior_point(
|
|
|
176
174
|
auto& solver_prof = solve_profilers[0];
|
|
177
175
|
auto& setup_prof = solve_profilers[1];
|
|
178
176
|
auto& inner_iter_prof = solve_profilers[2];
|
|
179
|
-
auto&
|
|
180
|
-
auto&
|
|
181
|
-
auto&
|
|
182
|
-
auto&
|
|
183
|
-
auto&
|
|
184
|
-
auto&
|
|
185
|
-
auto&
|
|
186
|
-
auto& feasibility_restoration_prof = solve_profilers[10];
|
|
177
|
+
auto& iter_callbacks_prof = solve_profilers[3];
|
|
178
|
+
auto& kkt_matrix_build_prof = solve_profilers[4];
|
|
179
|
+
auto& kkt_matrix_decomp_prof = solve_profilers[5];
|
|
180
|
+
auto& kkt_system_solve_prof = solve_profilers[6];
|
|
181
|
+
auto& line_search_prof = solve_profilers[7];
|
|
182
|
+
auto& soc_prof = solve_profilers[8];
|
|
183
|
+
auto& feasibility_restoration_prof = solve_profilers[9];
|
|
187
184
|
|
|
188
185
|
// Set up profiled matrix callbacks
|
|
189
186
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
190
|
-
auto& f_prof = solve_profilers[
|
|
191
|
-
auto& g_prof = solve_profilers[
|
|
192
|
-
auto& H_prof = solve_profilers[
|
|
193
|
-
auto& H_c_prof = solve_profilers[
|
|
194
|
-
auto& c_e_prof = solve_profilers[
|
|
195
|
-
auto& A_e_prof = solve_profilers[
|
|
196
|
-
auto& c_i_prof = solve_profilers[
|
|
197
|
-
auto& A_i_prof = solve_profilers[
|
|
187
|
+
auto& f_prof = solve_profilers[10];
|
|
188
|
+
auto& g_prof = solve_profilers[11];
|
|
189
|
+
auto& H_prof = solve_profilers[12];
|
|
190
|
+
auto& H_c_prof = solve_profilers[13];
|
|
191
|
+
auto& c_e_prof = solve_profilers[14];
|
|
192
|
+
auto& A_e_prof = solve_profilers[15];
|
|
193
|
+
auto& c_i_prof = solve_profilers[16];
|
|
194
|
+
auto& A_i_prof = solve_profilers[17];
|
|
198
195
|
|
|
199
196
|
InteriorPointMatrixCallbacks<Scalar> matrices{
|
|
200
197
|
matrix_callbacks.num_decision_variables,
|
|
@@ -381,25 +378,6 @@ ExitStatus interior_point(
|
|
|
381
378
|
|
|
382
379
|
while (E_0 > Scalar(options.tolerance)) {
|
|
383
380
|
ScopedProfiler inner_iter_profiler{inner_iter_prof};
|
|
384
|
-
ScopedProfiler feasibility_check_profiler{feasibility_check_prof};
|
|
385
|
-
|
|
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
381
|
|
|
404
382
|
// Check for diverging iterates
|
|
405
383
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite() ||
|
|
@@ -407,7 +385,6 @@ ExitStatus interior_point(
|
|
|
407
385
|
return ExitStatus::DIVERGING_ITERATES;
|
|
408
386
|
}
|
|
409
387
|
|
|
410
|
-
feasibility_check_profiler.stop();
|
|
411
388
|
ScopedProfiler iter_callbacks_profiler{iter_callbacks_prof};
|
|
412
389
|
|
|
413
390
|
// Call iteration callbacks
|
|
@@ -65,7 +65,6 @@ ExitStatus newton(
|
|
|
65
65
|
solve_profilers.emplace_back("solver");
|
|
66
66
|
solve_profilers.emplace_back("↳ setup");
|
|
67
67
|
solve_profilers.emplace_back("↳ iteration");
|
|
68
|
-
solve_profilers.emplace_back(" ↳ feasibility check");
|
|
69
68
|
solve_profilers.emplace_back(" ↳ callbacks");
|
|
70
69
|
solve_profilers.emplace_back(" ↳ KKT matrix decomp");
|
|
71
70
|
solve_profilers.emplace_back(" ↳ KKT system solve");
|
|
@@ -77,17 +76,16 @@ ExitStatus newton(
|
|
|
77
76
|
auto& solver_prof = solve_profilers[0];
|
|
78
77
|
auto& setup_prof = solve_profilers[1];
|
|
79
78
|
auto& inner_iter_prof = solve_profilers[2];
|
|
80
|
-
auto&
|
|
81
|
-
auto&
|
|
82
|
-
auto&
|
|
83
|
-
auto&
|
|
84
|
-
auto& line_search_prof = solve_profilers[7];
|
|
79
|
+
auto& iter_callbacks_prof = solve_profilers[3];
|
|
80
|
+
auto& kkt_matrix_decomp_prof = solve_profilers[4];
|
|
81
|
+
auto& kkt_system_solve_prof = solve_profilers[5];
|
|
82
|
+
auto& line_search_prof = solve_profilers[6];
|
|
85
83
|
|
|
86
84
|
// Set up profiled matrix callbacks
|
|
87
85
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
88
|
-
auto& f_prof = solve_profilers[
|
|
89
|
-
auto& g_prof = solve_profilers[
|
|
90
|
-
auto& H_prof = solve_profilers[
|
|
86
|
+
auto& f_prof = solve_profilers[7];
|
|
87
|
+
auto& g_prof = solve_profilers[8];
|
|
88
|
+
auto& H_prof = solve_profilers[9];
|
|
91
89
|
|
|
92
90
|
NewtonMatrixCallbacks<Scalar> matrices{
|
|
93
91
|
matrix_callbacks.num_decision_variables,
|
|
@@ -160,14 +158,12 @@ ExitStatus newton(
|
|
|
160
158
|
|
|
161
159
|
while (E_0 > Scalar(options.tolerance)) {
|
|
162
160
|
ScopedProfiler inner_iter_profiler{inner_iter_prof};
|
|
163
|
-
ScopedProfiler feasibility_check_profiler{feasibility_check_prof};
|
|
164
161
|
|
|
165
162
|
// Check for diverging iterates
|
|
166
163
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite()) {
|
|
167
164
|
return ExitStatus::DIVERGING_ITERATES;
|
|
168
165
|
}
|
|
169
166
|
|
|
170
|
-
feasibility_check_profiler.stop();
|
|
171
167
|
ScopedProfiler iter_callbacks_profiler{iter_callbacks_prof};
|
|
172
168
|
|
|
173
169
|
// Call iteration callbacks
|
|
@@ -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"
|
|
@@ -113,7 +112,6 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
113
112
|
solve_profilers.emplace_back("solver");
|
|
114
113
|
solve_profilers.emplace_back("↳ setup");
|
|
115
114
|
solve_profilers.emplace_back("↳ iteration");
|
|
116
|
-
solve_profilers.emplace_back(" ↳ feasibility check");
|
|
117
115
|
solve_profilers.emplace_back(" ↳ callbacks");
|
|
118
116
|
solve_profilers.emplace_back(" ↳ KKT matrix build");
|
|
119
117
|
solve_profilers.emplace_back(" ↳ KKT matrix decomp");
|
|
@@ -131,23 +129,22 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
131
129
|
auto& solver_prof = solve_profilers[0];
|
|
132
130
|
auto& setup_prof = solve_profilers[1];
|
|
133
131
|
auto& inner_iter_prof = solve_profilers[2];
|
|
134
|
-
auto&
|
|
135
|
-
auto&
|
|
136
|
-
auto&
|
|
137
|
-
auto&
|
|
138
|
-
auto&
|
|
139
|
-
auto&
|
|
140
|
-
auto&
|
|
141
|
-
auto& feasibility_restoration_prof = solve_profilers[10];
|
|
132
|
+
auto& iter_callbacks_prof = solve_profilers[3];
|
|
133
|
+
auto& kkt_matrix_build_prof = solve_profilers[4];
|
|
134
|
+
auto& kkt_matrix_decomp_prof = solve_profilers[5];
|
|
135
|
+
auto& kkt_system_solve_prof = solve_profilers[6];
|
|
136
|
+
auto& line_search_prof = solve_profilers[7];
|
|
137
|
+
auto& soc_prof = solve_profilers[8];
|
|
138
|
+
auto& feasibility_restoration_prof = solve_profilers[9];
|
|
142
139
|
|
|
143
140
|
// Set up profiled matrix callbacks
|
|
144
141
|
#ifndef SLEIPNIR_DISABLE_DIAGNOSTICS
|
|
145
|
-
auto& f_prof = solve_profilers[
|
|
146
|
-
auto& g_prof = solve_profilers[
|
|
147
|
-
auto& H_prof = solve_profilers[
|
|
148
|
-
auto& H_c_prof = solve_profilers[
|
|
149
|
-
auto& c_e_prof = solve_profilers[
|
|
150
|
-
auto& A_e_prof = solve_profilers[
|
|
142
|
+
auto& f_prof = solve_profilers[10];
|
|
143
|
+
auto& g_prof = solve_profilers[11];
|
|
144
|
+
auto& H_prof = solve_profilers[12];
|
|
145
|
+
auto& H_c_prof = solve_profilers[13];
|
|
146
|
+
auto& c_e_prof = solve_profilers[14];
|
|
147
|
+
auto& A_e_prof = solve_profilers[15];
|
|
151
148
|
|
|
152
149
|
SQPMatrixCallbacks<Scalar> matrices{
|
|
153
150
|
matrix_callbacks.num_decision_variables,
|
|
@@ -258,23 +255,12 @@ ExitStatus sqp(const SQPMatrixCallbacks<Scalar>& matrix_callbacks,
|
|
|
258
255
|
|
|
259
256
|
while (E_0 > Scalar(options.tolerance)) {
|
|
260
257
|
ScopedProfiler inner_iter_profiler{inner_iter_prof};
|
|
261
|
-
ScopedProfiler feasibility_check_profiler{feasibility_check_prof};
|
|
262
|
-
|
|
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
258
|
|
|
272
259
|
// Check for diverging iterates
|
|
273
260
|
if (x.template lpNorm<Eigen::Infinity>() > Scalar(1e10) || !x.allFinite()) {
|
|
274
261
|
return ExitStatus::DIVERGING_ITERATES;
|
|
275
262
|
}
|
|
276
263
|
|
|
277
|
-
feasibility_check_profiler.stop();
|
|
278
264
|
ScopedProfiler iter_callbacks_profiler{iter_callbacks_prof};
|
|
279
265
|
|
|
280
266
|
// Call iteration callbacks
|
|
@@ -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.dev20}/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
|
{sleipnirgroup_jormungandr-0.6.6.dev18 → sleipnirgroup_jormungandr-0.6.6.dev20}/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.dev20}/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.dev20}/src/util/pool.cpp
RENAMED
|
File without changes
|