Private API
This page lists non-exported (internal) symbols of CTDirect.
From CTDirect
DOCP
CTDirect.DOCP — Type
mutable struct DOCP{D<:CTDirect.Discretization, O<:CTModels.OCP.Model}Struct representing a discretized optimal control problem (DOCP).
Fields
discretization::D: The discretization scheme.ocp::O: The original OCP model.flags::DOCPFlags: Boolean flags describing problem structure.dims::DOCPdims: Problem dimensions.time::DOCPtime: Time discretization.bounds::DOCPbounds: Variable and constraint bounds.dim_NLP_variables::Int: Number of NLP variables.dim_NLP_constraints::Int: Number of NLP constraints.
Example
julia> DOCP(ocp, nlp_model_backend)
DOCP{...}(...)DOCPFlags
CTDirect.DOCPFlags — Type
struct DOCPFlagsInternal struct holding boolean flags that characterize properties of the discretized optimal control problem (DOCP).
Fields
freet0::Bool: Whether the OCP has a free initial time.freetf::Bool: Whether the OCP has a free final time.lagrange::Bool: Whether the OCP includes a Lagrange cost.mayer::Bool: Whether the OCP includes a Mayer cost.max::Bool: Whether the OCP is a maximization problem.
Example
julia> DOCPFlags(true, false, true, true, false)
DOCPFlags(true, false, true, true, false)DOCP_constraints!
CTDirect.DOCP_constraints! — Function
DOCP_constraints!(c, xu, docp::CTDirect.DOCP) -> Any
Compute the nonlinear constraints of a DOCP.
The constraints are modeled as lb <= C(x) <= ub.
Arguments
c: Preallocated constraint vector.xu: Vector of NLP decision variables.docp::DOCP: The discretized OCP.
Returns
c: The filled constraint vector.
Example
julia> DOCP_constraints!(zeros(docp.dim_NLP_constraints), xu, docp)
[0.0, 0.1, …]DOCP_initial_guess
CTDirect.DOCP_initial_guess — Function
DOCP_initial_guess(
docp::CTDirect.DOCP,
init::CTModels.Init.InitialGuess
) -> Vector{Float64}
Build an initial guess vector for the discretized OCP.
Arguments
docp::DOCP: The discretized OCP.init::CTModels.Init: Initialization settings (default:CTModels.Init()).
Returns
NLP_X::Vector{Float64}: Initial guess vector.
Example
julia> DOCP_initial_guess(docp)
[0.1, 0.1, …]DOCP_objective
CTDirect.DOCP_objective — Function
DOCP_objective(xu, docp::CTDirect.DOCP) -> Any
Compute the objective value of a discretized OCP.
Arguments
xu: Vector of NLP decision variables.docp::DOCP: The discretized OCP.
Returns
obj::Float64: Objective function value.
Example
julia> DOCP_objective(xu, docp)
12.34DOCPbounds
CTDirect.DOCPbounds — Type
struct DOCPboundsInternal struct holding variable and constraint bounds for a DOCP.
Fields
var_l::Vector{Float64}: Lower bounds for NLP variables.var_u::Vector{Float64}: Upper bounds for NLP variables.con_l::Vector{Float64}: Lower bounds for NLP constraints.con_u::Vector{Float64}: Upper bounds for NLP constraints.
Example
julia> DOCPbounds([-1.0, -2.0], [1.0, 2.0], [0.0], [0.0])
DOCPbounds([-1.0, -2.0], [1.0, 2.0], [0.0], [0.0])DOCPdims
CTDirect.DOCPdims — Type
struct DOCPdimsInternal struct holding problem dimensions for a DOCP.
Fields
NLP_x::Int: State dimensionNLP_u::Int: Control dimension.NLP_v::Int: Variable dimension.path_cons::Int: Path constraints dimension.boundary_cons::Int: Boundary constraints dimension.
Example
julia> DOCPdims(4, 2, 1, 3, 2, 1)
DOCPdims(4, 2, 1, 3, 2, 1)DOCPtime
CTDirect.DOCPtime — Type
struct DOCPtimeInternal struct holding time grid information for a DOCP.
Fields
steps::Int: Number of time steps.normalized_grid::Vector{Float64}: Normalized time grid in[0,1].fixed_grid::Vector{Float64}: Fixed time grid in[t0, tf].
Example
julia> DOCPtime(10, collect(0:0.1:1), collect(0.0:0.1:1.0))
DOCPtime(10, [0.0, 0.1, …, 1.0], [0.0, 0.1, …, 1.0])build_OCP_solution
CTDirect.build_OCP_solution — Function
build_OCP_solution(
docp::CTDirect.DOCP,
nlp_solution::SolverCore.AbstractExecutionStats,
T,
objective,
iterations,
constraints_violation,
message,
status,
successful;
exa_getter
) -> Union{CTModels.OCP.Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, ModelType, CostateModelType, Float64, DualModelType, CTModels.OCP.SolverInfos{Any, Dict{Symbol, Any}}} where {TimeGridModelType<:Union{CTModels.OCP.MultipleTimeGridModel, CTModels.OCP.UnifiedTimeGridModel{Vector{Float64}}}, TimesModelType<:CTModels.OCP.TimesModel, StateModelType<:Union{CTModels.OCP.StateModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.StateModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, ControlModelType<:Union{CTModels.OCP.ControlModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.ControlModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, VariableModelType<:Union{CTModels.OCP.VariableModelSolution{Vector{Float64}}, CTModels.OCP.VariableModelSolution{Float64}}, ModelType<:(CTModels.OCP.Model{<:CTModels.OCP.TimeDependence, T} where T<:CTModels.OCP.TimesModel), CostateModelType<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, DualModelType<:(CTModels.OCP.DualModel{PC_Dual, Nothing, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, SC_LB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, SC_UB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, CC_LB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, CC_UB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}})}, CTModels.OCP.Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, ModelType, CostateModelType, Float64, DualModelType, CTModels.OCP.SolverInfos{Any, Dict{Symbol, Any}}} where {TimeGridModelType<:Union{CTModels.OCP.MultipleTimeGridModel, CTModels.OCP.UnifiedTimeGridModel{Vector{Float64}}}, TimesModelType<:CTModels.OCP.TimesModel, StateModelType<:Union{CTModels.OCP.StateModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.StateModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, ControlModelType<:Union{CTModels.OCP.ControlModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.ControlModelSolution{TS} where TS<:CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, VariableModelType<:Union{CTModels.OCP.VariableModelSolution{Vector{Float64}}, CTModels.OCP.VariableModelSolution{Float64}}, ModelType<:(CTModels.OCP.Model{<:CTModels.OCP.TimeDependence, T} where T<:CTModels.OCP.TimesModel), CostateModelType<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, DualModelType<:(CTModels.OCP.DualModel{PC_Dual, Vector{Float64}, SC_LB_Dual, SC_UB_Dual, CC_LB_Dual, CC_UB_Dual, Vector{Float64}, Vector{Float64}} where {PC_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, SC_LB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, SC_UB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, CC_LB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}, CC_UB_Dual<:Union{CTModels.OCP.var"#_wrap_scalar_and_deepcopy##0#_wrap_scalar_and_deepcopy##1", CTModels.OCP.var"#_wrap_scalar_and_deepcopy##2#_wrap_scalar_and_deepcopy##3"}})}}
Build an OCP functional solution from a DOCP discrete solution given as a SolverCore.AbstractExecutionStats object.
Arguments
docp: The discretized optimal control problem (DOCP).nlp_solution: A solver execution statistics object.
Returns
solution::CTModels.Solution: A functional OCP solution containing trajectories, multipliers, and solver information.
Example
julia> build_OCP_solution(docp, nlp_solution)
CTModels.Solution(...)build_bounds_block
CTDirect.build_bounds_block — Function
build_bounds_block(
dim_var,
dim_box,
box_triplet
) -> Tuple{Any, Any}
Build lower and upper bound vectors for state, control, or optimization variables.
Arguments
dim_var::Int: Variable dimension.dim_box::Int: Number of box constraints.box_triplet: Triplet defining box constraints.
Returns
(x_lb, x_ub)::Tuple{Vector{Float64},Vector{Float64}}: Lower and upper bounds.
Example
julia> build_bounds_block(3, 1, ([0.0], [2], [1.0]))
([-Inf, 0.0, -Inf], [Inf, 1.0, Inf])constraints_bounds!
CTDirect.constraints_bounds! — Function
constraints_bounds!(
docp::CTDirect.DOCP
) -> Tuple{Vector{Float64}, Vector{Float64}}
Build lower and upper bounds vectors for the nonlinear constraints of a DOCP.
Arguments
docp::DOCP: The discretized OCP.
Returns
(lb, ub)::Tuple{Vector{Float64},Vector{Float64}}: Lower and upper bounds.
Example
julia> constraints_bounds!(docp)
([-1.0, …], [1.0, …])disc_model
CTDirect.disc_model — Function
disc_model(docp::CTDirect.DOCP) -> CTDirect.Discretization
Return the discretization model associated with a given discretized optimal control problem (DOCP).
Arguments
docp::DOCP: The discretized optimal control problem.
Returns
discretization::Any: The discretization model stored indocp.
Example
julia> disc_model(docp)
DiscretizationModel(...)get_time_grid
CTDirect.get_time_grid — Function
get_time_grid(xu, docp::CTDirect.DOCP) -> Any
Return the time grid for problems with free initial or final times. Note that this function can be called during optimization, not just for postprocessing
Arguments
xu: Vector of NLP decision variables.docp::DOCP: The discretized OCP.
Returns
grid::Vector{Float64}: Time grid corresponding to current NLP variables.
Example
julia> get_time_grid(xu, docp)
[0.0, 0.1, …, 1.0]get_time_grid_exa
CTDirect.get_time_grid_exa — Function
get_time_grid_exa(
nlp_solution::SolverCore.AbstractExecutionStats,
docp::CTDirect.DOCP,
exa_getter
) -> Vector{Float64}
Retrieve the time grid from the given DOCP solution.
Arguments
nlp_solution: The DOCP solution.docp: The DOCP.
Returns
::Vector{Float64}: The time grid.
is_empty
CTDirect.is_empty — Function
is_empty(t) -> Any
Check whether a collection t is empty or not defined.
Arguments
t: Any object that may benothingor supportlength.
Returns
::Bool:trueiftisnothingor has length zero, otherwisefalse.
Example
julia> is_empty([])
true
julia> is_empty([1, 2, 3])
false
julia> is_empty(nothing)
trueocp_model
CTDirect.ocp_model — Function
ocp_model(docp::CTDirect.DOCP) -> CTModels.OCP.Model
Return the continuous-time optimal control problem (OCP) model associated with a given discretized optimal control problem (DOCP).
Arguments
docp::DOCP: The discretized optimal control problem.
Returns
ocp::Any: The underlying OCP model stored indocp.
Example
julia> ocp_model(docp)
OCPModel(...)variables_bounds!
CTDirect.variables_bounds! — Function
variables_bounds!(
docp::CTDirect.DOCP
) -> Tuple{Vector{Float64}, Vector{Float64}}
Build lower and upper bounds vectors for the variable box constraints of a DOCP.
Arguments
docp::DOCP: The discretized OCP.
Returns
(var_l, var_u)::Tuple{Vector{Float64},Vector{Float64}}: Lower and upper bounds for variables.
Example
julia> variables_bounds!(docp)
([-Inf, …], [Inf, …])