Skip to content

Commit

Permalink
renamed solveDOCP and solveDirect to solve
Browse files Browse the repository at this point in the history
  • Loading branch information
PierreMartinon committed Apr 17, 2024
1 parent 2918488 commit 9ebdabe
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 71 deletions.
6 changes: 3 additions & 3 deletions src/CTDirect.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,18 @@ include("solution.jl")
include("solve.jl")

# export functions only for user
export available_methods
export is_solvable
export solve
export OptimalControlInit
export directTranscription
export getNLP
export setDOCPInit
export solveDOCP
export solveDirect
export OCPSolutionFromDOCP
export initial_guess
export DOCP_objective
export DOCP_constraints!
export available_methods


# CTBase reexports
export @def
Expand Down
6 changes: 3 additions & 3 deletions src/solve.jl
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ $(TYPEDSIGNATURES)
Solve a discretized optimal control problem
"""
function solveDOCP(docp::DOCP;
function solve(docp::DOCP;
init=nothing,
display::Bool=__display(),
print_level::Integer=__print_level_ipopt(),
Expand All @@ -76,7 +76,7 @@ function solveDOCP(docp::DOCP;
end


function solveDirect(ocp::OptimalControlModel,
function solve(ocp::OptimalControlModel,
description...;
init::OptimalControlInit=OptimalControlInit(),
grid_size::Integer=__grid_size_direct(),
Expand All @@ -88,7 +88,7 @@ function solveDirect(ocp::OptimalControlModel,
# build discretized OCP
docp = directTranscription(ocp, description, init=init, grid_size=grid_size)
# solve DOCP and retrieve OCP solution
ocp_solution = solveDOCP(docp; display=display, print_level=print_level, mu_strategy=mu_strategy, kwargs...)
ocp_solution = solve(docp; display=display, print_level=print_level, mu_strategy=mu_strategy, kwargs...)

return ocp_solution
end
4 changes: 2 additions & 2 deletions test/suite/abstract_ocp.jl
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ println("Test: abstract OCP definition")
end

@testset verbose = true showtiming = true ":double_integrator :min_tf :abstract" begin
sol1 = solveDirect(ocp1, grid_size=100, print_level=0, tol=1e-12)
sol1 = solve(ocp1, grid_size=100, print_level=0, tol=1e-12)
@test sol1.objective 2.0 rtol=1e-2
end

Expand All @@ -43,6 +43,6 @@ end
end

@testset verbose = true showtiming = true ":double_integrator :min_tf :abstract :constr" begin
sol2 = solveDirect(ocp2, grid_size=100, print_level=0, tol=1e-12)
sol2 = solve(ocp2, grid_size=100, print_level=0, tol=1e-12)
@test sol2.objective 5.46 rtol=1e-2
end
2 changes: 1 addition & 1 deletion test/suite/all_constraints_types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,6 @@ end
dynamics!(ocp, (x, u, v) -> FF0(x) + u*FF1(x) )

@testset verbose = true showtiming = true ":goddard :max_rf :all_constraints" begin
sol1 = solveDirect(ocp, grid_size=100, print_level=0, tol=1e-8)
sol1 = solve(ocp, grid_size=100, print_level=0, tol=1e-8)
@test sol1.objective 1.0125 rtol=1e-2
end
10 changes: 5 additions & 5 deletions test/suite/double_integrator.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ dynamics!(ocp1, (x, u, v) -> [x[2], u])
objective!(ocp1, :mayer, (x0, xf, v) -> v)

@testset verbose = true showtiming = true ":double_integrator :min_tf" begin
sol1 = solveDirect(ocp1, grid_size=100, print_level=0, tol=1e-12)
sol1 = solve(ocp1, grid_size=100, print_level=0, tol=1e-12)
@test sol1.objective 2.0 rtol=1e-2
end

Expand All @@ -35,7 +35,7 @@ dynamics!(ocp2, (x, u, v) -> [x[2], u])
objective!(ocp2, :lagrange, (x, u, v) -> 1)

@testset verbose = true showtiming = true ":double_integrator :min_tf :lagrange" begin
sol2 = solveDirect(ocp2, grid_size=100, print_level=0, tol=1e-12)
sol2 = solve(ocp2, grid_size=100, print_level=0, tol=1e-12)
@test sol2.objective 2.0 rtol=1e-2
end

Expand All @@ -54,7 +54,7 @@ dynamics!(ocp3, (x, u, v) -> [x[2], u[1]])
objective!(ocp3, :mayer, (x0, xf, v) -> v[1])

@testset verbose = true showtiming = true ":double_integrator :min_tf :vectorial" begin
sol3 = solveDirect(ocp3, grid_size=100, print_level=0, tol=1e-12)
sol3 = solve(ocp3, grid_size=100, print_level=0, tol=1e-12)
@test sol3.objective 2.0 rtol=1e-2
end

Expand All @@ -73,7 +73,7 @@ dynamics!(ocp4, (x, u, v) -> [x[2], u])
objective!(ocp4, :mayer, (x0, xf, v) -> v[1], :max)

@testset verbose = true showtiming = true ":double_integrator :max_t0" begin
sol4 = solveDirect(ocp4, grid_size=100, print_level=0, tol=1e-12)
sol4 = solve(ocp4, grid_size=100, print_level=0, tol=1e-12)
@test sol4.objective 8.0 rtol=1e-2
end

Expand All @@ -89,6 +89,6 @@ dynamics!(ocp5, (x, u) -> [x[2], -u[1] + u[2]])
objective!(ocp5, :lagrange, (x, u) -> u[1]*u[1] + u[2]*u[2])

@testset verbose = true showtiming = true ":double_integrator :min_energy" begin
sol5 = solveDirect(ocp5, grid_size=50, print_level=0, tol=1e-12)
sol5 = solve(ocp5, grid_size=50, print_level=0, tol=1e-12)
@test sol5.objective 9.6e-2 rtol=1e-2
end
48 changes: 24 additions & 24 deletions test/suite/initial_guess.jl
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ function F1(x)
return [ 0, Tmax/m, -b*Tmax ]
end
dynamics!(ocp, (x, u, v) -> F0(x) + u*F1(x) )
sol0 = solveDirect(ocp, print_level=0)
sol0 = solve(ocp, print_level=0)

# default init
@testset verbose = true showtiming = true ":default_init" begin
sol = solveDirect(ocp, print_level=0)
sol = solve(ocp, print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end

Expand All @@ -61,31 +61,31 @@ u_const = 0.5
v_init = 0.15

@testset verbose = true showtiming = true ":constant_init_x" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_const))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_const))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":constant_init_u" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(u_init=u_const))
sol = solve(ocp, print_level=0, init=OptimalControlInit(u_init=u_const))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":constant_init_v" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(v_init=v_init))
sol = solve(ocp, print_level=0, init=OptimalControlInit(v_init=v_init))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":constant_init_xu" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_const, u_init=u_const))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_const, u_init=u_const))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":constant_init_xv" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_const, v_init=v_init))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_const, v_init=v_init))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":constant_init_uv" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(u_init=u_const, v_init=v_init))
sol = solve(ocp, print_level=0, init=OptimalControlInit(u_init=u_const, v_init=v_init))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":constant_init_xuv" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_const, u_init=u_const, v_init=v_init))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_const, u_init=u_const, v_init=v_init))
@test sol.objective 1.0125 rtol=1e-2
end

Expand All @@ -94,57 +94,57 @@ x_func = t->[1+t^2, sqrt(t), 1-t]
u_func = t->(cos(t)+1)*0.5

@testset verbose = true showtiming = true ":functional_init_x" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_func))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_func))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":functional_init_u" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(u_init=u_func))
sol = solve(ocp, print_level=0, init=OptimalControlInit(u_init=u_func))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":functional_init_xu" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_func, u_init=u_func))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_func, u_init=u_func))
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":mixed_init" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(x_init=x_func, u_init=u_const))
sol = solve(ocp, print_level=0, init=OptimalControlInit(x_init=x_func, u_init=u_const))
@test sol.objective 1.0125 rtol=1e-2
end

# warm start
@testset verbose = true showtiming = true ":warm_start" begin
sol = solveDirect(ocp, print_level=0, init=OptimalControlInit(sol0))
sol = solve(ocp, print_level=0, init=OptimalControlInit(sol0))
@test sol.objective 1.0125 rtol=1e-2
end

# set initial guess in DOCP
docp = directTranscription(ocp)
@testset verbose = true showtiming = true ":DOCPInit_constant" begin
setDOCPInit(docp, OptimalControlInit(x_init=x_const, u_init=u_const, v_init=v_init))
sol = solveDOCP(docp, print_level=0)
sol = solve(docp, print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":DOCPInit_mixed" begin
setDOCPInit(docp, OptimalControlInit(x_init=x_func, u_init=u_const))
sol = solveDOCP(docp, print_level=0)
sol = solve(docp, print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":DOCPInit_warm_start" begin
setDOCPInit(docp, OptimalControlInit(sol0))
sol = solveDOCP(docp, print_level=0)
sol = solve(docp, print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end

# pass initial guess to solveDOCP
# pass initial guess to solve
setDOCPInit(docp, OptimalControlInit()) # reset init in docp
@testset verbose = true showtiming = true ":solveDOCP_constant_init" begin
sol = solveDOCP(docp, init=OptimalControlInit(x_init=x_const, u_init=u_const, v_init=v_init), print_level=0)
@testset verbose = true showtiming = true ":solve_constant_init" begin
sol = solve(docp, init=OptimalControlInit(x_init=x_const, u_init=u_const, v_init=v_init), print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":solveDOCP_mixed_init" begin
sol = solveDOCP(docp, init=OptimalControlInit(x_init=x_func, u_init=u_const), print_level=0)
@testset verbose = true showtiming = true ":solve_mixed_init" begin
sol = solve(docp, init=OptimalControlInit(x_init=x_func, u_init=u_const), print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end
@testset verbose = true showtiming = true ":solveDOCP_warm_start" begin
sol = solveDOCP(docp, init=OptimalControlInit(sol0), print_level=0)
@testset verbose = true showtiming = true ":solve_warm_start" begin
sol = solve(docp, init=OptimalControlInit(sol0), print_level=0)
@test sol.objective 1.0125 rtol=1e-2
end
8 changes: 4 additions & 4 deletions test/suite/simple_integrator.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,21 @@ objective!(ocp1, :lagrange, (x, u) -> u^2)

# with default initial guess (ie 0.1)
@testset verbose = true showtiming = true ":simple_integrator :min_tf" begin
sol1 = solveDirect(ocp1, grid_size=100, print_level=0, tol=1e-12)
sol1 = solve(ocp1, grid_size=100, print_level=0, tol=1e-12)
@test sol1.objective 0.313 rtol=1e-2
end

# with initial guess (using both vector and scalar syntax, no optimization variables)
@testset verbose = true showtiming = true ":simple_integrator :min_tf :init_constant" begin
init_constant = OptimalControlInit(x_init=[-0.5], u_init=0)
sol2 = solveDirect(ocp1, grid_size=100, print_level=0, tol=1e-12, init=init_constant)
sol2 = solve(ocp1, grid_size=100, print_level=0, tol=1e-12, init=init_constant)
@test sol2.objective 0.313 rtol=1e-2
end

# with initial guess from solution
sol = solveDirect(ocp1, grid_size=100, print_level=0, tol=1e-12)
sol = solve(ocp1, grid_size=100, print_level=0, tol=1e-12)
@testset verbose = true showtiming = true ":simple_integrator :min_tf :init_sol" begin
init_sol = OptimalControlInit(sol)
sol3 = solveDirect(ocp1, grid_size=100, print_level=0, tol=1e-12, init=init_sol)
sol3 = solve(ocp1, grid_size=100, print_level=0, tol=1e-12, init=init_sol)
@test sol3.objective 0.313 rtol=1e-2
end
4 changes: 2 additions & 2 deletions test/test_basic.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ objective!(ocp, :lagrange, (x, u) -> u^2)

# all-in-one solve call
println("Test simple integrator: all in one solve call")
sol = solveDirect(ocp, grid_size=100, print_level=5, tol=1e-12)
sol = solve(ocp, grid_size=100, print_level=5, tol=1e-12)
println("Expected Objective 0.313, found ", sol.objective)

# split calls
Expand All @@ -21,5 +21,5 @@ println("Direct transcription")
docp = directTranscription(ocp, grid_size=100)
nlp = getNLP(docp)
println("Solve discretized problem and retrieve solution")
sol = solveDOCP(docp, print_level=5, tol=1e-12)
sol = solve(docp, print_level=5, tol=1e-12)
println("Expected Objective 0.313, found ", sol.objective)
Loading

0 comments on commit 9ebdabe

Please sign in to comment.