Solution

Index

Documentation

CTDirect.SolverInfosMethod
SolverInfos(
    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)
source
CTDirect.SolverInfosMethod
SolverInfos(

) -> 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)
source
CTDirect.build_OCP_solutionMethod
build_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(...)
source
CTDirect.build_OCP_solutionMethod
build_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(...)
source
CTDirect.is_emptyMethod
is_empty(t) -> Any

Check whether a collection t is empty or not defined.

Arguments

  • t: Any object that may be nothing or support length.

Returns

  • ::Bool: true if t is nothing or has length zero, otherwise false.

Example

julia> is_empty([])
true

julia> is_empty([1, 2, 3])
false

julia> is_empty(nothing)
true
source
CTDirect.parse_DOCP_solution_dualMethod
parse_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 be nothing).
  • 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)
([...] , [...], [...])
source
CTDirect.parse_DOCP_solution_primalMethod
parse_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)
([...] , [...], [...], (...))
source