diff --git a/docs/make.jl b/docs/make.jl index 5ca95a33..f91ff7ce 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -120,7 +120,7 @@ cp( repo_url = "github.com/control-toolbox/OptimalControl.jl" -# if draft is true, then the julia code from .md is not executed # debug +# if draft is true, then the julia code from .md is not executed # to disable the draft mode in a specific markdown file, use the following: #= ```@meta @@ -128,7 +128,7 @@ Draft = false ``` =# makedocs(; - draft=false, + draft=false, # debug sitename="OptimalControl.jl", format=Documenter.HTML(; repolink="https://" * repo_url, @@ -174,9 +174,10 @@ makedocs(; "OptimalControl.jl" => "api-optimalcontrol-dev.md", ], ], - "JuliaCon Paris 2025" => "juliacon-paris-2025.md", + "RDNOPA 2025" => "rdnopa-2025.md", ], plugins=[links], ) deploydocs(; repo=repo_url * ".git", devbranch="main", push_preview=true) +# push_preview: use https://control-toolbox.org/OptimalControl.jl/previews/PRXXX where XXX is the pull request number diff --git a/docs/src/assets/Manifest.toml b/docs/src/assets/Manifest.toml index 023e60bd..78e84667 100644 --- a/docs/src/assets/Manifest.toml +++ b/docs/src/assets/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.11.7" +julia_version = "1.12.1" manifest_format = "2.0" -project_hash = "9b6e0817ee9912a4be0b8035c284f9703f84de08" +project_hash = "ed383b814e8d550b2e19c67b5eb177cab6b8ccff" [[deps.ADNLPModels]] deps = ["ADTypes", "ForwardDiff", "LinearAlgebra", "NLPModels", "Requires", "ReverseDiff", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings"] @@ -90,15 +90,15 @@ version = "1.1.2" [[deps.ArrayInterface]] deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "dbd8c3bbbdbb5c2778f85f4422c39960eac65a42" +git-tree-sha1 = "d81ae5489e13bc03567d4fbbb06c546a5e53c857" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.20.0" +version = "7.22.0" [deps.ArrayInterface.extensions] ArrayInterfaceBandedMatricesExt = "BandedMatrices" ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" ArrayInterfaceChainRulesExt = "ChainRules" ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" @@ -124,9 +124,9 @@ version = "7.20.0" [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] -git-tree-sha1 = "120e392af69350960b1d3b89d41dcc1d66543858" +git-tree-sha1 = "355ab2d61069927d4247cd69ad0e1f140b31e30d" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.11.2" +version = "1.12.0" weakdeps = ["SparseArrays"] [deps.ArrayLayouts.extensions] @@ -159,9 +159,9 @@ version = "0.1.6" [[deps.BracketingNonlinearSolve]] deps = ["CommonSolve", "ConcreteStructs", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "90740f16aef91d898424bc11c1cabada475435e0" +git-tree-sha1 = "57f9f59bec88ce80cd3e46efc39f126395789bb0" uuid = "70df07ce-3d50-431d-a3e7-ca6ddb60ac1e" -version = "1.4.0" +version = "1.5.0" weakdeps = ["ChainRulesCore", "ForwardDiff"] [deps.BracketingNonlinearSolve.extensions] @@ -206,9 +206,9 @@ weakdeps = ["ADNLPModels", "ExaModels", "MadNLP", "NLPModelsIpopt", "NLPModelsKn [[deps.CTFlows]] deps = ["CTBase", "CTModels", "DocStringExtensions", "ForwardDiff", "LinearAlgebra", "MLStyle", "MacroTools"] -git-tree-sha1 = "4bb18901f7ed3779b010e67c6562239e9f2990e8" +git-tree-sha1 = "fc6d7425e7e54a6cb023b24e05a7c0430c9165bf" uuid = "1c39547c-7794-42f7-af83-d98194f657c2" -version = "0.8.8" +version = "0.8.9" weakdeps = ["OrdinaryDiffEq"] [deps.CTFlows.extensions] @@ -216,9 +216,9 @@ weakdeps = ["OrdinaryDiffEq"] [[deps.CTModels]] deps = ["CTBase", "DocStringExtensions", "Interpolations", "LinearAlgebra", "MLStyle", "MacroTools", "OrderedCollections", "Parameters", "RecipesBase"] -git-tree-sha1 = "f5e80274149d9910656b0c94c378cdead3f689ad" +git-tree-sha1 = "072e5e867715b060729158d4c5fb3b16ff7e82b0" uuid = "34c4fa32-2049-4079-8329-de33c2a22e2d" -version = "0.6.8" +version = "0.6.9" weakdeps = ["JLD2", "JSON3", "Plots"] [deps.CTModels.extensions] @@ -228,9 +228,9 @@ weakdeps = ["JLD2", "JSON3", "Plots"] [[deps.CTParser]] deps = ["CTBase", "DocStringExtensions", "MLStyle", "OrderedCollections", "Parameters", "Unicode"] -git-tree-sha1 = "7e95684a3b47015e3d2feac81292a89d60a9dae6" +git-tree-sha1 = "48ec8193487a79277ff278752337c4ffb8fff691" uuid = "32681960-a1b1-40db-9bff-a1ca817385d1" -version = "0.7.0" +version = "0.7.1" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] @@ -327,9 +327,9 @@ version = "1.0.0" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "0037835448781bb46feb39866934e243886d756a" +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.18.0" +version = "4.18.1" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -338,7 +338,7 @@ weakdeps = ["Dates", "LinearAlgebra"] [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" +version = "1.3.0+1" [[deps.CompositionsBase]] git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" @@ -398,9 +398,9 @@ version = "1.16.0" [[deps.DataFrames]] deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "c967271c27a95160e30432e011b58f42cd7501b5" +git-tree-sha1 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.8.0" +version = "1.8.1" [[deps.DataStructures]] deps = ["OrderedCollections"] @@ -483,9 +483,9 @@ version = "1.15.1" [[deps.DifferentiationInterface]] deps = ["ADTypes", "LinearAlgebra"] -git-tree-sha1 = "16946a4d305607c3a4af54ff35d56f0e9444ed0e" +git-tree-sha1 = "529bebbc74b36a4cfea09dd2aecb1288cd713a6d" uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" -version = "0.7.7" +version = "0.7.9" [deps.DifferentiationInterface.extensions] DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" @@ -549,9 +549,9 @@ version = "0.9.5" [[deps.Documenter]] deps = ["ANSIColoredPrinters", "AbstractTrees", "Base64", "CodecZlib", "Dates", "DocStringExtensions", "Downloads", "Git", "IOCapture", "InteractiveUtils", "JSON", "Logging", "Markdown", "MarkdownAST", "Pkg", "PrecompileTools", "REPL", "RegistryInstances", "SHA", "TOML", "Test", "Unicode"] -git-tree-sha1 = "47ffb8f27ffc01e2e57e7ae5365ae5ceef87b03d" +git-tree-sha1 = "352b9a04e74edd16429aec79f033620cf8e780d4" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "1.14.1" +version = "1.15.0" [[deps.DocumenterInterLinks]] deps = ["CodecZlib", "DocInventories", "Documenter", "Markdown", "MarkdownAST", "TOML"] @@ -576,9 +576,9 @@ uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.5" [[deps.EnzymeCore]] -git-tree-sha1 = "787f5e2efb33af12cc3fde313c1b0195a3f08eba" +git-tree-sha1 = "f91e7cb4c17dae77c490b75328f22a226708557c" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" -version = "0.8.13" +version = "0.8.15" weakdeps = ["Adapt"] [deps.EnzymeCore.extensions] @@ -629,9 +629,9 @@ version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "7bb1361afdb33c7f2b085aa49ea8fe1b0fb14e58" +git-tree-sha1 = "27af30de8b5445644e8ffe3bcb0d72049c089cf1" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.7.1+0" +version = "2.7.3+0" [[deps.ExponentialUtilities]] deps = ["Adapt", "ArrayInterface", "GPUArraysCore", "GenericSchur", "LinearAlgebra", "PrecompileTools", "Printf", "SparseArrays", "libblastrampoline_jll"] @@ -655,15 +655,15 @@ version = "0.10.14" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] -git-tree-sha1 = "83dc665d0312b41367b7263e8a4d172eac1897f4" +git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.4" +version = "0.4.5" [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "3a948313e7a41eb1db7a1e733e6335f17b4ab3c4" +git-tree-sha1 = "ccc81ba5e42497f4e76553a5545665eed577a663" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "7.1.1+0" +version = "8.0.0+0" [[deps.FastBroadcast]] deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"] @@ -678,14 +678,14 @@ version = "0.3.2" [[deps.FastGaussQuadrature]] deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "fd923962364b645f3719855c88f7074413a6ad92" +git-tree-sha1 = "0044e9f5e49a57e88205e8f30ab73928b05fe5b6" uuid = "442a2c76-b920-505d-bb47-c5924d526838" -version = "1.0.2" +version = "1.1.0" [[deps.FastPower]] -git-tree-sha1 = "5f7afd4b1a3969dc34d692da2ed856047325b06e" +git-tree-sha1 = "e47c70bf430175e077d1955d7f04923504acc74c" uuid = "a4df4552-cc26-4903-aec0-212e50a0e84b" -version = "1.1.3" +version = "1.2.0" [deps.FastPower.extensions] FastPowerEnzymeExt = "Enzyme" @@ -707,9 +707,9 @@ version = "1.1.3" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "b66970a70db13f45b7e57fbda1736e1cf72174ea" +git-tree-sha1 = "d60eb76f37d7e5a40cc2e7c36974d864b82dc802" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.17.0" +version = "1.17.1" weakdeps = ["HTTP"] [deps.FileIO.extensions] @@ -737,9 +737,9 @@ version = "1.14.0" [[deps.FiniteDiff]] deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] -git-tree-sha1 = "31fd32af86234b6b71add76229d53129aa1b87a9" +git-tree-sha1 = "9340ca07ca27093ff68418b7558ca37b05f8aeb1" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.28.1" +version = "2.29.0" [deps.FiniteDiff.extensions] FiniteDiffBandedMatricesExt = "BandedMatrices" @@ -772,9 +772,9 @@ version = "1.3.7" [[deps.ForwardDiff]] deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] -git-tree-sha1 = "dc41303865a16274ecb8450c220021ce1e0cf05f" +git-tree-sha1 = "ba6ce081425d0afb2bedd00d9884464f764a9225" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "1.2.1" +version = "1.2.2" weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] @@ -834,9 +834,9 @@ version = "0.73.17+0" [[deps.GenericSchur]] deps = ["LinearAlgebra", "Printf"] -git-tree-sha1 = "f88e0ba1f6b42121a7c1dfe93a9687d8e164c91b" +git-tree-sha1 = "a694e2a57394e409f7a11ee0977362a9fafcb8c7" uuid = "c145ed77-6b09-5dd9-b285-bf645a82121e" -version = "0.5.5" +version = "0.5.6" [[deps.GettextRuntime_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] @@ -864,9 +864,9 @@ version = "3.7.0+0" [[deps.Git_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Libiconv_jll", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "e2aef26f7d273f1e5b1daba56837c47b49b4388f" +git-tree-sha1 = "96fbb1a5c700942301cf65d8546690dd3b2a6a79" uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" -version = "2.51.1+0" +version = "2.51.2+0" [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] @@ -899,9 +899,9 @@ version = "4.0.4+0" [[deps.HTTP]] deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "ed5e9c58612c4e081aecdb6e1a479e18462e041e" +git-tree-sha1 = "5e6fe50ae7f23d171f44e311c2960294aaa0beb5" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.17" +version = "1.10.19" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] @@ -986,9 +986,9 @@ version = "1.3.1" [[deps.Ipopt]] deps = ["Ipopt_jll", "LinearAlgebra", "OpenBLAS32_jll", "PrecompileTools"] -git-tree-sha1 = "ef90a75a3ee8c2b170f6c177d4d003348dd30f67" +git-tree-sha1 = "84be69cbb8229dd4ac8776f37d4cfd0a16a44482" uuid = "b6b21f68-93f8-5de0-b562-5493be1d77c9" -version = "1.11.0" +version = "1.12.1" [deps.Ipopt.extensions] IpoptMathOptInterfaceExt = "MathOptInterface" @@ -1003,9 +1003,9 @@ uuid = "9cc047cb-c261-5740-88fc-0cf96f7bdcc7" version = "300.1400.1900+0" [[deps.IrrationalConstants]] -git-tree-sha1 = "e2222959fbc6c19554dc15174c81bf7bf3aa691c" +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.4" +version = "0.2.6" [[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" @@ -1064,11 +1064,16 @@ git-tree-sha1 = "4255f0032eafd6451d707a51d5f0248b8a165e4d" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "3.1.3+0" +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + [[deps.KNITRO]] deps = ["KNITRO_jll", "Libdl"] -git-tree-sha1 = "c909d83df7210d35fc9e18085752ab227eb1f130" +git-tree-sha1 = "37e774dc3e94ef238991addb4a6308b0f685d69c" uuid = "67920dd8-b58e-52a8-8622-53c4cffbe346" -version = "0.14.9" +version = "0.14.10" [deps.KNITRO.extensions] KNITROMathOptInterfaceExt = ["MathOptInterface"] @@ -1154,9 +1159,9 @@ version = "1.3.0" [[deps.LazyArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "SparseArrays"] -git-tree-sha1 = "21057b6f4f5db1475e653735fda7d1de1c267b46" +git-tree-sha1 = "79ee64f6ba0a5a49930f51c86f60d7526b5e12c8" uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" -version = "2.6.3" +version = "2.8.0" [deps.LazyArrays.extensions] LazyArraysBandedMatricesExt = "BandedMatrices" @@ -1181,24 +1186,24 @@ uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" version = "0.6.4" [[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.6.0+0" +version = "8.11.1+1" [[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" version = "1.11.0" [[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.7.2+0" +version = "1.9.0+0" [[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" +version = "1.11.3+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" @@ -1259,7 +1264,7 @@ version = "7.4.0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.0" +version = "1.12.0" [[deps.LinearOperators]] deps = ["FastClosures", "LinearAlgebra", "Printf", "Requires", "SparseArrays", "TimerOutputs"] @@ -1284,10 +1289,10 @@ version = "2.11.0" Metal = "dde4c033-4e86-420c-a63e-0dd931031962" [[deps.LinearSolve]] -deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "GPUArraysCore", "InteractiveUtils", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "OpenBLAS_jll", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "StaticArraysCore", "UnPack"] -git-tree-sha1 = "e479c96c20e3fe6067d7ee6618839236d156f060" +deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "GPUArraysCore", "InteractiveUtils", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "OpenBLAS_jll", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "Setfield", "StaticArraysCore", "UnPack"] +git-tree-sha1 = "b5def83652705bdc00035dff671039e707588a00" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "3.40.1" +version = "3.46.1" [deps.LinearSolve.extensions] LinearSolveAMDGPUExt = "AMDGPU" @@ -1307,6 +1312,7 @@ version = "3.40.1" LinearSolveKernelAbstractionsExt = "KernelAbstractions" LinearSolveKrylovKitExt = "KrylovKit" LinearSolveMetalExt = "Metal" + LinearSolveMooncakeExt = "Mooncake" LinearSolvePardisoExt = ["Pardiso", "SparseArrays"] LinearSolveRecursiveFactorizationExt = "RecursiveFactorization" LinearSolveSparseArraysExt = "SparseArrays" @@ -1330,6 +1336,7 @@ version = "3.40.1" KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" LAPACK_jll = "51474c39-65e3-53ba-86ba-03b1b862ec14" Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" @@ -1358,9 +1365,9 @@ version = "1.11.0" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.1.0" +version = "1.2.0" [[deps.METIS_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1426,7 +1433,7 @@ uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" version = "0.1.8" [[deps.Markdown]] -deps = ["Base64"] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" version = "1.11.0" @@ -1453,9 +1460,10 @@ uuid = "739be429-bea8-5141-9913-cc70e7f3736d" version = "1.1.9" [[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3cce3511ca2c6f87b19c34ffc623417ed2798cbd" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.6+0" +version = "2.28.10+0" [[deps.Measures]] git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" @@ -1480,7 +1488,7 @@ version = "0.3.7" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.12.12" +version = "2025.5.20" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -1525,13 +1533,13 @@ version = "1.1.3" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" +version = "1.3.0" [[deps.NonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "NonlinearSolveBase", "NonlinearSolveFirstOrder", "NonlinearSolveQuasiNewton", "NonlinearSolveSpectralMethods", "PrecompileTools", "Preferences", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "StaticArraysCore", "SymbolicIndexingInterface"] -git-tree-sha1 = "627967f6e36aac9f5afb2fb285e33b676a6892f9" +git-tree-sha1 = "1d091cfece012662b06d25c792b3a43a0804c47b" uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" -version = "4.11.0" +version = "4.12.0" [deps.NonlinearSolve.extensions] NonlinearSolveFastLevenbergMarquardtExt = "FastLevenbergMarquardt" @@ -1562,9 +1570,9 @@ version = "4.11.0" [[deps.NonlinearSolveBase]] deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "Compat", "ConcreteStructs", "DifferentiationInterface", "EnzymeCore", "FastClosures", "LinearAlgebra", "Markdown", "MaybeInplace", "Preferences", "Printf", "RecursiveArrayTools", "SciMLBase", "SciMLJacobianOperators", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] -git-tree-sha1 = "f05e5f3d0f280598ecdc26b06ec9acd71dcaef31" +git-tree-sha1 = "9dba8e7ccfaf4c10b3a3b4cc52abf639f8558efd" uuid = "be0214bd-f91f-a760-ac4e-3421ce2b2da0" -version = "1.16.1" +version = "2.0.0" [deps.NonlinearSolveBase.extensions] NonlinearSolveBaseBandedMatricesExt = "BandedMatrices" @@ -1594,15 +1602,15 @@ version = "1.16.1" [[deps.NonlinearSolveFirstOrder]] deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConcreteStructs", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLJacobianOperators", "Setfield", "StaticArraysCore"] -git-tree-sha1 = "b9702235120d1161f8041b326eccebd334340de2" +git-tree-sha1 = "01c48c37ba47721ec6489a1668ab3bb1f5b603c0" uuid = "5959db7a-ea39-4486-b5fe-2dd0bf03d60d" -version = "1.8.0" +version = "1.9.0" [[deps.NonlinearSolveQuasiNewton]] deps = ["ArrayInterface", "CommonSolve", "ConcreteStructs", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLOperators", "StaticArraysCore"] -git-tree-sha1 = "4e0e34601c6c9890aa9443003180967f75c6929d" +git-tree-sha1 = "a233b7bbb32426170b238e2e2b82b0f9f1c5caba" uuid = "9a2c21bd-3a47-402d-9113-8faf9a0ee114" -version = "1.9.0" +version = "1.10.0" weakdeps = ["ForwardDiff"] [deps.NonlinearSolveQuasiNewton.extensions] @@ -1610,9 +1618,9 @@ weakdeps = ["ForwardDiff"] [[deps.NonlinearSolveSpectralMethods]] deps = ["CommonSolve", "ConcreteStructs", "LineSearch", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] -git-tree-sha1 = "6c613302febe2bb408a888105d07073cf6824911" +git-tree-sha1 = "139bf9211930a829703481b3ffd86b1ab309cd07" uuid = "26075421-4e9a-44e1-8bd1-420ed7ad02b2" -version = "1.4.0" +version = "1.5.0" weakdeps = ["ForwardDiff"] [deps.NonlinearSolveSpectralMethods.extensions] @@ -1642,18 +1650,18 @@ version = "0.3.29+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" +version = "0.3.29+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.5+0" +version = "0.8.7+0" [[deps.OpenSSH_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenSSL_jll", "Zlib_jll"] -git-tree-sha1 = "1f2f0911e1c02f28a390bb720f97f3349c4dcefb" +git-tree-sha1 = "301412a644646fdc0ad67d0a87487466b491e53d" uuid = "9bd350c2-7e96-507f-8002-3f2e150b4e1b" -version = "10.0.2+0" +version = "10.2.1+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] @@ -1662,10 +1670,9 @@ uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" version = "1.5.0" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2ae7d4ddec2e13ad3bddf5c0796f7547cf682391" +deps = ["Artifacts", "Libdl"] uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.5.2+0" +version = "3.5.1+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] @@ -1677,7 +1684,7 @@ version = "0.5.6+0" deps = ["ADNLPModels", "CTBase", "CTDirect", "CTFlows", "CTModels", "CTParser", "CommonSolve", "DocStringExtensions", "ExaModels", "RecipesBase"] path = "/Users/ocots/Research/logiciels/dev/control-toolbox/OptimalControl" uuid = "5f98b655-cc9a-415a-b60e-744165666948" -version = "1.1.4" +version = "1.1.5" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1692,9 +1699,9 @@ version = "1.8.1" [[deps.OrdinaryDiffEq]] deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "ExponentialUtilities", "FastBroadcast", "FastClosures", "FillArrays", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "InteractiveUtils", "LineSearches", "LinearAlgebra", "LinearSolve", "Logging", "MacroTools", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqAdamsBashforthMoulton", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqDefault", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqExplicitRK", "OrdinaryDiffEqExponentialRK", "OrdinaryDiffEqExtrapolation", "OrdinaryDiffEqFIRK", "OrdinaryDiffEqFeagin", "OrdinaryDiffEqFunctionMap", "OrdinaryDiffEqHighOrderRK", "OrdinaryDiffEqIMEXMultistep", "OrdinaryDiffEqLinear", "OrdinaryDiffEqLowOrderRK", "OrdinaryDiffEqLowStorageRK", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqNordsieck", "OrdinaryDiffEqPDIRK", "OrdinaryDiffEqPRK", "OrdinaryDiffEqQPRK", "OrdinaryDiffEqRKN", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqSDIRK", "OrdinaryDiffEqSSPRK", "OrdinaryDiffEqStabilizedIRK", "OrdinaryDiffEqStabilizedRK", "OrdinaryDiffEqSymplecticRK", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "Polyester", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleNonlinearSolve", "SimpleUnPack", "SparseArrays", "Static", "StaticArrayInterface", "StaticArrays", "TruncatedStacktraces"] -git-tree-sha1 = "89cd4e81d7a668f8858fba6779212f41a0360260" +git-tree-sha1 = "89172157d16139165d470602f1e552484b357771" uuid = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" -version = "6.102.1" +version = "6.103.0" [[deps.OrdinaryDiffEqAdamsBashforthMoulton]] deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqLowOrderRK", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] @@ -1710,9 +1717,9 @@ version = "1.10.1" [[deps.OrdinaryDiffEqCore]] deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "FastBroadcast", "FastClosures", "FastPower", "FillArrays", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleUnPack", "Static", "StaticArrayInterface", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] -git-tree-sha1 = "688c717e8eee84dcfef02ddf71c8028215b329ca" +git-tree-sha1 = "4b68f9ca0cfa68cb9ee544df96391d47ca0e62a9" uuid = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" -version = "1.34.0" +version = "1.36.0" [deps.OrdinaryDiffEqCore.extensions] OrdinaryDiffEqCoreEnzymeCoreExt = "EnzymeCore" @@ -1806,9 +1813,9 @@ version = "1.7.0" [[deps.OrdinaryDiffEqNonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "FastBroadcast", "FastClosures", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "PreallocationTools", "RecursiveArrayTools", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleNonlinearSolve", "StaticArrays"] -git-tree-sha1 = "b05226afc8fa6b8fc6f2258a89987b4f5bd0db4e" +git-tree-sha1 = "f59c1c07cfa674c1d3f5dd386c4274d9bc2be221" uuid = "127b3ac7-2247-4354-8eb6-78cf4e7c58e8" -version = "1.14.1" +version = "1.15.0" [[deps.OrdinaryDiffEqNordsieck]] deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqTsit5", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] @@ -1891,7 +1898,7 @@ version = "1.6.0" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" +version = "10.44.0+1" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] @@ -1920,7 +1927,7 @@ version = "0.44.2+0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.11.0" +version = "1.12.0" weakdeps = ["REPL"] [deps.Pkg.extensions] @@ -1990,9 +1997,9 @@ weakdeps = ["ForwardDiff", "ReverseDiff", "SparseConnectivityTracer"] [[deps.PrecompileTools]] deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" +version = "1.3.3" [[deps.Preferences]] deps = ["TOML"] @@ -2001,10 +2008,10 @@ uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.5.0" [[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "6b8e2f0bae3f678811678065c09571c1619da219" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.4.0" +version = "3.1.0" [[deps.Printf]] deps = ["Unicode"] @@ -2018,9 +2025,9 @@ version = "1.3.0" [[deps.Qt6Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] -git-tree-sha1 = "eb38d376097f47316fe089fc62cb7c6d85383a52" +git-tree-sha1 = "34f7e5d2861083ec7596af8b8c092531facf2192" uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" -version = "6.8.2+1" +version = "6.8.2+2" [[deps.Qt6Declarative_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6ShaderTools_jll"] @@ -2036,9 +2043,9 @@ version = "6.8.2+1" [[deps.Qt6Wayland_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6Declarative_jll"] -git-tree-sha1 = "e1d5e16d0f65762396f9ca4644a5f4ddab8d452b" +git-tree-sha1 = "8f528b0851b5b7025032818eb5abbeb8a736f853" uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" -version = "6.8.2+1" +version = "6.8.2+2" [[deps.Quadmath]] deps = ["Compat", "Printf", "Random", "Requires"] @@ -2047,7 +2054,7 @@ uuid = "be4d8f0f-7fa4-5f49-b795-2f01399ab2dd" version = "0.5.13" [[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "StyledStrings", "Unicode"] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" version = "1.11.0" @@ -2080,9 +2087,9 @@ version = "0.6.12" [[deps.RecursiveArrayTools]] deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "LinearAlgebra", "RecipesBase", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "96bef5b9ac123fff1b379acf0303cf914aaabdfd" +git-tree-sha1 = "51bdb23afaaa551f923a0e990f7c44a4451a26f1" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.37.1" +version = "3.39.0" [deps.RecursiveArrayTools.extensions] RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" @@ -2161,13 +2168,14 @@ uuid = "319450e9-13b8-58e8-aa9f-8fd1420848ab" version = "2025.5.20+0" [[deps.SciMLBase]] -deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Moshi", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "16fa030fb4bd4df373a677eca0460c3eee791ab2" +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Moshi", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLLogging", "SciMLOperators", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] +git-tree-sha1 = "7614a1b881317b6800a8c66eb1180c6ea5b986f3" uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.120.0" +version = "2.124.0" [deps.SciMLBase.extensions] SciMLBaseChainRulesCoreExt = "ChainRulesCore" + SciMLBaseDifferentiationInterfaceExt = "DifferentiationInterface" SciMLBaseDistributionsExt = "Distributions" SciMLBaseEnzymeExt = "Enzyme" SciMLBaseForwardDiffExt = "ForwardDiff" @@ -2187,6 +2195,7 @@ version = "2.120.0" [deps.SciMLBase.weakdeps] ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" @@ -2209,11 +2218,17 @@ git-tree-sha1 = "a273b291c90909ba6fe08402dd68e09aae423008" uuid = "19f34311-ddf3-4b8b-af20-060888a46c0e" version = "0.1.11" +[[deps.SciMLLogging]] +deps = ["Logging", "LoggingExtras", "Preferences"] +git-tree-sha1 = "5a026f5549ad167cda34c67b62f8d3dc55754da3" +uuid = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1" +version = "1.3.1" + [[deps.SciMLOperators]] deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra", "MacroTools"] -git-tree-sha1 = "024d829102878141aaee5cf8f8288bcabd2f57a0" +git-tree-sha1 = "c1053ba68ede9e4005fc925dd4e8723fcd96eef8" uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "1.7.2" +version = "1.9.0" weakdeps = ["SparseArrays", "StaticArraysCore"] [deps.SciMLOperators.extensions] @@ -2277,9 +2292,9 @@ version = "1.2.0" [[deps.SimpleNonlinearSolve]] deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] -git-tree-sha1 = "782c67176b473abf62a6786399c4b7ddcc1a2d77" +git-tree-sha1 = "8825064775bf4ae0f22d04ea63979d8c868fd510" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "2.8.0" +version = "2.9.0" [deps.SimpleNonlinearSolve.extensions] SimpleNonlinearSolveChainRulesCoreExt = "ChainRulesCore" @@ -2315,13 +2330,13 @@ version = "1.2.2" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.11.0" +version = "1.12.0" [[deps.SparseConnectivityTracer]] deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] -git-tree-sha1 = "3c3a42a29f696f16273741ffe589b4003f539088" +git-tree-sha1 = "ba6dc9b87304964647bd1c750b903cb360003a36" uuid = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" -version = "1.1.0" +version = "1.1.2" [deps.SparseConnectivityTracer.extensions] SparseConnectivityTracerChainRulesCoreExt = "ChainRulesCore" @@ -2339,9 +2354,9 @@ version = "1.1.0" [[deps.SparseMatrixColorings]] deps = ["ADTypes", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "Random", "SparseArrays"] -git-tree-sha1 = "9de43e0b9b976f1019bf7a879a686c4514520078" +git-tree-sha1 = "d3f3b7bb8a561b5ff20ee7cf9574841ee4e4e137" uuid = "0a514795-09f3-496d-8182-132a7b665d35" -version = "0.4.21" +version = "0.4.22" [deps.SparseMatrixColorings.extensions] SparseMatrixColoringsCUDAExt = "CUDA" @@ -2355,9 +2370,9 @@ version = "0.4.21" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "41852b8679f78c8d8961eeadc8f62cef861a52e3" +git-tree-sha1 = "f2685b435df2613e25fc10ad8c26dddb8640f547" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.5.1" +version = "2.6.1" weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] @@ -2371,9 +2386,9 @@ version = "1.0.3" [[deps.Static]] deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] -git-tree-sha1 = "1e44e7b1dbb5249876d84c32466f8988a6b41bbb" +git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.3.0" +version = "1.3.1" [[deps.StaticArrayInterface]] deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] @@ -2398,9 +2413,9 @@ weakdeps = ["ChainRulesCore", "Statistics"] StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] -git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.3" +version = "1.4.4" [[deps.Statistics]] deps = ["LinearAlgebra"] @@ -2420,9 +2435,9 @@ version = "1.7.1" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "2c962245732371acd51700dbb268af311bddd719" +git-tree-sha1 = "a136f98cefaf3e2924a66bd75173d1c891ab7453" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.6" +version = "0.34.7" [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] @@ -2453,7 +2468,7 @@ uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" +version = "7.8.3+2" [[deps.Suppressor]] deps = ["Logging"] @@ -2463,9 +2478,9 @@ version = "0.2.8" [[deps.SymbolicIndexingInterface]] deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "b19cf024a2b11d72bef7c74ac3d1cbe86ec9e4ed" +git-tree-sha1 = "94c58884e013efff548002e8dc2fdd1cb74dfce5" uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.44" +version = "0.3.46" weakdeps = ["PrettyTables"] [deps.SymbolicIndexingInterface.extensions] @@ -2583,9 +2598,9 @@ version = "1.0.0" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "59071150afa35787c1656ba234cf03fdf8e2603f" +git-tree-sha1 = "80d3930c6347cfce7ccf96bd3bafdf079d9c0390" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.8+0" +version = "2.13.9+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2637,9 +2652,9 @@ version = "1.3.7+0" [[deps.Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "9caba99d38404b285db8801d5c45ef4f4f425a6d" +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "6.0.1+0" +version = "6.0.2+0" [[deps.Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] @@ -2685,9 +2700,9 @@ version = "1.1.3+0" [[deps.Xorg_xcb_util_cursor_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] -git-tree-sha1 = "c5bf2dad6a03dfef57ea0a170a1fe493601603f2" +git-tree-sha1 = "9750dc53819eba4e9a20be42349a6d3b86c7cdf8" uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" -version = "0.1.5+0" +version = "0.1.6+0" [[deps.Xorg_xcb_util_image_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] @@ -2740,7 +2755,7 @@ version = "1.6.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" +version = "1.3.1+2" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2768,9 +2783,9 @@ version = "0.61.1+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "4bba74fa59ab0755167ad24f98800fe5d727175b" +git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" -version = "3.12.1+0" +version = "3.13.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -2781,7 +2796,7 @@ version = "0.17.4+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" +version = "5.15.0+0" [[deps.libdecor_jll]] deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] @@ -2828,18 +2843,18 @@ version = "1.1.7+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.59.0+0" +version = "1.64.0+1" [[deps.oneTBB_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "d5a767a3bb77135a99e433afe0eb14cd7f6914c3" +git-tree-sha1 = "1350188a69a6e46f799d3945beef36435ed7262f" uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2022.0.0+0" +version = "2022.0.0+1" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" +version = "17.5.0+2" [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] diff --git a/docs/src/assets/ct-qr-code.svg b/docs/src/assets/ct-qr-code.svg new file mode 100644 index 00000000..bc23628b --- /dev/null +++ b/docs/src/assets/ct-qr-code.svg @@ -0,0 +1,1606 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/assets/rdnopa-2025.jpg b/docs/src/assets/rdnopa-2025.jpg new file mode 100644 index 00000000..17e92ed4 Binary files /dev/null and b/docs/src/assets/rdnopa-2025.jpg differ diff --git a/docs/src/assets/rocket-def.jpg b/docs/src/assets/rocket-def.jpg new file mode 100644 index 00000000..a4522891 Binary files /dev/null and b/docs/src/assets/rocket-def.jpg differ diff --git a/docs/src/assets/rocket-def.pdf b/docs/src/assets/rocket-def.pdf new file mode 100644 index 00000000..f711aeea Binary files /dev/null and b/docs/src/assets/rocket-def.pdf differ diff --git a/docs/src/assets/rocket-def.png b/docs/src/assets/rocket-def.png new file mode 100644 index 00000000..90ffd8ac Binary files /dev/null and b/docs/src/assets/rocket-def.png differ diff --git a/docs/src/assets/rocket-def.svg b/docs/src/assets/rocket-def.svg new file mode 100644 index 00000000..c8137069 --- /dev/null +++ b/docs/src/assets/rocket-def.svg @@ -0,0 +1,517 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +M + +a + +t + +h + +e + +m + +a + +ti + +c + +a + +l + + +f + +o + +r + +m + +u + +l + +a + +ti + +o + +n + +The problem can be stated as + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P + +a + +r + +a + +m + +e + +t + +e + +r + +s + + + + +P + +a + +r + +a + +m + +e + +t + +e + +r + +S + +y + +m + +b + +o + +l + +V + +a + +l + +u + +e +Initial altitude +1 +Initial velocity +0 +Initial mass +1 +Gravitational constant +1 +Thrust coe + +cient +3.5 +Drag coe + +cient +Characteristic altitude +500 +Characteristic velocity +620 +Characteristic mass ratio +0.6 +Final mass + + +where the Drag, Gravity, Fuel constant, and Maximum thrust are de + +ned as + + + + + +h +, +v +, +m +, +T +m +i +n +s.t. +( +t +) +h +˙ +( +t +) +v +˙ +( +t +) +m +˙ +0 + +T +( +t +) +h +( +t +) +v +( +t +) +m + + +m +( +t +) +f +h +( +0 +) +m +( +T +) +J += + +h +( +T +) += +v +( +t +) +, += + +, +m +( +t +) + +T +( +t +) + +D +( +h +( +t +) +, +v +( +t +)) + +m +( +t +) +g +( +h +( +t +)) += + + +, +c + +T +( +t +) + +T + +, +m +a +x + +h + +, +0 + +v + +, +0 + +m + +, +0 += +h + +, +v +( +0 +) += +v + +, +m +( +0 +) += +m + +, +0 +0 +0 += +m + +, +f + + +h + +0 +v + +0 +m + +0 +g + +0 +T + +c +D + +c + +v + + +2 + +1 +c +g + +0 + +m + +0 +h + +c +v + +c +m + +c +m + +f +m + +m + +c +0 + + +D +( +h +, +v +) += +D + +v +e +x +p + +h + +, +g +( +h +) += +c +2 +( +c +h + +0 + +h + +h +0 +) +g + + +, +c += +0 +( +h + +h + +0 +) +2 + + +, +T + += +2 + +1 +g + +h + +0 +0 + + + + + +m +a +x +T + +m + +g + +. +c +0 +0 + + + diff --git a/docs/src/example-double-integrator-time.md b/docs/src/example-double-integrator-time.md index 77faee83..984fd081 100644 --- a/docs/src/example-double-integrator-time.md +++ b/docs/src/example-double-integrator-time.md @@ -9,7 +9,7 @@ The problem consists in minimising the final time $t_f$ for the double integrato and the limit conditions ```math - x(0) = (1,2), \quad x(t_f) = (0,0). + x(0) = (-1,0), \quad x(t_f) = (0,0). ``` This problem can be interpreted as a simple model for a wagon with constant mass moving along a line without friction. diff --git a/docs/src/manual-abstract.md b/docs/src/manual-abstract.md index ffa2b326..80ce45e9 100644 --- a/docs/src/manual-abstract.md +++ b/docs/src/manual-abstract.md @@ -23,7 +23,7 @@ end ``` !!! warning - Note that the full code of the definition above is not provided (hence the `...`) The same is true for most examples below (only those without `...` are indeed complete). Also note that problem definitions must at least include definitions for time, state, control, and dynamics. + Note that the full code of the definition above is not provided (hence the `...`) The same is true for most examples below (only those without `...` are indeed complete). Also note that problem definitions must at least include definitions for time, state, control, dynamics and cost. Aliases `v₁`, `v₂` (and `v1`, `v2`) are automatically defined and can be used in subsequent expressions instead of `v[1]` and `v[2]`. The user can also define her own aliases for the components (one alias per dimension): @@ -44,6 +44,9 @@ A one dimensional variable can be declared according to end ``` +!!! warning + Aliases during definition of variable, state or control are only allowed for multidimensional (dimension two or more) cases. Something like `u = T ∈ R, control` is not allowed... and useless (directly write `T ∈ R, control`). + ## Time ```julia @@ -496,7 +499,7 @@ end ``` !!! warning - Such aliases do *not* define any additional function and are just replaced textually by the parser. In particular, they cannot be used outside the `@def` `begin ... end` block. + Such aliases do *not* define any additional function and are just replaced textually by the parser. In particular, they cannot be used outside the `@def` `begin ... end` block. Conversely, constants and functions used within the `@def` block must be defined outside and before this block. !!! hint You can rely on a trace mode for the macro `@def` to look at your code after expansions of the aliases using the `@def ocp ...` syntax and adding `true` after your `begin ... end` block: diff --git a/docs/src/manual-ai-llm.md b/docs/src/manual-ai-llm.md index db87ecbc..41c05511 100644 --- a/docs/src/manual-ai-llm.md +++ b/docs/src/manual-ai-llm.md @@ -114,3 +114,89 @@ Use a form compatible with examodels. tf → min end ``` + +It is also possible to feed the model directly with math definitions (here from a snapshot), as in the [example](https://control-toolbox.org/OptimalControlProblems.jl/stable/problems/rocket.html) below: + +```text +translate the problem below into OptimalControl.jl DSL: +``` + +```@raw html +rocket-def + +``` + +This prompt generates the syntactically correct code: + +```julia +# Parameters +h₀ = 1 +v₀ = 0 +m₀ = 1 +g₀ = 1 +Tc = 3.5 +hc = 500 +vc = 620 +mc = 0.6 + +# Derived constants +Dc = 0.5 * vc * m₀ / g₀ +mf = mc * m₀ +c = 0.5 * sqrt(g₀ * h₀) +Tmax = Tc * m₀ * g₀ + +# Auxiliary functions +D(h, v) = Dc * v^2 * exp(-hc * (h - h₀) / h₀) +g(h) = g₀ * (h₀ / h)^2 + +rocket = @def begin + # Variable (free final time) + tf ∈ R, variable + + # Time + t ∈ [0, tf], time + + # State: (altitude, velocity, mass) + x = (h, v, m) ∈ R³, state + + # Control: thrust + T ∈ R, control + + # Dynamics + ∂(h)(t) == v(t) + ∂(v)(t) == (T(t) - D(h(t), v(t)) - m(t) * g(h(t))) / m(t) + ∂(m)(t) == -T(t) / c + + # Initial conditions + h(0) == h₀ + v(0) == v₀ + m(0) == m₀ + + # Final condition + m(tf) == mf + + # State constraints + h(t) ≥ h₀ + v(t) ≥ v₀ + mf ≤ m(t) ≤ m₀ + + # Control constraint + 0 ≤ T(t) ≤ Tmax + + # Variable constraint + tf ≥ 0 + + # Objective: maximize final altitude h(tf) + -h(tf) → min +end +``` \ No newline at end of file diff --git a/docs/src/manual-solve-gpu.md b/docs/src/manual-solve-gpu.md index 130f68f3..fc44315c 100644 --- a/docs/src/manual-solve-gpu.md +++ b/docs/src/manual-solve-gpu.md @@ -28,10 +28,7 @@ end ``` !!! note - We have used MadNLPGPU instead of MadNLP, that is able to solve on GPU (leveraging [CUDSS.jl](https://github.com/exanauts/CUDSS.jl)) optimisation problems modelled with ExaModels.jl. As a direct transcription towards an `ExaModels.ExaModel` is performed, there are limitations on the syntax: - - dynamics must be declared coordinate by coordinate (not globally as a vector valued expression) - - nonlinear constraints (boundary, variable, control, state, mixed ones, see [Constraints](@ref manual-abstract-constraints) must also be scalar expressions (linear constraints *aka.* ranges, on the other hand, can be vectors) - - all expressions must only involve algebraic operations that are known to ExaModels (check the [documentation](https://exanauts.github.io/ExaModels.jl/stable)), although one can provide additional user defined functions through *registration* (check [ExaModels API](https://exanauts.github.io/ExaModels.jl/stable/core/#ExaModels.@register_univariate-Tuple%7BAny,%2520Any,%2520Any%7D)) + We have used MadNLPGPU instead of MadNLP, that is able to solve on GPU (leveraging [CUDSS.jl](https://github.com/exanauts/CUDSS.jl)) optimisation problems modelled with ExaModels.jl. As a direct transcription towards an `ExaModels.ExaModel` is performed (`:exa` keyword below), there are limitations on the syntax (check the [Solve section](@ref manual-solve-methods)). Computation on GPU is currently only tested with CUDA, and the associated backend must be passed to ExaModels as is done below (also note the `:exa` keyword to indicate the modeller, and `:madnlp` for the solver): diff --git a/docs/src/manual-solve.md b/docs/src/manual-solve.md index d8d0ce21..580fb7f0 100644 --- a/docs/src/manual-solve.md +++ b/docs/src/manual-solve.md @@ -89,7 +89,10 @@ solve(ocp, :direct, :adnlp, :ipopt) !!! warning - Dynamics and nonlinear constraints must be defined coordinatewise to use ExaModels.jl (`:exa`). Check [the problem definition manual](@ref manual-abstract-dynamics-coord) for more information. + When using `:exa` for more performance (in particular to [solve on GPU](@ref manual-solve-gpu)), there are limitations on the syntax: + - dynamics must be declared coordinate by coordinate (not globally as a vector valued expression) + - nonlinear constraints (boundary, variable, control, state, mixed ones, see [Constraints](@ref manual-abstract-constraints) must also be scalar expressions (linear constraints *aka.* ranges, on the other hand, can be vectors) + - all expressions must only involve algebraic operations that are known to ExaModels (check the [documentation](https://exanauts.github.io/ExaModels.jl/stable)), although one can provide additional user defined functions through *registration* (check [ExaModels API](https://exanauts.github.io/ExaModels.jl/stable/core/#ExaModels.@register_univariate-Tuple%7BAny,%2520Any,%2520Any%7D)) !!! note diff --git a/docs/src/rdnopa-2025.md b/docs/src/rdnopa-2025.md new file mode 100644 index 00000000..57372938 --- /dev/null +++ b/docs/src/rdnopa-2025.md @@ -0,0 +1,236 @@ +```@raw html +rdnopa +``` + +# Numerical developments to solve optimal control problems in Julia + +### [Jean-Baptiste Caillau](http://caillau.perso.math.cnrs.fr), [Olivier Cots](https://ocots.github.io), [Joseph Gergaud](https://github.com/joseph-gergaud), [Pierre Martinon](https://github.com/PierreMartinon), [Sophia Sed](https://sed-sam-blog.gitlabpages.inria.fr) + +```@raw html +affiliations +``` + +## What it's about + +- Nonlinear optimal control of ODEs: + +```math +g(x(t_0),x(t_f)) + \int_{t_0}^{t_f} f^0(x(t), u(t))\, \mathrm{d}t \to \min +``` + +subject to + +```math +\dot{x}(t) = f(x(t), u(t)),\quad t \in [t_0, t_f] +``` + +plus boundary, control and state constraints + +- Our core interests: numerical & geometrical methods in control, applications +- Why Julia: fast (+ JIT), strongly typed, high-level (AD, macros), fast optimisation and ODE solvers available, rapidly growing community + +**What is important to solve such a problem numerically?** + +## Syntax matters + +- [Simple example](@ref example-double-integrator-time) +- [Use LLM](@ref manual-ai-llm) + +```@raw html +
Do more... +``` + +```text +rewrite in OptimalControl.jl DSL the free time problem below as a problem with fixed final time using: +- a change time from t to s = t / tf +- tf as an additional state variable subject to dtf / ds = 0 +ocp = @def begin + tf ∈ R, variable + t ∈ [0, tf], time + x = (q, v) ∈ R², state + u ∈ R, control + -1 ≤ u(t) ≤ 1 + q(0) == -1 + v(0) == 0 + q(tf) == 0 + v(tf) == 0 + ẋ(t) == [v(t), u(t)] + tf → min +end +``` + +```julia +ocp_fixed = @def begin + # Fixed time domain + s ∈ [0, 1], time + + # Augmented state: (position, velocity, final_time) + y = (q, v, tf) ∈ R³, state + + # Control + u ∈ R, control + + # Transformed dynamics (multiply by tf due to ds = dt/tf) + ∂(q)(s) == tf(s) * v(s) + ∂(v)(s) == tf(s) * u(s) + ∂(tf)(s) == 0 + + # Initial conditions + q(0) == -1 + v(0) == 0 + # tf(0) is free (no initial condition needed) + + # Final conditions + q(1) == 0 + v(1) == 0 + # tf(1) is what we minimize + + # Control constraints + -1 ≤ u(s) ≤ 1 + + # Cost: minimize final time + tf(1) → min +end +``` + +```@raw html +
+``` + +## Performance matters + +- Discretising an OCP into an NLP: $h_i := t_{i+1}-t_i$, + +```math +g(X_0,X_N) + \sum_{i=0}^{N} h_i f^0(X_i,U_i) \to \min +``` + +subject to + +```math +X_{i+1} - X_i - h_i f(X_i, U_i) = 0,\quad i = 0,\dots,N-1 +``` + +plus other constraints on $X := (X_i)_{i=0,N}$ and $U := (U_i)_{i=0,N}$ such as boundary and path (state and / or control) constraints : + +```math +b(t_0, X_0, t_N, X_N) = 0 +``` + +```math +c(X_i, U_i) \leq 0,\quad i = 0,\dots,N +``` + +- SIMD parallelism ($f_0$, $f$, $g$) + sparsity: Kernels for GPU ([KernelAbstraction.jl](https://juliagpu.github.io/KernelAbstractions.jl/stable/)) and sparse linear algebra ([CUDSS.jl](https://github.com/exanauts/CUDSS.jl)) +- Modelling and optimising for GPU: [ExaModels.jl](https://exanauts.github.io/ExaModels.jl/dev/guide) + [MadNLP.jl](https://madnlp.github.io/MadNLP.jl), with **built-in AD** +- Compile into an ExaModel (one pass compiler, [syntax + semantics](https://github.com/control-toolbox/CTParser.jl/blob/20c6be5c953587fef10b054a95f9dc8c66b90577/src/onepass.jl#L145)) + + +```@raw html +
Solving (MadNLP + CUDSS) +``` + +```julia +This is MadNLP version v0.8.7, running with cuDSS v0.4.0 + +Number of nonzeros in constraint Jacobian............: 12005 +Number of nonzeros in Lagrangian Hessian.............: 9000 + +Total number of variables............................: 4004 + variables with only lower bounds: 0 + variables with lower and upper bounds: 0 + variables with only upper bounds: 0 +Total number of equality constraints.................: 3005 +Total number of inequality constraints...............: 0 + inequality constraints with only lower bounds: 0 + inequality constraints with lower and upper bounds: 0 + inequality constraints with only upper bounds: 0 + +iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls + 0 1.0000000e-01 1.10e+00 1.00e+00 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0 + 1 1.0001760e-01 1.10e+00 3.84e-03 -1.0 6.88e+02 -4.0 1.00e+00 2.00e-07h 2 + 2 -5.2365072e-03 1.89e-02 1.79e-07 -1.0 6.16e+00 -4.5 1.00e+00 1.00e+00h 1 + 3 5.9939621e+00 2.28e-03 1.66e-04 -3.8 6.00e+00 -5.0 9.99e-01 1.00e+00h 1 + 4 5.9996210e+00 2.94e-06 8.38e-07 -3.8 7.70e-02 - 1.00e+00 1.00e+00h 1 + +Number of Iterations....: 4 + + (scaled) (unscaled) +Objective...............: 5.9996210189633494e+00 5.9996210189633494e+00 +Dual infeasibility......: 8.3756005011360529e-07 8.3756005011360529e-07 +Constraint violation....: 2.9426923277963834e-06 2.9426923277963834e-06 +Complementarity.........: 2.0007459547789288e-06 2.0007459547789288e-06 +Overall NLP error.......: 2.9426923277963834e-06 2.9426923277963834e-06 + +Number of objective function evaluations = 6 +Number of objective gradient evaluations = 5 +Number of constraint evaluations = 6 +Number of constraint Jacobian evaluations = 5 +Number of Lagrangian Hessian evaluations = 4 +Total wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.072 +Total wall-clock secs in linear solver = 0.008 +Total wall-clock secs in NLP function evaluations = 0.003 +Total wall-clock secs = 0.083 +``` + +- Mini-benchmark: [Goddard](https://control-toolbox.org/Tutorials.jl/stable/tutorial-goddard.html) and [Quadrotor](https://github.com/control-toolbox/CTParser.jl/blob/211042b061be17b3f7fdff41cb53701d30b128db/test/test_onepass_exa.jl#L926) problems +- Goddard, H100 run +```@raw html +goddard-h100 +``` +- Quadrotor, H100 run +```@raw html +quadrotor-h100 +``` + +```@raw html +
+``` + +## Maths matters + +- Coupling direct *and* indirect (*aka* shooting methods) +- Easy access to differential-geometric tools with AD +- [Goddard tutorial](https://control-toolbox.org/Tutorials.jl/stable/tutorial-goddard.html) + +## Applications matter + +- Use case approach: aerospace engineering, quantum mechanics, biology, environment... +- [Magnetic Resonance Imaging](https://control-toolbox.org/MagneticResonanceImaging.jl/stable/saturation.html) + +## Wrap up + +- High level modelling of optimal control problems +- High performance solving both on CPU and GPU +- Driven by applications + +## control-toolbox.org + +```@raw html +ct-qr +``` + +- Collection of Julia Packages rooted at [OptimalControl.jl](https://control-toolbox.org/OptimalControl.jl) +```@raw html +control-toolbox.org +``` +- Open to contributions! Give it a [try](@ref manual-ai-llm), give it a star ⭐️ +- Collection of problems: [OptimalControlProblems.jl](https://control-toolbox.org/OptimalControlProblems.jl/stable/problems_browser.html) + +## Credits (not exhaustive!) + +- [ADNLPModels.jl](https://jso.dev/ADNLPModels.jl) +- [DifferentiationInterface.jl](https://juliadiff.org/DifferentiationInterface.jl/DifferentiationInterface) +- [DifferentialEquations.jl](https://docs.sciml.ai/DiffEqDocs) +- [ExaModels.jl](https://exanauts.github.io/ExaModels.jl/dev/guide) +- [Ipopt.jl](https://github.com/jump-dev/Ipopt.jl) +- [MadNLP.jl](https://madnlp.github.io/MadNLP.jl) +- [MLStyle.jl](https://thautwarm.github.io/MLStyle.jl) + +## Acknowledgements + +Jean-Baptiste Caillau is partially funded by a **France 2030** support managed by the *Agence Nationale de la Recherche*, under the reference ANR-23-PEIA-0004 ([PDE-AI](https://pde-ai.math.cnrs.fr) project). + +```@raw html +affiliations +``` \ No newline at end of file