Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages