Title: Add collocation method for optimal control problems by murrayrm · Pull Request #799 · python-control/python-control · GitHub
Open Graph Title: Add collocation method for optimal control problems by murrayrm · Pull Request #799 · python-control/python-control
X Title: Add collocation method for optimal control problems by murrayrm · Pull Request #799 · python-control/python-control
Description: This PR changes the default way that optimal control problems are solved from using a shooting method to using collocation. This results in more robust (and faster) solutions, especially for trajectory generation for unstable or marginally stable systems (where shooting is very sensitive to small parameter variations). The following new functionality is included: The solve_ocp() function and OptimalControlProblem class have new parameters trajectory_method that be set to either shooting (default for discrete time systems) or collocation (default for continuous time systems). When collocation is used, the initial_guess parameter can either be an input trajectory (as before) or a tuple consisting of a state trajectory and an input trajectory. Constraints can now be specified in the form LinearConstraint(A, lb, ub) or NonlinearConstraint(fun, lb, ub) instead of the previous forms (LinearConstraint, A, lb, ub) and (NonlinearConstraint, fun, lb, ub). The legacy format is still supported. The documentation (docstrings and manual) have been updated to reflect the new functionality. New unit tests are included that tease out the functionality of the various possibilities. Benchmarks comparing shooting and collocation have been added. This PR also addresses issue #782 (see also discussion in #781) which were showing some of the weakness of the shooting methodology.
Open Graph Description: This PR changes the default way that optimal control problems are solved from using a shooting method to using collocation. This results in more robust (and faster) solutions, especially for traje...
X Description: This PR changes the default way that optimal control problems are solved from using a shooting method to using collocation. This results in more robust (and faster) solutions, especially for traje...
Opengraph URL: https://github.com/python-control/python-control/pull/799
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/checks(.:format) |
| route-controller | pull_requests |
| route-action | checks |
| fetch-nonce | v2:eaf8901a-95f2-270d-b2d6-e3e0b2e93c5d |
| current-catalog-service-hash | 87dc3bc62d9b466312751bfd5f889726f4f1337bdff4e8be7da7c93d6c00a25a |
| request-id | E1D8:12B559:12CA7D1:1AECBB1:697A38D1 |
| html-safe-nonce | 3d672e338e1f58584096fb92ef0fe8ff60d8c7edba0d8f9957ec4233ced9c505 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFMUQ4OjEyQjU1OToxMkNBN0QxOjFBRUNCQjE6Njk3QTM4RDEiLCJ2aXNpdG9yX2lkIjoiNjA5Njg2ODA0MTY1ODM0OTc3NyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | dffdadf39c1951941ff5a4d7519ebc47f39632505e9b26e446e8e9f138552299 |
| hovercard-subject-tag | pull_request:1136351826 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,checks,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/python-control/python-control/pull/799/checks |
| twitter:image | https://avatars.githubusercontent.com/u/293362?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/293362?s=400&v=4 |
| og:image:alt | This PR changes the default way that optimal control problems are solved from using a shooting method to using collocation. This results in more robust (and faster) solutions, especially for traje... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | af6de804ceb83ad30bb9b348cdeaccaa30cdcb566762d5e74e21e2bad88885d0 |
| turbo-cache-control | no-preview |
| go-import | github.com/python-control/python-control git https://github.com/python-control/python-control.git |
| octolytics-dimension-user_id | 2285872 |
| octolytics-dimension-user_login | python-control |
| octolytics-dimension-repository_id | 22791752 |
| octolytics-dimension-repository_nwo | python-control/python-control |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 22791752 |
| octolytics-dimension-repository_network_root_nwo | python-control/python-control |
| turbo-body-classes | logged-out env-production page-responsive full-width full-width-p-0 |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 2d980605f0959039ddebcbcf522b072508302977 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width