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.
Files changed (310) hide show
  1. {openscvx-0.4.1.dev91/openscvx.egg-info → openscvx-0.4.1.dev117}/PKG-INFO +1 -1
  2. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/discretization.md +3 -3
  3. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/ocp.md +51 -47
  4. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/03_obstacle_avoidance_vmap.md +14 -18
  5. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/04_viewpoint_constraints.md +9 -10
  6. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/abstract/brachistochrone.py +6 -6
  7. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/arm/three_link_arm.py +1 -1
  8. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car.py +4 -7
  9. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car_conditional.py +2 -5
  10. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car_disjoint.py +3 -3
  11. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/car/dubins_car_stljax.py +5 -4
  12. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/cinema_vp.py +1 -4
  13. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_double_integrator.py +1 -2
  14. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_vp.py +1 -2
  15. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_vp_nodal.py +7 -7
  16. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/dr_vp_polytope.py +1 -5
  17. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/drone_racing.py +2 -3
  18. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/logo.py +8 -11
  19. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/obstacle_avoidance_nodal.py +1 -2
  20. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/obstacle_avoidance_vmap.py +1 -2
  21. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/base_problems/cinema_vp_realtime_base.py +8 -10
  22. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/base_problems/drone_racing_realtime_base.py +2 -4
  23. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/base_problems/obstacle_avoidance_realtime_base.py +2 -4
  24. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/cinema_vp_realtime.py +4 -4
  25. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/drone_racing_realtime.py +4 -4
  26. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/dubins_car_realtime.py +6 -6
  27. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/realtime/obstacle_avoidance_realtime.py +4 -4
  28. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/rocket/3DoF_pdg.py +7 -14
  29. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/spacecraft/proxops_cw.py +2 -4
  30. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/__init__.py +10 -2
  31. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/_version.py +3 -3
  32. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/__init__.py +80 -4
  33. openscvx-0.4.1.dev91/openscvx/algorithms/AugmentedLagrangian.py → openscvx-0.4.1.dev117/openscvx/algorithms/augmented_lagrangian.py +8 -5
  34. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/base.py +80 -7
  35. openscvx-0.4.1.dev91/openscvx/algorithms/ConstantProximalWeight.py → openscvx-0.4.1.dev117/openscvx/algorithms/constant_proximal_weight.py +4 -2
  36. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/penalized_trust_region.py +138 -38
  37. openscvx-0.4.1.dev91/openscvx/algorithms/RampProximalWeight.py → openscvx-0.4.1.dev117/openscvx/algorithms/ramp_proximal_weight.py +4 -2
  38. openscvx-0.4.1.dev117/openscvx/config.py +281 -0
  39. openscvx-0.4.1.dev117/openscvx/discretization/__init__.py +82 -0
  40. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/discretization/base.py +11 -7
  41. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/discretization/linearize_discretize.py +52 -14
  42. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/loader.py +29 -25
  43. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/problem.py +189 -44
  44. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/propagation/post_processing.py +6 -2
  45. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/propagation/propagation.py +21 -15
  46. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/solvers/__init__.py +54 -0
  47. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/solvers/base.py +4 -0
  48. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/solvers/ptr_solver.py +55 -33
  49. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/augmentation.py +43 -25
  50. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/builder.py +1 -7
  51. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/__init__.py +5 -0
  52. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/control.py +15 -1
  53. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/state.py +23 -1
  54. openscvx-0.4.1.dev117/openscvx/symbolic/expr/time.py +248 -0
  55. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/state.py +1 -1
  56. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/state.py +1 -1
  57. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/preprocessing.py +1 -1
  58. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/printing.py +30 -20
  59. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117/openscvx.egg-info}/PKG-INFO +1 -1
  60. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/SOURCES.txt +4 -4
  61. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/fixtures/brachistochrone.json +2 -1
  62. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/fixtures/brachistochrone.yaml +1 -0
  63. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_scaling.py +4 -1
  64. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_variable.py +354 -0
  65. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_augmentation.py +126 -5
  66. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_preprocessing.py +1 -1
  67. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_autotuning.py +92 -80
  68. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_brachistochrone.py +21 -47
  69. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_cvxpygen_optional.py +3 -3
  70. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_discretization.py +12 -26
  71. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_examples.py +2 -2
  72. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_loader.py +25 -16
  73. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_propagation.py +24 -26
  74. openscvx-0.4.1.dev91/openscvx/config.py +0 -618
  75. openscvx-0.4.1.dev91/openscvx/discretization/__init__.py +0 -25
  76. openscvx-0.4.1.dev91/openscvx/symbolic/time.py +0 -84
  77. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/assets/logo.svg +0 -0
  78. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/release-drafter.yml +0 -0
  79. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/_docs.yml +0 -0
  80. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/branch-name.yml +0 -0
  81. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/docs.yml +0 -0
  82. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/lint.yml +0 -0
  83. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/nightly.yml +0 -0
  84. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/release-drafter.yml +0 -0
  85. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/release.yml +0 -0
  86. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/tests-integration.yml +0 -0
  87. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.github/workflows/tests-unit.yml +0 -0
  88. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/.gitignore +0 -0
  89. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/CONTRIBUTING.md +0 -0
  90. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/LICENSE +0 -0
  91. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/README.md +0 -0
  92. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/constraint_reformulation.md +0 -0
  93. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/control_parameterization.md +0 -0
  94. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/scvx.md +0 -0
  95. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/Foundations/time_dilation.md +0 -0
  96. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UnderTheHood/lowering_architecture.md +0 -0
  97. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UnderTheHood/vectorization_and_vmapping.md +0 -0
  98. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/00_introduction.md +0 -0
  99. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/01_hello_world_brachistochrone.md +0 -0
  100. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/02_drone_racing_constraints.md +0 -0
  101. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/05_visualization.md +0 -0
  102. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/06_logic.md +0 -0
  103. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/UsersGuide/07_lie.md +0 -0
  104. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/favicon.png +0 -0
  105. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ct-scvx_dark.png +0 -0
  106. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ct-scvx_light.png +0 -0
  107. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ctcs_dark.png +0 -0
  108. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/ctcs_light.png +0 -0
  109. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/problem_class_dark.png +0 -0
  110. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/images/problem_class_light.png +0 -0
  111. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/assets/logo.svg +0 -0
  112. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/citation.md +0 -0
  113. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/examples.md +0 -0
  114. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/getting-started.md +0 -0
  115. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/index.md +0 -0
  116. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/docs/javascripts/mathjax.js +0 -0
  117. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/logo_utils/acl_logo.svg +0 -0
  118. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/logo_utils/svg_path_utils.py +0 -0
  119. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/drone/obstacle_avoidance.py +0 -0
  120. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/plotting.py +0 -0
  121. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/examples/plotting_viser.py +0 -0
  122. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/ctlos_cine.gif +0 -0
  123. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/ctlos_dr.gif +0 -0
  124. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/dtlos_cine.gif +0 -0
  125. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/dtlos_dr.gif +0 -0
  126. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/openscvx_logo.svg +0 -0
  127. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/openscvx_logo_square.png +0 -0
  128. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/oscvx_structure_full_dark.svg +0 -0
  129. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/figures/video_preview.png +0 -0
  130. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/__init__.py +0 -0
  131. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background.avif +0 -0
  132. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@1x.avif +0 -0
  133. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@2x.avif +0 -0
  134. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@3x.avif +0 -0
  135. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/1-background@4x.avif +0 -0
  136. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars.avif +0 -0
  137. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@1x.avif +0 -0
  138. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@2x.avif +0 -0
  139. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@3x.avif +0 -0
  140. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/2-mars@4x.avif +0 -0
  141. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon.avif +0 -0
  142. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@1x.avif +0 -0
  143. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@2x.avif +0 -0
  144. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@3x.avif +0 -0
  145. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/3-moon@4x.avif +0 -0
  146. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1.avif +0 -0
  147. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@1x.avif +0 -0
  148. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@2x.avif +0 -0
  149. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@3x.avif +0 -0
  150. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/4-sat1@4x.avif +0 -0
  151. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space.avif +0 -0
  152. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@1x.avif +0 -0
  153. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@2x.avif +0 -0
  154. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@3x.avif +0 -0
  155. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/5-space@4x.avif +0 -0
  156. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth.avif +0 -0
  157. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@1x.avif +0 -0
  158. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@2x.avif +0 -0
  159. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@3x.avif +0 -0
  160. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/images/layers/6-earth@4x.avif +0 -0
  161. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/javascripts/parallax.js +0 -0
  162. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/logo.svg +0 -0
  163. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/stylesheets/custom.css +0 -0
  164. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/assets/stylesheets/parallax.css +0 -0
  165. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/home.html +0 -0
  166. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/main.html +0 -0
  167. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/partials/parallax/hero.html +0 -0
  168. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/material/overrides/partials/parallax.html +0 -0
  169. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/mkdocs.yml +0 -0
  170. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/__main__.py +0 -0
  171. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/algorithms/optimization_results.py +0 -0
  172. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/__init__.py +0 -0
  173. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/byof.py +0 -0
  174. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/lowering.py +0 -0
  175. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/expert/validation.py +0 -0
  176. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/init/__init__.py +0 -0
  177. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/init/interpolation.py +0 -0
  178. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/integrators/__init__.py +0 -0
  179. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/integrators/runge_kutta.py +0 -0
  180. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/__init__.py +0 -0
  181. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/cvxpy_constraints.py +0 -0
  182. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/cvxpy_variables.py +0 -0
  183. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/dynamics.py +0 -0
  184. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/jax_constraints.py +0 -0
  185. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/parameters.py +0 -0
  186. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/problem.py +0 -0
  187. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/lowered/unified.py +0 -0
  188. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/__init__.py +0 -0
  189. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/plotting.py +0 -0
  190. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/scp_iteration.py +0 -0
  191. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/__init__.py +0 -0
  192. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/animated.py +0 -0
  193. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/plotly_integration.py +0 -0
  194. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/primitives.py +0 -0
  195. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/scp.py +0 -0
  196. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/plotting/viser/server.py +0 -0
  197. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/propagation/__init__.py +0 -0
  198. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/__init__.py +0 -0
  199. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/constraint_set.py +0 -0
  200. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/arithmetic.py +0 -0
  201. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/array.py +0 -0
  202. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/constraint.py +0 -0
  203. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/expr.py +0 -0
  204. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/__init__.py +0 -0
  205. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/adjoint.py +0 -0
  206. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/se3.py +0 -0
  207. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/lie/so3.py +0 -0
  208. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/linalg.py +0 -0
  209. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/logic.py +0 -0
  210. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/math.py +0 -0
  211. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/spatial.py +0 -0
  212. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/stl.py +0 -0
  213. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/variable.py +0 -0
  214. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/expr/vmap.py +0 -0
  215. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/hashing.py +0 -0
  216. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lower.py +0 -0
  217. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/__init__.py +0 -0
  218. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/__init__.py +0 -0
  219. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/_lowerer.py +0 -0
  220. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/_registry.py +0 -0
  221. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/arithmetic.py +0 -0
  222. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/array.py +0 -0
  223. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/constraint.py +0 -0
  224. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/control.py +0 -0
  225. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/expr.py +0 -0
  226. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/linalg.py +0 -0
  227. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/logic.py +0 -0
  228. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/cvxpy/math.py +0 -0
  229. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/__init__.py +0 -0
  230. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/_lowerer.py +0 -0
  231. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/_registry.py +0 -0
  232. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/arithmetic.py +0 -0
  233. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/array.py +0 -0
  234. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/constraint.py +0 -0
  235. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/control.py +0 -0
  236. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/expr.py +0 -0
  237. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/lie.py +0 -0
  238. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/linalg.py +0 -0
  239. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/logic.py +0 -0
  240. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/math.py +0 -0
  241. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/spatial.py +0 -0
  242. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/stl.py +0 -0
  243. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/lowerers/jax/vmap.py +0 -0
  244. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/__init__.py +0 -0
  245. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/_registry.py +0 -0
  246. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/array.py +0 -0
  247. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/constraint.py +0 -0
  248. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/lie.py +0 -0
  249. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/linalg.py +0 -0
  250. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/logic.py +0 -0
  251. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/math.py +0 -0
  252. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/parser.py +0 -0
  253. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/spatial.py +0 -0
  254. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/stl.py +0 -0
  255. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/parser/tokenizer.py +0 -0
  256. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/problem.py +0 -0
  257. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/sparsity.py +0 -0
  258. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/symbolic/unified.py +0 -0
  259. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/__init__.py +0 -0
  260. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/cache.py +0 -0
  261. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/caching.py +0 -0
  262. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/profiling.py +0 -0
  263. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx/utils/utils.py +0 -0
  264. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/dependency_links.txt +0 -0
  265. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/entry_points.txt +0 -0
  266. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/requires.txt +0 -0
  267. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/openscvx.egg-info/top_level.txt +0 -0
  268. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/pyproject.toml +0 -0
  269. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/scripts/gen_example_pages.py +0 -0
  270. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/scripts/gen_ref_pages.py +0 -0
  271. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/setup.cfg +0 -0
  272. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/__init__.py +0 -0
  273. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/brachistochrone_analytical.py +0 -0
  274. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/__init__.py +0 -0
  275. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/__init__.py +0 -0
  276. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_arithmetic.py +0 -0
  277. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_array.py +0 -0
  278. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_constraint.py +0 -0
  279. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_expr.py +0 -0
  280. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_lie.py +0 -0
  281. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_linalg.py +0 -0
  282. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_logic.py +0 -0
  283. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_math.py +0 -0
  284. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_node_reference.py +0 -0
  285. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_parameters.py +0 -0
  286. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_spatial.py +0 -0
  287. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/expr/test_vmap.py +0 -0
  288. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/__init__.py +0 -0
  289. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_array.py +0 -0
  290. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_constraint.py +0 -0
  291. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_lie.py +0 -0
  292. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_linalg.py +0 -0
  293. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_load.py +0 -0
  294. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_logic.py +0 -0
  295. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_math.py +0 -0
  296. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_parser.py +0 -0
  297. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_spatial.py +0 -0
  298. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_stl.py +0 -0
  299. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_tokenizer.py +0 -0
  300. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/parser/test_vmap.py +0 -0
  301. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_hashing.py +0 -0
  302. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_lower_cvxpy.py +0 -0
  303. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_lower_jax.py +0 -0
  304. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_sparsity.py +0 -0
  305. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/symbolic/test_unified.py +0 -0
  306. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_expert.py +0 -0
  307. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_init.py +0 -0
  308. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_integrators.py +0 -0
  309. {openscvx-0.4.1.dev91 → openscvx-0.4.1.dev117}/tests/test_optimization_results.py +0 -0
  310. {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.dev91
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.params.dis.dis_type == 'ZOH':
38
+ if self.dis_type == 'ZOH':
39
39
  beta = 0.
40
- elif self.params.dis.dis_type == 'FOH':
41
- beta = (tau) * self.params.scp.n
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.scp.n, params.sim.n_states), name='x') # State
21
- dx = cp.Variable((params.scp.n, params.sim.n_states), name='dx') # State Trust Region
22
- x_bar = cp.Parameter((params.scp.n, params.sim.n_states), name='x_bar') # Previous SCP State
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.scp.n, params.sim.n_controls), name='u') # Control
26
- du = cp.Variable((params.scp.n, params.sim.n_controls), name='du') # Control Trust Region
27
- u_bar = cp.Parameter((params.scp.n, params.sim.n_controls), name='u_bar') # Previous SCP Control
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.scp.n - 1, params.sim.n_states, params.sim.n_states)), name='A_d')
66
- B_d = cp.Parameter((params.scp.n - 1, params.sim.n_states, params.sim.n_controls), name='B_d')
67
- C_d = cp.Parameter((params.scp.n - 1, params.sim.n_states, params.sim.n_controls), name='C_d')
68
- z_d = cp.Parameter((params.scp.n - 1, params.sim.n_states), name='z_d') # Nonlinear Propagation Defect
69
- nu = cp.Variable((params.scp.n - 1, params.sim.n_states), name='nu') # Virtual Control Slack Variable
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.scp.n, name = 'g_' + str(idx_ncvx)))
86
- grad_g_x.append(cp.Parameter((params.scp.n, params.sim.n_states), name='grad_g_x_' + str(idx_ncvx)))
87
- grad_g_u.append(cp.Parameter((params.scp.n, params.sim.n_controls), name='grad_g_u_' + str(idx_ncvx)))
88
- nu_vb.append(cp.Variable(params.scp.n, name='nu_vb_' + str(idx_ncvx))) # Virtual Control for VB
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.scp.n, params.sim.n_states), name='x')
105
- dx = cp.Variable((params.scp.n, params.sim.n_states), name='dx') # State Trust Region
106
- x_bar = cp.Parameter((params.scp.n, params.sim.n_states), name='x_bar') # Previous SCP State
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.scp.n, params.sim.n_controls), name='u')
115
- du = cp.Variable((params.scp.n, params.sim.n_controls), name='du') # Control Trust Region
116
- u_bar = cp.Parameter((params.scp.n, params.sim.n_controls), name='u_bar') # Previous SCP Control
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.scp.n - 1, params.sim.n_states, params.sim.n_states), name='A_d')
125
- B_d = cp.Parameter((params.scp.n - 1, params.sim.n_states, params.sim.n_controls), name='B_d')
126
- C_d = cp.Parameter((params.scp.n - 1, params.sim.n_states, params.sim.n_controls), name='C_d')
127
- z_d = cp.Parameter((params.scp.n - 1, params.sim.n_states), name='z_d')
128
- nu = cp.Variable((params.scp.n - 1, params.sim.n_states), name='nu') # Virtual Control
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.scp.n, name = 'g_' + str(idx_ncvx)))
139
- grad_g_x.append(cp.Parameter((params.scp.n, params.sim.n_states), name='grad_g_x_' + str(idx_ncvx)))
140
- grad_g_u.append(cp.Parameter((params.scp.n, params.sim.n_controls), name='grad_g_u_' + str(idx_ncvx)))
141
- nu_vb.append(cp.Variable(params.scp.n, name='nu_vb_' + str(idx_ncvx))) # Virtual Control for VB
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.scp.n):
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.scp.n)
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.scp.uniform_time_grid:
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.scp.n)] # Uniform Time Step
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.scp.n)] # State Error
189
- constr += [0 == la.inv(S_u) @ (u_nonscaled[i] - u_bar[i] - du[i]) for i in range(params.scp.n)] # Control Error
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.scp.n)] # Dynamics Constraint
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.scp.n)]
199
- constr += [u_nonscaled[i] >= params.sim.min_control for i in range(params.scp.n)] # Control Constraints
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.scp.n)]
202
- constr += [x_nonscaled[i][params.sim.idx_x_true] >= params.sim.min_state[params.sim.idx_x_true] for i in range(params.scp.n)] # State Constraints (Also implemented in CTCS but included for numerical stability)
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.scp.n)) # Trust Region Cost
210
- cost += sum(params.scp.lam_vc * cp.sum(cp.abs(nu[i-1])) for i in range(1, params.scp.n)) # Virtual Control Slack
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 += params.scp.lam_vb * cp.sum(cp.pos(nu_vb[idx_ncvx]))
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 params.cvx.cvxpygen:
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 = params.cvx.solver, code_dir='solver', wrapper = True)
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 = params.cvx.solver, code_dir='solver', wrapper = True)
244
+ cpg.generate_code(prob, solver = solver.cvx_solver, code_dir='solver', wrapper = True)
241
245
  else:
242
246
  pass
243
247
  return prob
@@ -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
- ### Solver Settings
257
-
258
- The SCP algorithm has several tuning parameters that affect convergence. For this obstacle avoidance problem:
259
-
260
- ```python
261
- problem.settings.scp.lam_prox = 1e1 # Trust region weight
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 Solver Settings
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.settings.scp.lam_cost *= 1.1
388
+ problem.algorithm.lam_cost *= 1.1
393
389
 
394
390
  # Tighten trust region if solution is oscillating
395
- problem.settings.scp.lam_prox = 2.0
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
- # Tuning for this problem
331
- problem.settings.scp.lam_prox = 2e0
332
- problem.settings.scp.lam_cost = 1e-1
333
- problem.settings.scp.lam_vc = 1e2
334
- # Configure cost relaxation via autotuner
335
- problem.settings.scp.autotuner = ox.AugmentedLagrangian(
336
- lam_cost_drop=10,
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
- autotuner=ox.ConstantProximalWeight(),
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
- time_dilation_factor_min=0.02,
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.settings.scp.lam_vc = 1e2 # Adjust virtual control weight
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
- # Set solver parameters
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(initial=0.0, final=("minimize", total_time), min=0.0, max=10.0)
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
- # Set solver parameters
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.settings.scp.ep_tr = 1e-3 # Trust Region Tolerance
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
- time_dilation_factor_min=0.001,
357
- time_dilation_factor_max=3.0,
358
- autotuner=ox.RampProximalWeight(),
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,