openscvx 0.4.1.dev91__tar.gz → 0.4.1.dev117__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.
- {openscvx-0.4.1.dev91/openscvx.egg-info → openscvx-0.4.1.dev117}/PKG-INFO +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/discretization.md +3 -3
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/ocp.md +51 -47
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +14 -18
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/04_viewpoint_constraints.md +9 -10
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/abstract/brachistochrone.py +6 -6
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/arm/three_link_arm.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car.py +4 -7
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car_conditional.py +2 -5
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car_disjoint.py +3 -3
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car_stljax.py +5 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/cinema_vp.py +1 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_double_integrator.py +1 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_vp.py +1 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_vp_nodal.py +7 -7
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_vp_polytope.py +1 -5
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/drone_racing.py +2 -3
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/logo.py +8 -11
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/obstacle_avoidance_nodal.py +1 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/obstacle_avoidance_vmap.py +1 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/base_problems/cinema_vp_realtime_base.py +8 -10
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/base_problems/drone_racing_realtime_base.py +2 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +2 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/cinema_vp_realtime.py +4 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/drone_racing_realtime.py +4 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/dubins_car_realtime.py +6 -6
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/obstacle_avoidance_realtime.py +4 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/rocket/3DoF_pdg.py +7 -14
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/spacecraft/proxops_cw.py +2 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/__init__.py +10 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/_version.py +3 -3
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/__init__.py +80 -4
- openscvx-0.4.1.dev91/openscvx/algorithms/AugmentedLagrangian.py → openscvx-0.4.1.dev117/openscvx/algorithms/augmented_lagrangian.py +8 -5
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/base.py +80 -7
- openscvx-0.4.1.dev91/openscvx/algorithms/ConstantProximalWeight.py → openscvx-0.4.1.dev117/openscvx/algorithms/constant_proximal_weight.py +4 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/penalized_trust_region.py +138 -38
- openscvx-0.4.1.dev91/openscvx/algorithms/RampProximalWeight.py → openscvx-0.4.1.dev117/openscvx/algorithms/ramp_proximal_weight.py +4 -2
- openscvx-0.4.1.dev117/openscvx/config.py +281 -0
- openscvx-0.4.1.dev117/openscvx/discretization/__init__.py +82 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/discretization/base.py +11 -7
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/discretization/linearize_discretize.py +52 -14
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/loader.py +29 -25
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/problem.py +189 -44
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/propagation/post_processing.py +6 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/propagation/propagation.py +21 -15
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/solvers/__init__.py +54 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/solvers/base.py +4 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/solvers/ptr_solver.py +55 -33
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/augmentation.py +43 -25
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/builder.py +1 -7
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/__init__.py +5 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/control.py +15 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/state.py +23 -1
- openscvx-0.4.1.dev117/openscvx/symbolic/expr/time.py +248 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/state.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/state.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/preprocessing.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/printing.py +30 -20
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117/openscvx.egg-info}/PKG-INFO +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/SOURCES.txt +4 -4
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/fixtures/brachistochrone.json +2 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/fixtures/brachistochrone.yaml +1 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_scaling.py +4 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_variable.py +354 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_augmentation.py +126 -5
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_preprocessing.py +1 -1
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_autotuning.py +92 -80
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_brachistochrone.py +21 -47
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_cvxpygen_optional.py +3 -3
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_discretization.py +12 -26
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_examples.py +2 -2
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_loader.py +25 -16
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_propagation.py +24 -26
- openscvx-0.4.1.dev91/openscvx/config.py +0 -618
- openscvx-0.4.1.dev91/openscvx/discretization/__init__.py +0 -25
- openscvx-0.4.1.dev91/openscvx/symbolic/time.py +0 -84
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/release-drafter.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/_docs.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/branch-name.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/docs.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/lint.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/nightly.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/release-drafter.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/release.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/tests-integration.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/tests-unit.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.gitignore +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/CONTRIBUTING.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/LICENSE +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/README.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/constraint_reformulation.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/control_parameterization.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/scvx.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/time_dilation.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UnderTheHood/lowering_architecture.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/00_introduction.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/05_visualization.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/06_logic.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/07_lie.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/favicon.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ct-scvx_dark.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ct-scvx_light.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ctcs_dark.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ctcs_light.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/problem_class_dark.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/problem_class_light.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/citation.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/examples.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/getting-started.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/index.md +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/javascripts/mathjax.js +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/logo_utils/acl_logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/logo_utils/svg_path_utils.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/obstacle_avoidance.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/plotting.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/plotting_viser.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/ctlos_cine.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/ctlos_dr.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/dtlos_cine.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/dtlos_dr.gif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/openscvx_logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/openscvx_logo_square.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/oscvx_structure_full_dark.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/video_preview.png +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/javascripts/parallax.js +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/logo.svg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/stylesheets/custom.css +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/stylesheets/parallax.css +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/home.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/main.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/partials/parallax/hero.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/partials/parallax.html +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/mkdocs.yml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/__main__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/optimization_results.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/byof.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/lowering.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/validation.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/init/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/init/interpolation.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/integrators/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/integrators/runge_kutta.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/cvxpy_constraints.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/cvxpy_variables.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/dynamics.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/jax_constraints.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/parameters.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/problem.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/unified.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/plotting.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/scp_iteration.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/animated.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/plotly_integration.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/primitives.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/scp.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/server.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/propagation/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/constraint_set.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/se3.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/so3.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/variable.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/hashing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lower.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/control.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/_registry.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/parser.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/tokenizer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/problem.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/sparsity.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/unified.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/cache.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/caching.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/profiling.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/utils.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/dependency_links.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/entry_points.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/requires.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/top_level.txt +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/pyproject.toml +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/scripts/gen_example_pages.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/scripts/gen_ref_pages.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/setup.cfg +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/brachistochrone_analytical.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_arithmetic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_expr.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_node_reference.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_parameters.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/__init__.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_array.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_constraint.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_lie.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_linalg.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_load.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_logic.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_math.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_parser.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_spatial.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_stl.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_tokenizer.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_vmap.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_hashing.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_lower_cvxpy.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_lower_jax.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_sparsity.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_unified.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_expert.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_init.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_integrators.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_optimization_results.py +0 -0
- {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_plotting.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openscvx
|
|
3
|
-
Version: 0.4.1.
|
|
3
|
+
Version: 0.4.1.dev117
|
|
4
4
|
Summary: A general Python-based successive convexification implementation which uses a JAX backend.
|
|
5
5
|
Author-email: Chris Hayner and Griffin Norris <haynec@uw.edu>
|
|
6
6
|
License: Apache Software License
|
|
@@ -35,10 +35,10 @@ def dVdt(self,
|
|
|
35
35
|
V = V.reshape(-1, self.i5)
|
|
36
36
|
|
|
37
37
|
# Compute the interpolation factor based on the discretization type
|
|
38
|
-
if self.
|
|
38
|
+
if self.dis_type == 'ZOH':
|
|
39
39
|
beta = 0.
|
|
40
|
-
elif self.
|
|
41
|
-
beta = (tau) * self.params.
|
|
40
|
+
elif self.dis_type == 'FOH':
|
|
41
|
+
beta = (tau) * self.params.sim.n
|
|
42
42
|
alpha = 1 - beta
|
|
43
43
|
|
|
44
44
|
# Interpolate the control input
|
|
@@ -16,15 +16,17 @@ The state, constrol and additional parameters are defined as follows:
|
|
|
16
16
|
|
|
17
17
|
lam_prox = cp.Parameter(nonneg = True, name='lam_prox') # Weight on the Trust Region
|
|
18
18
|
lam_cost = cp.Parameter(nonneg=True, name='lam_cost') # Weight on the Nonlinear Cost
|
|
19
|
+
lam_vc = cp.Parameter((params.sim.n - 1, params.sim.n_states), nonneg=True, name='lam_vc') # Weight on Virtual Control
|
|
20
|
+
lam_vb = cp.Parameter(nonneg=True, name='lam_vb') # Weight on Virtual Buffer
|
|
19
21
|
|
|
20
|
-
x = cp.Variable((params.
|
|
21
|
-
dx = cp.Variable((params.
|
|
22
|
-
x_bar = cp.Parameter((params.
|
|
22
|
+
x = cp.Variable((params.sim.n, params.sim.n_states), name='x') # State
|
|
23
|
+
dx = cp.Variable((params.sim.n, params.sim.n_states), name='dx') # State Trust Region
|
|
24
|
+
x_bar = cp.Parameter((params.sim.n, params.sim.n_states), name='x_bar') # Previous SCP State
|
|
23
25
|
|
|
24
26
|
|
|
25
|
-
u = cp.Variable((params.
|
|
26
|
-
du = cp.Variable((params.
|
|
27
|
-
u_bar = cp.Parameter((params.
|
|
27
|
+
u = cp.Variable((params.sim.n, params.sim.n_controls), name='u') # Control
|
|
28
|
+
du = cp.Variable((params.sim.n, params.sim.n_controls), name='du') # Control Trust Region
|
|
29
|
+
u_bar = cp.Parameter((params.sim.n, params.sim.n_controls), name='u_bar') # Previous SCP Control
|
|
28
30
|
|
|
29
31
|
```
|
|
30
32
|
|
|
@@ -62,11 +64,11 @@ The discretized dynamics matrices are defined as follows:
|
|
|
62
64
|
```python
|
|
63
65
|
|
|
64
66
|
# Discretized Augmented Dynamics Constraints
|
|
65
|
-
A_d = cp.Parameter((params.
|
|
66
|
-
B_d = cp.Parameter((params.
|
|
67
|
-
C_d = cp.Parameter((params.
|
|
68
|
-
z_d = cp.Parameter((params.
|
|
69
|
-
nu = cp.Variable((params.
|
|
67
|
+
A_d = cp.Parameter((params.sim.n - 1, params.sim.n_states, params.sim.n_states)), name='A_d')
|
|
68
|
+
B_d = cp.Parameter((params.sim.n - 1, params.sim.n_states, params.sim.n_controls), name='B_d')
|
|
69
|
+
C_d = cp.Parameter((params.sim.n - 1, params.sim.n_states, params.sim.n_controls), name='C_d')
|
|
70
|
+
z_d = cp.Parameter((params.sim.n - 1, params.sim.n_states), name='z_d') # Nonlinear Propagation Defect
|
|
71
|
+
nu = cp.Variable((params.sim.n - 1, params.sim.n_states), name='nu') # Virtual Control Slack Variable
|
|
70
72
|
|
|
71
73
|
```
|
|
72
74
|
|
|
@@ -82,10 +84,10 @@ The nonconvex nodal parameters and variables are instantiated using the followin
|
|
|
82
84
|
nu_vb = []
|
|
83
85
|
for idx_ncvx, constraint in enumerate(params.sim.constraints_nodal):
|
|
84
86
|
if not constraint.convex:
|
|
85
|
-
g.append(cp.Parameter(params.
|
|
86
|
-
grad_g_x.append(cp.Parameter((params.
|
|
87
|
-
grad_g_u.append(cp.Parameter((params.
|
|
88
|
-
nu_vb.append(cp.Variable(params.
|
|
87
|
+
g.append(cp.Parameter(params.sim.n, name = 'g_' + str(idx_ncvx)))
|
|
88
|
+
grad_g_x.append(cp.Parameter((params.sim.n, params.sim.n_states), name='grad_g_x_' + str(idx_ncvx)))
|
|
89
|
+
grad_g_u.append(cp.Parameter((params.sim.n, params.sim.n_controls), name='grad_g_u_' + str(idx_ncvx)))
|
|
90
|
+
nu_vb.append(cp.Variable(params.sim.n, name='nu_vb_' + str(idx_ncvx))) # Virtual Control for VB
|
|
89
91
|
```
|
|
90
92
|
|
|
91
93
|
|
|
@@ -99,11 +101,13 @@ def OptimalControlProblem(params: Config):
|
|
|
99
101
|
# Parameters
|
|
100
102
|
lam_prox = cp.Parameter(nonneg = True, name='lam_prox')
|
|
101
103
|
lam_cost = cp.Parameter(nonneg=True, name='lam_cost')
|
|
104
|
+
lam_vc = cp.Parameter((params.sim.n - 1, params.sim.n_states), nonneg=True, name='lam_vc')
|
|
105
|
+
lam_vb = cp.Parameter(nonneg=True, name='lam_vb')
|
|
102
106
|
|
|
103
107
|
# State
|
|
104
|
-
x = cp.Variable((params.
|
|
105
|
-
dx = cp.Variable((params.
|
|
106
|
-
x_bar = cp.Parameter((params.
|
|
108
|
+
x = cp.Variable((params.sim.n, params.sim.n_states), name='x')
|
|
109
|
+
dx = cp.Variable((params.sim.n, params.sim.n_states), name='dx') # State Trust Region
|
|
110
|
+
x_bar = cp.Parameter((params.sim.n, params.sim.n_states), name='x_bar') # Previous SCP State
|
|
107
111
|
|
|
108
112
|
# Affine Scaling for State
|
|
109
113
|
S_x = params.sim.S_x
|
|
@@ -111,9 +115,9 @@ def OptimalControlProblem(params: Config):
|
|
|
111
115
|
c_x = params.sim.c_x
|
|
112
116
|
|
|
113
117
|
# Control
|
|
114
|
-
u = cp.Variable((params.
|
|
115
|
-
du = cp.Variable((params.
|
|
116
|
-
u_bar = cp.Parameter((params.
|
|
118
|
+
u = cp.Variable((params.sim.n, params.sim.n_controls), name='u')
|
|
119
|
+
du = cp.Variable((params.sim.n, params.sim.n_controls), name='du') # Control Trust Region
|
|
120
|
+
u_bar = cp.Parameter((params.sim.n, params.sim.n_controls), name='u_bar') # Previous SCP Control
|
|
117
121
|
|
|
118
122
|
# Affine Scaling for Control
|
|
119
123
|
S_u = params.sim.S_u
|
|
@@ -121,11 +125,11 @@ def OptimalControlProblem(params: Config):
|
|
|
121
125
|
c_u = params.sim.c_u
|
|
122
126
|
|
|
123
127
|
# Discretized Augmented Dynamics Constraints
|
|
124
|
-
A_d = cp.Parameter((params.
|
|
125
|
-
B_d = cp.Parameter((params.
|
|
126
|
-
C_d = cp.Parameter((params.
|
|
127
|
-
z_d = cp.Parameter((params.
|
|
128
|
-
nu = cp.Variable((params.
|
|
128
|
+
A_d = cp.Parameter((params.sim.n - 1, params.sim.n_states, params.sim.n_states), name='A_d')
|
|
129
|
+
B_d = cp.Parameter((params.sim.n - 1, params.sim.n_states, params.sim.n_controls), name='B_d')
|
|
130
|
+
C_d = cp.Parameter((params.sim.n - 1, params.sim.n_states, params.sim.n_controls), name='C_d')
|
|
131
|
+
z_d = cp.Parameter((params.sim.n - 1, params.sim.n_states), name='z_d')
|
|
132
|
+
nu = cp.Variable((params.sim.n - 1, params.sim.n_states), name='nu') # Virtual Control
|
|
129
133
|
|
|
130
134
|
# Linearized Nonconvex Nodal Constraints
|
|
131
135
|
if params.sim.constraints_nodal:
|
|
@@ -135,15 +139,15 @@ def OptimalControlProblem(params: Config):
|
|
|
135
139
|
nu_vb = []
|
|
136
140
|
for idx_ncvx, constraint in enumerate(params.sim.constraints_nodal):
|
|
137
141
|
if not constraint.convex:
|
|
138
|
-
g.append(cp.Parameter(params.
|
|
139
|
-
grad_g_x.append(cp.Parameter((params.
|
|
140
|
-
grad_g_u.append(cp.Parameter((params.
|
|
141
|
-
nu_vb.append(cp.Variable(params.
|
|
142
|
+
g.append(cp.Parameter(params.sim.n, name = 'g_' + str(idx_ncvx)))
|
|
143
|
+
grad_g_x.append(cp.Parameter((params.sim.n, params.sim.n_states), name='grad_g_x_' + str(idx_ncvx)))
|
|
144
|
+
grad_g_u.append(cp.Parameter((params.sim.n, params.sim.n_controls), name='grad_g_u_' + str(idx_ncvx)))
|
|
145
|
+
nu_vb.append(cp.Variable(params.sim.n, name='nu_vb_' + str(idx_ncvx))) # Virtual Control for VB
|
|
142
146
|
|
|
143
147
|
# Applying the affine scaling to state and control
|
|
144
148
|
x_nonscaled = []
|
|
145
149
|
u_nonscaled = []
|
|
146
|
-
for k in range(params.
|
|
150
|
+
for k in range(params.sim.n):
|
|
147
151
|
x_nonscaled.append(S_x @ x[k] + c_x)
|
|
148
152
|
u_nonscaled.append(S_u @ u[k] + c_u)
|
|
149
153
|
|
|
@@ -157,7 +161,7 @@ def OptimalControlProblem(params: Config):
|
|
|
157
161
|
if params.sim.constraints_nodal:
|
|
158
162
|
for constraint in params.sim.constraints_nodal:
|
|
159
163
|
if constraint.nodes is None:
|
|
160
|
-
nodes = range(params.
|
|
164
|
+
nodes = range(params.sim.n)
|
|
161
165
|
else:
|
|
162
166
|
nodes = constraint.nodes
|
|
163
167
|
|
|
@@ -182,38 +186,38 @@ def OptimalControlProblem(params: Config):
|
|
|
182
186
|
if params.sim.final_state.type[i] == 'Maximize':
|
|
183
187
|
cost += lam_cost * x_nonscaled[-1][i]
|
|
184
188
|
|
|
185
|
-
if params.
|
|
186
|
-
constr += [x_nonscaled[i][params.sim.idx_t] - x_nonscaled[i-1][params.sim.idx_t] == x_nonscaled[i-1][params.sim.idx_t] - x_nonscaled[i-2][params.sim.idx_t] for i in range(2, params.
|
|
189
|
+
if params.sim._uniform_time_grid:
|
|
190
|
+
constr += [x_nonscaled[i][params.sim.idx_t] - x_nonscaled[i-1][params.sim.idx_t] == x_nonscaled[i-1][params.sim.idx_t] - x_nonscaled[i-2][params.sim.idx_t] for i in range(2, params.sim.n)] # Uniform Time Step
|
|
187
191
|
|
|
188
|
-
constr += [0 == la.inv(S_x) @ (x_nonscaled[i] - x_bar[i] - dx[i]) for i in range(params.
|
|
189
|
-
constr += [0 == la.inv(S_u) @ (u_nonscaled[i] - u_bar[i] - du[i]) for i in range(params.
|
|
192
|
+
constr += [0 == la.inv(S_x) @ (x_nonscaled[i] - x_bar[i] - dx[i]) for i in range(params.sim.n)] # State Error
|
|
193
|
+
constr += [0 == la.inv(S_u) @ (u_nonscaled[i] - u_bar[i] - du[i]) for i in range(params.sim.n)] # Control Error
|
|
190
194
|
|
|
191
195
|
constr += [x_nonscaled[i] == \
|
|
192
196
|
A_d[i-1] @ x_nonscaled[i-1] \
|
|
193
197
|
+ B_d[i-1] @ u_nonscaled[i-1] \
|
|
194
198
|
+ C_d[i-1] @ u_nonscaled[i] \
|
|
195
199
|
+ z_d[i-1] \
|
|
196
|
-
+ nu[i-1] for i in range(1, params.
|
|
200
|
+
+ nu[i-1] for i in range(1, params.sim.n)] # Dynamics Constraint
|
|
197
201
|
|
|
198
|
-
constr += [u_nonscaled[i] <= params.sim.max_control for i in range(params.
|
|
199
|
-
constr += [u_nonscaled[i] >= params.sim.min_control for i in range(params.
|
|
202
|
+
constr += [u_nonscaled[i] <= params.sim.max_control for i in range(params.sim.n)]
|
|
203
|
+
constr += [u_nonscaled[i] >= params.sim.min_control for i in range(params.sim.n)] # Control Constraints
|
|
200
204
|
|
|
201
|
-
constr += [x_nonscaled[i][params.sim.idx_x_true] <= params.sim.max_state[params.sim.idx_x_true] for i in range(params.
|
|
202
|
-
constr += [x_nonscaled[i][params.sim.idx_x_true] >= params.sim.min_state[params.sim.idx_x_true] for i in range(params.
|
|
205
|
+
constr += [x_nonscaled[i][params.sim.idx_x_true] <= params.sim.max_state[params.sim.idx_x_true] for i in range(params.sim.n)]
|
|
206
|
+
constr += [x_nonscaled[i][params.sim.idx_x_true] >= params.sim.min_state[params.sim.idx_x_true] for i in range(params.sim.n)] # State Constraints (Also implemented in CTCS but included for numerical stability)
|
|
203
207
|
|
|
204
208
|
########
|
|
205
209
|
# COSTS
|
|
206
210
|
########
|
|
207
211
|
|
|
208
212
|
inv = block([[inv_S_x, np.zeros((S_x.shape[0], S_u.shape[1]))], [np.zeros((S_u.shape[0], S_x.shape[1])), inv_S_u]])
|
|
209
|
-
cost += sum(lam_prox * cp.sum_squares(inv @ cp.hstack((dx[i], du[i]))) for i in range(params.
|
|
210
|
-
cost += sum(
|
|
213
|
+
cost += sum(lam_prox * cp.sum_squares(inv @ cp.hstack((dx[i], du[i]))) for i in range(params.sim.n)) # Trust Region Cost
|
|
214
|
+
cost += sum(lam_vc * cp.sum(cp.abs(nu[i-1])) for i in range(1, params.sim.n)) # Virtual Control Slack
|
|
211
215
|
|
|
212
216
|
idx_ncvx = 0
|
|
213
217
|
if params.sim.constraints_nodal:
|
|
214
218
|
for constraint in params.sim.constraints_nodal:
|
|
215
219
|
if not constraint.convex:
|
|
216
|
-
cost +=
|
|
220
|
+
cost += lam_vb * cp.sum(cp.pos(nu_vb[idx_ncvx]))
|
|
217
221
|
idx_ncvx += 1
|
|
218
222
|
|
|
219
223
|
for idx, nodes in zip(np.arange(params.sim.idx_y.start, params.sim.idx_y.stop), params.sim.ctcs_node_intervals):
|
|
@@ -229,15 +233,15 @@ def OptimalControlProblem(params: Config):
|
|
|
229
233
|
# PROBLEM
|
|
230
234
|
#########
|
|
231
235
|
prob = cp.Problem(cp.Minimize(cost), constr)
|
|
232
|
-
if
|
|
236
|
+
if solver.cvxpygen:
|
|
233
237
|
# Check to see if solver directory exists
|
|
234
238
|
if not os.path.exists('solver'):
|
|
235
|
-
cpg.generate_code(prob, solver =
|
|
239
|
+
cpg.generate_code(prob, solver = solver.cvx_solver, code_dir='solver', wrapper = True)
|
|
236
240
|
else:
|
|
237
241
|
# Prompt the use to indicate if they wish to overwrite the solver directory or use the existing compiled solver
|
|
238
242
|
overwrite = input("Solver directory already exists. Overwrite? (y/n): ")
|
|
239
243
|
if overwrite.lower() == 'y':
|
|
240
|
-
cpg.generate_code(prob, solver =
|
|
244
|
+
cpg.generate_code(prob, solver = solver.cvx_solver, code_dir='solver', wrapper = True)
|
|
241
245
|
else:
|
|
242
246
|
pass
|
|
243
247
|
return prob
|
{openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/03_obstacle_avoidance_vmap.md
RENAMED
|
@@ -235,6 +235,8 @@ These are continuous-time constraints (CTCS), so the drone avoids obstacles not
|
|
|
235
235
|
|
|
236
236
|
### Problem Setup
|
|
237
237
|
|
|
238
|
+
The SCP algorithm has several tuning parameters that affect convergence. These can be passed directly to the `Problem` constructor via the `algorithm` argument. For this obstacle avoidance problem:
|
|
239
|
+
|
|
238
240
|
```python
|
|
239
241
|
time = ox.Time(
|
|
240
242
|
initial=0.0,
|
|
@@ -250,21 +252,15 @@ problem = ox.Problem(
|
|
|
250
252
|
time=time,
|
|
251
253
|
constraints=constraints,
|
|
252
254
|
N=n,
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
problem.settings.scp.lam_cost = 1e1 # Cost objective weight
|
|
263
|
-
problem.settings.scp.lam_vc = 1e2 # Virtual control weight
|
|
264
|
-
# Configure cost relaxation via autotuner
|
|
265
|
-
problem.settings.scp.autotuner = ox.AugmentedLagrangian(
|
|
266
|
-
lam_cost_drop=4, # Iteration to start relaxing cost
|
|
267
|
-
lam_cost_relax=0.5 # Cost relaxation factor
|
|
255
|
+
algorithm={
|
|
256
|
+
"lam_prox": 1e1, # Trust region weight
|
|
257
|
+
"lam_cost": 1e1, # Cost objective weight
|
|
258
|
+
"lam_vc": 1e2, # Virtual control weight
|
|
259
|
+
"autotuner": ox.AugmentedLagrangian(
|
|
260
|
+
lam_cost_drop=4, # Iteration to start relaxing cost
|
|
261
|
+
lam_cost_relax=0.5, # Cost relaxation factor
|
|
262
|
+
),
|
|
263
|
+
},
|
|
268
264
|
)
|
|
269
265
|
```
|
|
270
266
|
|
|
@@ -382,17 +378,17 @@ while running:
|
|
|
382
378
|
|
|
383
379
|
Parameter updates take effect immediately on the next `step()` call without any recompilation.
|
|
384
380
|
|
|
385
|
-
### Adjusting
|
|
381
|
+
### Adjusting Algorithm Weights
|
|
386
382
|
|
|
387
383
|
You can also adjust SCP weights at runtime to change solver behavior:
|
|
388
384
|
|
|
389
385
|
```python
|
|
390
386
|
# Increase cost weight as solution converges
|
|
391
387
|
if step_result.J_vc < 1e-4:
|
|
392
|
-
problem.
|
|
388
|
+
problem.algorithm.lam_cost *= 1.1
|
|
393
389
|
|
|
394
390
|
# Tighten trust region if solution is oscillating
|
|
395
|
-
problem.
|
|
391
|
+
problem.algorithm.lam_prox = 2.0
|
|
396
392
|
```
|
|
397
393
|
|
|
398
394
|
### Resetting the Problem
|
|
@@ -325,16 +325,15 @@ problem = ox.Problem(
|
|
|
325
325
|
time=time,
|
|
326
326
|
constraints=constraints,
|
|
327
327
|
N=n,
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
lam_cost_relax=0.8
|
|
328
|
+
algorithm={
|
|
329
|
+
"lam_prox": 2e0,
|
|
330
|
+
"lam_cost": 1e-1,
|
|
331
|
+
"lam_vc": 1e2,
|
|
332
|
+
"autotuner": ox.AugmentedLagrangian(
|
|
333
|
+
lam_cost_drop=10,
|
|
334
|
+
lam_cost_relax=0.8,
|
|
335
|
+
),
|
|
336
|
+
},
|
|
338
337
|
)
|
|
339
338
|
|
|
340
339
|
problem.initialize()
|
|
@@ -74,6 +74,7 @@ time = ox.Time(
|
|
|
74
74
|
final=("minimize", total_time),
|
|
75
75
|
min=0.0,
|
|
76
76
|
max=total_time,
|
|
77
|
+
uniform_time_grid=True,
|
|
77
78
|
)
|
|
78
79
|
|
|
79
80
|
problem = Problem(
|
|
@@ -84,16 +85,15 @@ problem = Problem(
|
|
|
84
85
|
constraints=constraint_exprs,
|
|
85
86
|
N=n,
|
|
86
87
|
licq_max=1e-8,
|
|
87
|
-
|
|
88
|
+
algorithm={
|
|
89
|
+
"autotuner": "ConstantProximalWeight",
|
|
90
|
+
"lam_prox": 1e1,
|
|
91
|
+
"lam_cost": 1e0,
|
|
92
|
+
},
|
|
88
93
|
)
|
|
89
94
|
|
|
90
95
|
problem.settings.prp.dt = 0.01
|
|
91
96
|
|
|
92
|
-
problem.settings.scp.lam_prox = 1e1 # Weight on the Trust Reigon
|
|
93
|
-
problem.settings.scp.lam_cost = 1e0 # Weight on the Minimal Time Objective
|
|
94
|
-
problem.settings.scp.uniform_time_grid = True
|
|
95
|
-
|
|
96
|
-
|
|
97
97
|
plotting_dict = {}
|
|
98
98
|
|
|
99
99
|
if __name__ == "__main__":
|
|
@@ -201,11 +201,11 @@ problem = Problem(
|
|
|
201
201
|
time=time,
|
|
202
202
|
constraints=constraints,
|
|
203
203
|
N=n,
|
|
204
|
+
algorithm={"lam_vb": 1e1},
|
|
204
205
|
)
|
|
205
206
|
|
|
206
207
|
# Solver settings
|
|
207
208
|
problem.settings.prp.dt = 0.01
|
|
208
|
-
problem.settings.scp.lam_vb = 1e1
|
|
209
209
|
|
|
210
210
|
if __name__ == "__main__":
|
|
211
211
|
print("3-Link Arm Trajectory Optimization with Product of Exponentials FK")
|
|
@@ -86,6 +86,8 @@ time = ox.Time(
|
|
|
86
86
|
final=ox.Minimize(total_time),
|
|
87
87
|
min=0.0,
|
|
88
88
|
max=20,
|
|
89
|
+
time_dilation_min=0.02 * total_time,
|
|
90
|
+
uniform_time_grid=True,
|
|
89
91
|
)
|
|
90
92
|
|
|
91
93
|
problem = Problem(
|
|
@@ -96,14 +98,9 @@ problem = Problem(
|
|
|
96
98
|
constraints=constraints,
|
|
97
99
|
N=n,
|
|
98
100
|
licq_max=1e-8,
|
|
99
|
-
|
|
101
|
+
algorithm={"lam_cost": 4e1, "lam_vc": 1e3},
|
|
100
102
|
)
|
|
101
103
|
|
|
102
|
-
# Set solver parameters
|
|
103
|
-
problem.settings.scp.lam_cost = 4e1
|
|
104
|
-
problem.settings.scp.lam_vc = 1e3
|
|
105
|
-
problem.settings.scp.uniform_time_grid = True
|
|
106
|
-
|
|
107
104
|
plotting_dict = {
|
|
108
105
|
"obs_radius": problem.parameters["obs_radius"],
|
|
109
106
|
"obs_center": problem.parameters["obs_center"],
|
|
@@ -121,7 +118,7 @@ if __name__ == "__main__":
|
|
|
121
118
|
problem.reset()
|
|
122
119
|
problem.parameters["obs_center"] = np.array([0.5, 0.0])
|
|
123
120
|
total_time = 0.7 # Adjust total time for second run
|
|
124
|
-
problem.
|
|
121
|
+
problem.algorithm.lam_vc = 1e2 # Adjust virtual control weight
|
|
125
122
|
position.guess = np.linspace([0, -2], [0, 2], n)
|
|
126
123
|
theta.guess = np.zeros((n, 1))
|
|
127
124
|
speed.guess = np.zeros((n, 1))
|
|
@@ -99,6 +99,7 @@ time = ox.Time(
|
|
|
99
99
|
final=ox.Minimize(total_time),
|
|
100
100
|
min=0.0,
|
|
101
101
|
max=20,
|
|
102
|
+
uniform_time_grid=True,
|
|
102
103
|
)
|
|
103
104
|
|
|
104
105
|
problem = Problem(
|
|
@@ -109,13 +110,9 @@ problem = Problem(
|
|
|
109
110
|
constraints=constraints,
|
|
110
111
|
N=n,
|
|
111
112
|
licq_max=1e-6,
|
|
113
|
+
algorithm={"lam_vc": 1e3},
|
|
112
114
|
)
|
|
113
115
|
|
|
114
|
-
# Set solver parameters
|
|
115
|
-
problem.settings.scp.lam_vc = 1e3
|
|
116
|
-
problem.settings.scp.uniform_time_grid = True
|
|
117
|
-
|
|
118
|
-
|
|
119
116
|
plotting_dict = {
|
|
120
117
|
"obs_radius": problem.parameters["obs_radius"],
|
|
121
118
|
"obs_center": problem.parameters["obs_center"],
|
|
@@ -102,6 +102,7 @@ time = ox.Time(
|
|
|
102
102
|
final=("minimize", total_time),
|
|
103
103
|
min=0.0,
|
|
104
104
|
max=20,
|
|
105
|
+
uniform_time_grid=True,
|
|
105
106
|
)
|
|
106
107
|
|
|
107
108
|
problem = Problem(
|
|
@@ -111,10 +112,9 @@ problem = Problem(
|
|
|
111
112
|
time=time,
|
|
112
113
|
constraints=constraints,
|
|
113
114
|
N=n,
|
|
115
|
+
algorithm={"lam_vc": 6e2},
|
|
114
116
|
)
|
|
115
|
-
|
|
116
|
-
problem.settings.scp.lam_vc = 6e2
|
|
117
|
-
problem.settings.scp.uniform_time_grid = True
|
|
117
|
+
|
|
118
118
|
plotting_dict = {
|
|
119
119
|
"wp1_radius": problem.parameters["wp1_radius"],
|
|
120
120
|
"wp1_center": problem.parameters["wp1_center"],
|
|
@@ -57,7 +57,9 @@ angular_rate.guess = np.zeros((n, 1))
|
|
|
57
57
|
|
|
58
58
|
# Define time (needed for time-dependent constraints)
|
|
59
59
|
# Time is a State subclass, so it can be used directly in expressions
|
|
60
|
-
time = ox.Time(
|
|
60
|
+
time = ox.Time(
|
|
61
|
+
initial=0.0, final=("minimize", total_time), min=0.0, max=10.0, uniform_time_grid=True
|
|
62
|
+
)
|
|
61
63
|
|
|
62
64
|
|
|
63
65
|
# Define list of all states and controls
|
|
@@ -103,10 +105,9 @@ problem = Problem(
|
|
|
103
105
|
time=time, # Time is already defined above as ox.Time
|
|
104
106
|
constraints=constraints,
|
|
105
107
|
N=n,
|
|
108
|
+
algorithm={"lam_vc": 6e2},
|
|
106
109
|
)
|
|
107
|
-
|
|
108
|
-
problem.settings.scp.lam_vc = 6e2
|
|
109
|
-
problem.settings.scp.uniform_time_grid = True
|
|
110
|
+
|
|
110
111
|
# Extract parameter values from problem.parameters (not Parameter objects)
|
|
111
112
|
plotting_dict = {
|
|
112
113
|
"wp1_center": problem.parameters.get("wp1_center", None),
|
|
@@ -235,12 +235,9 @@ problem = Problem(
|
|
|
235
235
|
constraints=constraints,
|
|
236
236
|
N=n,
|
|
237
237
|
licq_max=1e-8,
|
|
238
|
+
algorithm={"lam_prox": 4e0, "ep_tr": 1e-6},
|
|
238
239
|
)
|
|
239
240
|
|
|
240
|
-
|
|
241
|
-
problem.settings.scp.lam_prox = 4e0 # Weight on the Trust Reigon
|
|
242
|
-
problem.settings.scp.ep_tr = 1e-6 # Trust Region Tolerance
|
|
243
|
-
|
|
244
241
|
plotting_dict = {
|
|
245
242
|
"n_subs": n_subs,
|
|
246
243
|
"alpha_x": alpha_x,
|
|
@@ -135,10 +135,9 @@ problem = Problem(
|
|
|
135
135
|
time=t,
|
|
136
136
|
constraints=constraint_exprs,
|
|
137
137
|
N=n,
|
|
138
|
+
algorithm={"ep_tr": 1e-3},
|
|
138
139
|
)
|
|
139
140
|
|
|
140
|
-
problem.settings.scp.ep_tr = 1e-3 # Trust Region Tolerance
|
|
141
|
-
|
|
142
141
|
plotting_dict = {"vertices": vertices}
|
|
143
142
|
|
|
144
143
|
if __name__ == "__main__":
|
|
@@ -224,10 +224,9 @@ problem = Problem(
|
|
|
224
224
|
time=time,
|
|
225
225
|
constraints=constraints,
|
|
226
226
|
N=n,
|
|
227
|
+
algorithm={"ep_tr": 1e-3},
|
|
227
228
|
)
|
|
228
229
|
|
|
229
|
-
problem.settings.scp.ep_tr = 1e-3 # Trust Region Tolerance
|
|
230
|
-
|
|
231
230
|
plotting_dict = {
|
|
232
231
|
"vertices": vertices,
|
|
233
232
|
"n_subs": n_subs,
|
|
@@ -225,15 +225,15 @@ problem = Problem(
|
|
|
225
225
|
time=time,
|
|
226
226
|
constraints=constraints,
|
|
227
227
|
N=n,
|
|
228
|
+
algorithm={
|
|
229
|
+
"lam_prox": 8e1,
|
|
230
|
+
"lam_cost": 2e1,
|
|
231
|
+
"lam_vc": 1e2,
|
|
232
|
+
"lam_vb": 4e0,
|
|
233
|
+
"ep_tr": 1e-3,
|
|
234
|
+
},
|
|
228
235
|
)
|
|
229
236
|
|
|
230
|
-
|
|
231
|
-
problem.settings.scp.lam_prox = 8e1 # Weight on the Trust Reigon
|
|
232
|
-
problem.settings.scp.lam_cost = 2e1 # Weight on the Minimal Time Objective
|
|
233
|
-
problem.settings.scp.lam_vc = 1e2 # Weight on the Virtual Control Objective
|
|
234
|
-
problem.settings.scp.lam_vb = 4e0 # Weight on the Virtual Buffer Objective
|
|
235
|
-
problem.settings.scp.ep_tr = 1e-3 # Trust Region Tolerance
|
|
236
|
-
|
|
237
237
|
plotting_dict = {
|
|
238
238
|
"vertices": vertices,
|
|
239
239
|
"n_subs": n_subs,
|
|
@@ -241,13 +241,9 @@ problem = Problem(
|
|
|
241
241
|
time=time,
|
|
242
242
|
constraints=constraints,
|
|
243
243
|
N=n,
|
|
244
|
+
algorithm={"lam_prox": 2e0, "lam_vc": 4e1, "ep_tr": 1e-5},
|
|
244
245
|
)
|
|
245
246
|
|
|
246
|
-
problem.settings.scp.lam_prox = 2e0 # Weight on the Trust Reigon
|
|
247
|
-
problem.settings.scp.lam_vc = 4e1 # Weight on the Virtual Control Objective
|
|
248
|
-
|
|
249
|
-
problem.settings.scp.ep_tr = 1e-5 # Trust Region Tolerance
|
|
250
|
-
|
|
251
247
|
plotting_dict = {
|
|
252
248
|
"vertices": vertices,
|
|
253
249
|
"n_subs": n_subs,
|
|
@@ -179,11 +179,10 @@ problem = Problem(
|
|
|
179
179
|
constraints=constraints,
|
|
180
180
|
N=n,
|
|
181
181
|
# licq_max=1E-8
|
|
182
|
+
algorithm={"ep_tr": 1e-3},
|
|
182
183
|
)
|
|
183
184
|
|
|
184
|
-
problem.
|
|
185
|
-
|
|
186
|
-
problem.settings.cvx.solver_args = {"abstol": 1e-6, "reltol": 1e-9}
|
|
185
|
+
problem.solver.solver_args = {"abstol": 1e-6, "reltol": 1e-9}
|
|
187
186
|
plotting_dict = {
|
|
188
187
|
"vertices": vertices,
|
|
189
188
|
"gate_centers": modified_centers,
|
|
@@ -127,6 +127,8 @@ time_state = ox.Time(
|
|
|
127
127
|
final=total_time,
|
|
128
128
|
min=0.0,
|
|
129
129
|
max=total_time,
|
|
130
|
+
time_dilation_min=0.001 * total_time,
|
|
131
|
+
time_dilation_max=3.0 * total_time,
|
|
130
132
|
)
|
|
131
133
|
|
|
132
134
|
# Control components
|
|
@@ -353,20 +355,15 @@ problem = Problem(
|
|
|
353
355
|
constraints=constraints,
|
|
354
356
|
N=n,
|
|
355
357
|
byof=byof,
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
358
|
+
algorithm={
|
|
359
|
+
"autotuner": {"type": "RampProximalWeight", "ramp_factor": 1.06, "lam_prox_max": 1e3},
|
|
360
|
+
"lam_vc": 1e3,
|
|
361
|
+
"lam_cost": 6e0,
|
|
362
|
+
},
|
|
359
363
|
float_dtype="float64",
|
|
364
|
+
solver={"solver_args": {"canon_backend": "COO", "enforce_dpp": True}},
|
|
360
365
|
)
|
|
361
366
|
|
|
362
|
-
# problem.settings.scp.ep_tr = 1.6e-3
|
|
363
|
-
problem.settings.scp.autotuner.ramp_factor = 1.06
|
|
364
|
-
problem.settings.scp.autotuner.lam_prox_max = 1e3
|
|
365
|
-
|
|
366
|
-
problem.settings.scp.lam_vc = 1e3
|
|
367
|
-
problem.settings.scp.lam_cost = 6e0
|
|
368
|
-
problem.settings.cvx.solver_args = {"canon_backend": "COO", "enforce_dpp": True}
|
|
369
|
-
|
|
370
367
|
|
|
371
368
|
plotting_dict = {
|
|
372
369
|
"svg_path_function": svg_path_function,
|
|
@@ -150,10 +150,9 @@ problem = Problem(
|
|
|
150
150
|
time=time,
|
|
151
151
|
constraints=constraints,
|
|
152
152
|
N=n,
|
|
153
|
+
algorithm={"lam_vb": 1e0},
|
|
153
154
|
)
|
|
154
155
|
|
|
155
|
-
problem.settings.scp.lam_vb = 1e0
|
|
156
|
-
|
|
157
156
|
plotting_dict = {
|
|
158
157
|
"obstacles_centers": obstacle_center_positions,
|
|
159
158
|
"obstacles_axes": axes,
|
|
@@ -173,10 +173,9 @@ problem = Problem(
|
|
|
173
173
|
time=time,
|
|
174
174
|
constraints=constraints,
|
|
175
175
|
N=n,
|
|
176
|
+
algorithm={"ep_tr": 1e-3},
|
|
176
177
|
)
|
|
177
178
|
|
|
178
|
-
problem.settings.scp.ep_tr = 1e-3
|
|
179
|
-
|
|
180
179
|
# =============================================================================
|
|
181
180
|
# Solve and Visualize
|
|
182
181
|
# =============================================================================
|
|
@@ -197,18 +197,16 @@ problem = Problem(
|
|
|
197
197
|
constraints=constraints,
|
|
198
198
|
N=n,
|
|
199
199
|
licq_max=1e-8,
|
|
200
|
+
algorithm={
|
|
201
|
+
"lam_prox": 4e0,
|
|
202
|
+
"lam_cost": 1e-2,
|
|
203
|
+
"lam_vc": 1e1,
|
|
204
|
+
"ep_tr": 1e-6,
|
|
205
|
+
"ep_vb": 1e-4,
|
|
206
|
+
"ep_vc": 1e-8,
|
|
207
|
+
},
|
|
200
208
|
)
|
|
201
209
|
|
|
202
|
-
problem.settings.scp.lam_prox = 4e0 # Weight on the Trust Region
|
|
203
|
-
problem.settings.scp.lam_cost = 1e-2 # Weight on the Minimal Fuel Objective
|
|
204
|
-
problem.settings.scp.lam_vc = 1e1 # Weight on the Virtual Control Objective
|
|
205
|
-
|
|
206
|
-
problem.settings.scp.ep_tr = 1e-6 # Trust Region Tolerance
|
|
207
|
-
problem.settings.scp.ep_vb = 1e-4 # Virtual Control Tolerance
|
|
208
|
-
problem.settings.scp.ep_vc = 1e-8 # Virtual Control Tolerance for CTCS
|
|
209
|
-
problem.settings.scp.lam_prox_adapt = 1.3 # Trust Region Adaptation Factor
|
|
210
|
-
problem.settings.scp.lam_prox_max_scaling_factor = 1e3 # Maximum Trust Region Weight
|
|
211
|
-
|
|
212
210
|
plotting_dict = {
|
|
213
211
|
"n_subs": n_subs,
|
|
214
212
|
"alpha_x": alpha_x,
|