Skip to content

Error when using euler_implicit with ExaModels #172

@wenwen0231

Description

@wenwen0231

Hi, I'm encountering an error when trying to use euler_implicit as the discretization scheme when using ExaModels.

Here's a MRE:

using OptimalControl, ExaModels, MadNLPGPU

t0 = 0
tf = 1
x0 = [-1, 0]

ocp = @def begin
    t ∈ [ t0, tf ], time
    x = (q, v) ∈ R², state
    u ∈ R, control
    x(t0) == x0
    x(tf) == [0, 0]
    ∂(q)(t) == v(t)
    ∂(v)(t) == u(t)
    0.5∫( u(t)^2 ) → min
end

which gets me the following error:

▫ This is OptimalControl version v1.1.6 running with: direct, exa, madnlp.

▫ The optimal control problem is solved with CTDirect version v0.17.4.

   ┌─ The NLP is modelled with ExaModels and solved with MadNLP suite.
   │
   ├─ Number of time steps⋅: 250
   └─ Discretisation scheme: euler_implicit

▫ Line 6: (∂(q))(t) == v(t)
ERROR: "unknown numerical scheme: euler_implicit (possible choices are :euler, :euler_b, :midpoint, :trapeze)"
Stacktrace:
 [1] macro expansion
   @ ~/.julia/packages/CTParser/tqsnb/src/onepass.jl:110 [inlined]
 [2] macro expansion
   @ ~/nmpc-case-studies/testProblem.jl:13 [inlined]
 [3] (::var"#3353#3381")(; scheme::Symbol, grid_size::Int64, backend::Nothing, init::Tuple{…}, base_type::Type)
   @ Main ~/.julia/packages/CTParser/tqsnb/src/onepass.jl:1280
 [4] build_nlp!(docp::CTDirect.DOCP{…}, x0::Vector{…}; grid_size::Int64, disc_method::Symbol, exa_backend::Nothing, kwargs::@Kwargs{…})
   @ CTDirectExtExa ~/.julia/packages/CTDirect/DgVuH/ext/CTDirectExtExa.jl:55
 [5] direct_transcription(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; grid_size::Int64, disc_method::Symbol, time_grid::Nothing, init::Nothing, lagrange_to_mayer::Bool, kwargs::@Kwargs{…})
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/solve.jl:394
 [6] solve(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; display::Bool, grid_size::Int64, disc_method::Symbol, time_grid::Nothing, init::Nothing, lagrange_to_mayer::Bool, adnlp_backend::Symbol, exa_backend::Nothing, kwargs::@Kwargs{})
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/solve.jl:225
 [7] solve(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; display::Bool, kwargs::@Kwargs{…})
   @ OptimalControl ~/.julia/packages/OptimalControl/QCamZ/src/solve.jl:135
 [8] top-level scope
   @ ~/nmpc-case-studies/testProblem.jl:18

caused by: "unknown numerical scheme: euler_implicit (possible choices are :euler, :euler_b, :midpoint, :trapeze)"
Stacktrace:
 [1] macro expansion
   @ ~/.julia/packages/CTParser/tqsnb/src/onepass.jl:850 [inlined]
 [2] macro expansion
   @ ~/nmpc-case-studies/testProblem.jl:13 [inlined]
 [3] (::var"#3353#3381")(; scheme::Symbol, grid_size::Int64, backend::Nothing, init::Tuple{…}, base_type::Type)
   @ Main ~/.julia/packages/CTParser/tqsnb/src/onepass.jl:1280
 [4] build_nlp!(docp::CTDirect.DOCP{…}, x0::Vector{…}; grid_size::Int64, disc_method::Symbol, exa_backend::Nothing, kwargs::@Kwargs{…})
   @ CTDirectExtExa ~/.julia/packages/CTDirect/DgVuH/ext/CTDirectExtExa.jl:55
 [5] direct_transcription(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; grid_size::Int64, disc_method::Symbol, time_grid::Nothing, init::Nothing, lagrange_to_mayer::Bool, kwargs::@Kwargs{…})
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/solve.jl:394
 [6] solve(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; display::Bool, grid_size::Int64, disc_method::Symbol, time_grid::Nothing, init::Nothing, lagrange_to_mayer::Bool, adnlp_backend::Symbol, exa_backend::Nothing, kwargs::@Kwargs{})
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/solve.jl:225
 [7] solve(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; display::Bool, kwargs::@Kwargs{…})
   @ OptimalControl ~/.julia/packages/OptimalControl/QCamZ/src/solve.jl:135
 [8] top-level scope
   @ ~/nmpc-case-studies/testProblem.jl:18
Some type information was truncated. Use `show(err)` to see complete types.

If I specify euler_b instead, this is what I get:

▫ This is OptimalControl version v1.1.6 running with: direct, exa, madnlp.

▫ The optimal control problem is solved with CTDirect version v0.17.4.

   ┌─ The NLP is modelled with ExaModels and solved with MadNLP suite.
   │
   ├─ Number of time steps⋅: 250
   └─ Discretisation scheme: euler_b

▫ ERROR: Unknown discretization method: euler_b
Valid options are disc_method={:trapeze, :midpoint, :euler | :euler_explicit | :euler_forward, :euler_implicit | :euler_backward, :gauss_legendre_2, :gauss_legendre_3}
Symbol
Stacktrace:
 [1] error(::String, ::Symbol, ::String, ::Type)
   @ Base ./error.jl:44
 [2] CTDirect.DOCP(ocp::CTModels.Model{…}, nlp_model_backend::CTDirect.ExaBackend; grid_size::Int64, time_grid::Nothing, disc_method::Symbol, lagrange_to_mayer::Bool)
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/docp.jl:404
 [3] DOCP
   @ ~/.julia/packages/CTDirect/DgVuH/src/docp.jl:327 [inlined]
 [4] direct_transcription(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; grid_size::Int64, disc_method::Symbol, time_grid::Nothing, init::Nothing, lagrange_to_mayer::Bool, kwargs::@Kwargs{…})
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/solve.jl:361
 [5] solve(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; display::Bool, grid_size::Int64, disc_method::Symbol, time_grid::Nothing, init::Nothing, lagrange_to_mayer::Bool, adnlp_backend::Symbol, exa_backend::Nothing, kwargs::@Kwargs{})
   @ CTDirect ~/.julia/packages/CTDirect/DgVuH/src/solve.jl:225
 [6] solve(::CTModels.Model{…}, ::Symbol, ::Vararg{…}; display::Bool, kwargs::@Kwargs{…})
   @ OptimalControl ~/.julia/packages/OptimalControl/QCamZ/src/solve.jl:135
 [7] top-level scope
   @ ~/nmpc-case-studies/testProblem.jl:19
Some type information was truncated. Use `show(err)` to see complete types.

cc: @pulsipher

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions