[Tracking] Per-modeling lists of problems, drift-proof tests and cron

オープン
#310 コメント 14 件 リアクション 0 件 担当者 1 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@ocots がすでに取り組んでいます。

2026年11月4日 から。

評価

この issue はまだ評価されていません。

説明

roadmap

Goal

Reorganise OptimalControlProblems.jl around four ideas:

  1. Each modeling has its own list of problems, discovered automatically from the files: a problem may exist in OptimalControl without a JuMP version. No list of problems is written by hand anywhere.
  2. Every problem keeps a comparison: another modeling (automatic OptimalControl / JuMP tests on the intersection), or a sourced reference_objective.
  3. Drift is caught by tests: fast consistency tests on every PR, slow tests in a weekly cron (as in CTFlows.jl).
  4. The collection grows, including from SciML's OptimalControlBenchmarks (Corleone), with clean documentation of all this.

This builds on the port to OptimalControl v2 (#283) and the JuMP schemes (#284), both tracked in control-toolbox/CTBenchmarks.jl#200 for the benchmark paper. Roadmap: #257.

Work, in order

Step 0 brings the repository infrastructure in line with the other packages; steps 1 to 3 are the base; steps 4 to 7 can then go in parallel.

  1. Repository infrastructure: #313 (harmonization with ct-conventions: AGENTS.md, labels, templates, lint), then #312 (release infrastructure). Agents working on the other sub-issues need AGENTS.md and the pinned conventions.
  2. Per-modeling lists and consistency tests: #303, #304 (with #172, #173 under #303).
  3. Port to OptimalControl v2 and new problem interface: #283 (with #136). The problem returns the continuous problem and its initial guess; modeler, options, scheme and CPU/GPU are chosen in solve, so this package no longer passes modeler options.
  4. Weekly cron: #305.
  5. JuMP with Euler, trapezoid and midpoint, factorised in ext/JuMPModels/schemes.jl, and NLP equivalence tests against ADNLP and Exa: #284 (with #166).
  6. Metadata and shared initial guess: #306 (with #151); measure, then keep or drop the _s variants: #174.
  7. Plots in a Plots extension, shared by OptimalControl solutions and JuMP models: #175, #134; documentation: #307 (with #229).
  8. Corleone's OptimalControlBenchmarks: #308.
  9. Precompile the problems, so that users and tests do not recompile them (later, not a priority): #373.
  10. Restore the full CI matrix (Julia 1.10, macOS, Windows) at the end of the reorganisation: #344.

Decisions

  • Object returned by an OptimalControl problem: a struct (name, ocp, init, metadata) holding the continuous (mathematical) problem, not a discretized one. Discretization is left to the user, through solve (descriptive or explicit mode) or discretize. See #283.
  • Availability in a modeling: deduced from file presence, the single source of truth. See #303.
  • Problem available in OptimalControl only: a sourced reference_objective is enough.
  • Euler in JuMP: explicit at least, implicit too (one more function once schemes are factorised). See #284.
  • Corleone: a proof of concept at the end, as an extension, on one problem. See #308.
  • Branch: no long-lived branch. #303, #304 and #309 are not breaking and go to main on the 0.5 API. The port then goes to main through PRs, with the version set to 0.6.0-beta (as OptimalControl, whose main is 2.2.1-beta) and use_ct_registry: true in the workflows.
What each modeling returns

Rule: each modeling returns the most abstract object it can represent, and takes at retrieval only what it needs to build it.

Modeling Returned object Arguments at retrieval
OptimalControl continuous problem: struct (name, ocp, init, metadata) parameters
JuMP NLP, necessarily discretized grid_size, scheme, JuMP.Model arguments
Corleone (PoC) MTK system and its grids (path constraints are sampled in the constructor) control_grid, shooting_grid, constraint_grid

grid_size and scheme in JuMP use exactly the names and values of OptimalControl.Collocation (:euler, :euler_implicit, :trapeze, :midpoint), so that tests build both NLPs identically.

Checks between modelings
  • Same discretization (JuMP, ADNLP, Exa): NLP equivalence (#284). It also implies the same mathematical problem.
  • Same mathematical problem, different methods (Corleone): evaluate the optimal control found by OptimalControl in the other model (cost, constraint violation), and compare optima with a loose tolerance (#308).
  • Reference: reference_objective (#306).

How to work on this

Each sub-issue is closed by one or a few PRs. Tick the decisions above when taken, and record them in the relevant sub-issue.

主要言語
Julia
スター
13
フォーク
1
平均マージ
3時間 20分
マージ済み PR(30日)
27

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

control-toolbox/OptimalControlProblems.jl のほかの issue

control-toolbox/OptimalControlProblems.jl の issue をすべて見る

似ている issue

Julia の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。