[Cron/Doc] ModelingToolkit convergence cron, trajectories, and documentation (#308)
I maintainer di solito rispondono entro 1 giorno
@ocots ci sta già lavorando.
Dal 8/11/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Agents: read the guide for agents in #310 first (order, difficulty, how to claim an issue, working method). Read
AGENTS.mdand clone.ct-conventions(v0.11.0) and.ct-agents(v0.4.0). Specification: this description and #308.
Sub-issue of #308, part 3 of 3. Depends on #438 (SolveModelingToolkit and test/suite/ModelingToolkit/).
Goal
Add the weekly ModelingToolkit convergence cron (test/cron/ModelingToolkit/test_convergence.jl) recording results and trajectories for the documentation results pipeline (#314), enable the Saturday cron schedule in .github/workflows/CronModelingToolkit.yml, and complete the documentation adapter and developer READMEs (docs/modelings.jl, docs/make.jl, docs/api_reference.jl, ext/README.md, test/README.md).
At the end of this issue, cron/ModelingToolkit runs end-to-end and generates its report and trajectory files, the documentation builds cleanly with the ModelingToolkit tab on bryson_denham's page, and all requirements of #308 are complete.
Technical Findings (from #308 preliminary checks)
- Convergence report (
test/cron/ModelingToolkit/test_convergence.jl):- Convergence is reported, never tested as a binary failure (#360).
- For a shooting method with piecewise-constant controls (
scheme = :shooting_singleor:shooting_multiple),reference_objective(problem; grid_size, scheme)has no trapezoidal entry inext/MetaData/references/<problem>.toml, soTestStatus.result!naturally recordsref_objective = nothingunless passed or matched, while the convergence script can also print both:- the gap to the analytic objective
OptimalControlProblems.analytic_reference(problem).value($J^* = 4.0$ forbryson_denham), and - the gap to the OptimalControl trapezoidal reference
OptimalControlProblems.reference_objective(problem; grid_size, scheme=:trapezoid).
- the gap to the analytic objective
- Trajectories &
ProblemPlot.vue(#314):docs/src/components/ProblemPlot.vuechecksif (data[group][name])forgroup in ['state', 'control', 'costate']. SinceCorleoneis a direct shooting solver without explicit costates, passingcostate = Dict{String, Vector{Float64}}()in thetrajectoryreturned bySolveModelingToolkit.trajectorycausesProblemPlot.vueto cleanly omit the Costate section and plot State and Control trajectories.docs/make.jldoes not runCorleoneat build time (it only reads source files and precomputed JSONs fromresults), sodocs/Project.tomlonly needsModelingToolkit(to loadModelingToolkitModelsfordocs/api_reference.jl), notCorleone.
- Documentation problem page adapter (
docs/modelings.jl):- Verify and polish the
:ModelingToolkit => ModelingAdapter(...)entry indocs/modelings.jlso theModelingToolkittab onproblems/bryson_denham.mdshows:- how to retrieve the continuous
ModelingToolkit.System(pb = bryson_denham(ModelingToolkitBackend()); sys = model(pb)), - how to discretize the path constraint on a constraint grid, build a
CorleoneDynamicOptProblemwith our sharedinitial_guess(pb), and solve it withIpopt, - the note required by #308: "With direct shooting in Corleone, the state path constraint is enforced at the points of a constraint grid, and controls are piecewise constant on a control grid."
- how to retrieve the continuous
- Verify and polish the
Mandatory Rules & Conventions (ct-conventions v0.11.0, #310)
- Worktree per issue (
#310rule 3a): Never edit or switch branches in the main checkout. Use a dedicated worktree (git worktree add ../OptimalControlProblems-<issue> -b feat/<issue>-mtk-cron-docs main). - Qualified imports only (
MOD3,MOD4): Always useusing Pkg: Pkg, sym. Never use bareusing Pkgorimport. - No hand-written problem lists (
test_no_handwritten_listintest/suite/core/test_consistency.jl): Intest/cron/ModelingToolkit/test_convergence.jl, loop over problems usingMain.TestStatus.for_each_problem(..., OptimalControlProblems.ModelingToolkitBackend()); never hardcode:bryson_denham. - Docstrings (
DOC1–DOC8) & Site rules (SITE1–SITE18): Verify the documentation builds without warnings or errors.
Detailed Implementation Plan
Files to Create or Modify
| File | Action | Details |
|---|---|---|
test/cron/ModelingToolkit/test_convergence.jl |
Create | Run every problem in ModelingToolkitBackend() across CONFIGS.ModelingToolkit on its default grid (max_iter=1000, tol=1e-6). Record Main.TestStatus.result! with trajectory = SolveModelingToolkit.trajectory(...) and log comparisons against analytic_reference(problem) and reference_objective(problem; grid_size, scheme=:trapezoid). |
.github/workflows/CronModelingToolkit.yml |
Modify | Uncomment the Saturday schedule (cron: "0 4 * * 6"). |
tools/cron/report.py |
Modify | Update _CADENCE_NOTE so ModelingToolkit is listed among active weekly crons (Saturday 04:00 UTC). |
docs/modelings.jl |
Modify | Polish the :ModelingToolkit ModelingAdapter snippet and explanatory note on shooting with Corleone (piecewise-constant controls on control grid, path constraints sampled on constraint grid). |
docs/Project.toml & docs/make.jl & docs/api_reference.jl |
Modify | Add ModelingToolkit to docs/Project.toml, load using ModelingToolkit: ModelingToolkit in docs/make.jl, and include :ModelingToolkitModels in docs/api_reference.jl. |
ext/README.md & test/README.md |
Modify | Document ext/ModelingToolkitModels.jl, ext/ModelingToolkitModels/, test/suite/ModelingToolkit/, and test/cron/ModelingToolkit/. |
Verification Commands
julia --project=. -e 'using Pkg; Pkg.test(test_args=["cron/ModelingToolkit"])'
julia --project=. -e 'using Pkg; Pkg.test(test_args=["suite/core"])'
julia --project=docs -e 'using Pkg; Pkg.develop(PackageSpec(path=".")); Pkg.instantiate(); include("docs/make.jl")'
Done when
-
test/cron/ModelingToolkit/test_convergence.jlruns cleanly, writestest/reports/ModelingToolkit-cron.{md,json}and trajectory files, and prints gaps to both the analytic objective and the OptimalControl reference objective. -
.github/workflows/CronModelingToolkit.ymlhas its Saturday cron enabled andtools/cron/report.pyreflects it. -
docs/make.jlbuilds cleanly; thebryson_denhampage shows theModelingToolkittab (retrieve continuousSystem, then solve withCorleone) without problem-specific code in the page generator. -
ext/README.mdandtest/README.mdare updated.
Refs #308, #305, #307, #310, #314
- Lingua principale
- Julia
- Stelle
- 13
- Fork
- 1
- Merge medio
- 3h 33m
- PR unite (30g)
- 55
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di control-toolbox/OptimalControlProblems.jl
-
[Tests] Corleone solve helper and ModelingToolkit test suite (smoke, equivalence, reference solution) (#308)Forse già presa @ocots l’ha presa oggi. Apertafeature
control-toolbox/OptimalControlProblems.jl#438 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
[Problems] ModelingToolkitBackend, extension ModelingToolkitModels, and continuous bryson_denham (#308)Forse già presa @ocots l’ha presa oggi. Apertafeature
control-toolbox/OptimalControlProblems.jl#437 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
cron-convergence
Difficoltà 4/5 3-5 giorni Idoneità per principianti 32/100
control-toolbox/OptimalControlProblems.jl#436 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[Cron] cron-failureApertacron-failure
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
control-toolbox/OptimalControlProblems.jl#435 · 5 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[Dev] Expose the duals of the JuMP path, boundary and box constraints, aligned with signs.mdForse già presa @ocots l’ha presa oggi. Aperta
control-toolbox/OptimalControlProblems.jl#430 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di control-toolbox/OptimalControlProblems.jl
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
I maintainer di solito rispondono entro 1 giorno
-
lux
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
JuliaGraphs/GraphNeuralNetworks.jl#732 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
erfinv(::Float16) and erfcinv(::Float16) are wrong for abs(x) <= 0.75 (erfinv(Float16(0)) == 0.2201)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
JuliaMath/SpecialFunctions.jl#571 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100