How to add a new problem
Find a description
Let us assume you want to add a planar orbital time minimisation
transfer problem from space mechanics. This problem will be described by a Description
, cf. CTBase.jl
, following the nomenclature
given in src/CTProblems.jl
. For instance:
(:orbital, :time, :x_dim_4, u_dim_2, :mayer)
Nomenclature:
:name_of_the_problem
, and other symbols for a clear description- if the objective is classical, you can mention it:
:time
,:energy
,:consumption
then
- dimensions:
:x_dim_1
,:x_dim_2
...:u_dim_1
,:u_dim_2
... - objective type:
:lagrange
,:mayer
,:bolza
- constraint arc (active on the solution):
:x_cons
,:u_cons
,:mixed_constraint
- singular arc (on the solution):
:singular_arc
- differentiability:
:non_diff_wrt_x
,:non_diff_wrt_u
Create a new file with an empty template
You have to create a new file in the directory src/problems
. For instance:
touch src/problems/orbital_planar.jl
Add it to the list of problems, in src/CTProblems.jl
:
list_of_problems_files = [
"...",
"orbital_planar.jl",
]
Then, you can write into this file the following empty template.
It is required to define a variable named EXAMPLE
containing the description.
EXAMPLE=(:orbital, :time, :x_dim_4, u_dim_2, :mayer)
@eval function OCPDef{EXAMPLE}()
# the description
title = "Planar orbital transfer"
# the model: to be completed
ocp = Model()
# the solution: to be completed
sol = OptimalControlSolution()
sol.message = "structure: ..." # Give the structure as an additional info.
# For instance, B+S for positive bang followed
# a by singular arc.
sol.infos[:resolution] = :numerical # Either :numerical or :analytical
# depending on how you get the solution
#
return OptimalControlProblem(title, ocp, sol)
end
Code the model and the solution
For now, you have to complete the model and the solution. You can take example from the already existing problems in src/problems
. See also the documentation of CTBase.jl
. Try to fulfill all the fields of OptimalControlSolution
.
Add a unit test
To complete the process, a unit test must be created. See the test
directory for examples. The unit test should be written by a different person to robustify the process.