Skip to content

chplate/SecondOrderPOC.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SecondOrderPOC.jl

SecondOrderPOC.jl - Formulating and solving optimal control problems in Julia.

SecondOrderPOC.jl is a Julia package that allows users to easily define and efficiently solve the partial outer convexification (POC) reformulation of mixed-integer optimal control problems for switched systems governed by ordinary differential equations.


The problem addressed in this package is of the following form:

$$\begin{aligned} &\underset{w,x}{\text{min}} && \int_{t_0}^{t_f} x(t)^\top Q x(t) \mathrm{d}t + x(t_f)^\top E x(t_f) \\\ &\text{subject to} &&\dot{x}(t) = f_0(x(t)) + \sum_{i=1}^{n_{\omega}} w_i(t) f_i (x(t)),\\\ &&& c(x(t),t) \leq 0,\\\ &&& w_i(t) \in [0,1], \ i \in [n_{\omega}],\\\ &&& \sum_{i=1}^{n_{\omega}} w_i(t) = 1,\\\ &&& x(t_0) = x_0.\\\ \end{aligned}$$

The implementation uses a first-discretize-then-optimize approach. This involves a discretization of the control functions $w_i(t)$ as piecewise constant functions on $N$ control intervals. Moreover, the dynamics of the ODE are linearized and integrated via matrix exponentials. In particular, this implementation is based on the Julia package SwitchTimeOpt.jl for solving switching time optimization (STO) problems for linear and nonlinear systems.

Through MathOptInterface.jl, several NLP solvers can be interfaced to our code, for example Ipopt, KNITRO and NLopt.

Installation

To use SecondOrderPOC.jl, install it via:

]add https://github.com/chplate/SecondOrderPOC.jl
using SecondOrderPOC

About

SecondOrderPOC.jl - Formulating and solving optimal control problems in Julia.

Topics

Resources

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages