Solution
Index
CTDirect.SolverInfosCTDirect.SolverInfosCTDirect.build_OCP_solutionCTDirect.build_OCP_solutionCTDirect.is_emptyCTDirect.parse_DOCP_solution_dualCTDirect.parse_DOCP_solution_primal
Documentation
CTDirect.SolverInfos — MethodSolverInfos(
nlp_solution::SolverCore.AbstractExecutionStats,
_::NLPModels.AbstractNLPModel
) -> Tuple{Any, Int64, Any, String, Symbol, Bool}
Retrieve convergence information from an NLP solution.
Arguments
nlp_solution: A solver execution statistics object.
Returns
(objective, iterations, constraints_violation, message, status, successful): A tuple containing the final objective value, iteration count, primal feasibility, solver message, solver status, and success flag.
Example
julia> SolverInfos(nlp_solution)
(1.23, 15, 1.0e-6, "Ipopt/generic", :first_order, true)CTDirect.SolverInfos — MethodSolverInfos(
) -> Tuple{Float64, Int64, Float64, String, Symbol, Bool}
Return default convergence information for an NLP solution.
Returns
(objective, iterations, constraints_violation, message, status, successful): Default values representing an undefined solver state.
Example
julia> SolverInfos()
(0.0, 0, 0.0, "undefined", :undefined, true)CTDirect.build_OCP_solution — Methodbuild_OCP_solution(
docp;
primal,
dual,
multipliers_L,
multipliers_U,
nlp_model_backend,
nlp_solution
)
Build an OCP functional solution from a DOCP discrete solution, given explicit primal variables, and optionally dual variables and bound multipliers.
Arguments
docp: The discretized optimal control problem (DOCP).primal: Array of primal decision variables.dual: Array of dual variables (default:nothing).multipliers_L: Lower bound multipliers (default:nothing).multipliers_U: Upper bound multipliers (default:nothing).nlp_model_backend: The NLP model backend (default:ADNLPBackend()).nlp_solution: A solver execution statistics object.
Returns
solution::CTModels.Solution: A functional OCP solution with trajectories, multipliers, and solver information.
Example
julia> build_OCP_solution(docp; primal=primal_vars, nlp_solution=nlp_solution)
CTModels.Solution(...)CTDirect.build_OCP_solution — Methodbuild_OCP_solution(
docp::CTDirect.DOCP,
nlp_solution::SolverCore.AbstractExecutionStats
) -> CTModels.Solution{TimeGridModelType, TimesModelType, StateModelType, ControlModelType, VariableModelType, CostateModelType, Float64, DualModelType, CTModels.SolverInfos{Dict{Symbol, Any}}, ModelType} where {TimeGridModelType<:CTModels.TimeGridModel, TimesModelType<:CTModels.TimesModel, StateModelType<:Union{CTModels.StateModelSolution{TS} where TS<:CTModels.var"#84#85", CTModels.StateModelSolution{TS} where TS<:CTModels.var"#86#87"}, ControlModelType<:Union{CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#88#89", CTModels.ControlModelSolution{TS} where TS<:CTModels.var"#90#91"}, VariableModelType<:Union{CTModels.VariableModelSolution{Vector{Float64}}, CTModels.VariableModelSolution{Float64}}, CostateModelType<:Union{CTModels.var"#92#93", CTModels.var"#94#95"}, DualModelType<:(CTModels.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.var"#100#101"{CTModels.var"#96#97"}, CTModels.var"#98#99"{CTModels.var"#96#97"}}, SC_LB_Dual<:Union{CTModels.var"#104#105"{CTModels.var"#102#103"}, CTModels.var"#106#107"{CTModels.var"#102#103"}}, SC_UB_Dual<:Union{CTModels.var"#110#111"{CTModels.var"#108#109"}, CTModels.var"#112#113"{CTModels.var"#108#109"}}, CC_LB_Dual<:Union{CTModels.var"#116#117"{CTModels.var"#114#115"}, CTModels.var"#118#119"{CTModels.var"#114#115"}}, CC_UB_Dual<:Union{CTModels.var"#122#123"{CTModels.var"#120#121"}, CTModels.var"#124#125"{CTModels.var"#120#121"}}}), ModelType<:(CTModels.Model{<:CTModels.TimeDependence, T} where T<:CTModels.TimesModel)}
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(...)CTDirect.is_empty — Methodis_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)
trueCTDirect.parse_DOCP_solution_dual — Methodparse_DOCP_solution_dual(
docp,
multipliers;
nlp_model_backend,
nlp_solution
)
Recover OCP costates and constraint multipliers from DOCP dual variables.
Arguments
docp: The discretized optimal control problem (DOCP).multipliers: Array of dual variables (may benothing).nlp_model_backend: The NLP model backend (default:ADNLPBackend()).nlp_solution: A solver execution statistics object.
Returns
(P, path_constraints_dual, boundary_constraints_dual):P: Costate trajectory.path_constraints_dual: Path constraint multipliers.boundary_constraints_dual: Boundary constraint multipliers.
Example
julia> P, path_dual, bound_dual = parse_DOCP_solution_dual(docp, duals; nlp_model_backend=nlp_model_backend, nlp_solution=nlp_solution)
([...] , [...], [...])CTDirect.parse_DOCP_solution_primal — Methodparse_DOCP_solution_primal(
docp,
solution;
multipliers_L,
multipliers_U,
nlp_model_backend,
nlp_solution
)
Recover OCP state, control, and optimization variables from DOCP primal variables. Bound multipliers are also parsed if available.
Arguments
docp: The discretized optimal control problem (DOCP).solution: Array of primal decision variables.multipliers_L: Lower bound multipliers.multipliers_U: Upper bound multipliers.nlp_model_backend: The NLP model backend.nlp_solution: A solver execution statistics object.
Returns
(X, U, v, box_multipliers):X: State trajectory.U: Control trajectory.v: Optimization variables.box_multipliers: Tuple of bound multipliers for states, controls, and variables.
Example
julia> X, U, v, box_mults = parse_DOCP_solution_primal(docp, primal;
multipliers_L=mL, multipliers_U=mU, nlp_model_backend=nlp_model_backend, nlp_solution=nlp_solution)
([...] , [...], [...], (...))