Repository navigation
Conversation
tools/references: each known solution keeps the solve that represents it (strict before acceptable, then the smallest violation, then the smallest objective) with its modeling, modeler, solver and every option, status, iterations, time, violation, and the environment of its run. The results must hold the columns and the environment file of #412. References: AbstractReference, NumericalReference (a known solution and how it was obtained), AnalyticReference (the solution of the continuous problem); references, best_reference, analytic_reference, and objective(ref). A reference file written before #409 still loads, without references, so that the tool can write it again; the consistency tests fail on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#409) From the crons dispatched on main after #412: https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387105573 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387108959 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387112175 https://github.com/control-toolbox/OptimalControlProblems.jl/actions/runs/42387115100 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
5 tasks
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ocots
marked this pull request as ready for review
November 7, 2026 22:20
Conflict in src/README.md: both sides extend the submodule table (typed references in References, the problem fingerprint in Catalogue).
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #409 (part 2 of 2; part 1 was #412). Stacked on #421 (#413, split of
src): the base of this PR ischore/413-src-submodules; once #421 is merged, the base becomesmain. Conventions: ct-conventions v0.10.0 (TYP4,TYP7,TST3,MOD6), ct-agents v0.4.0.Plan
Goal. Every known solution says how it was obtained, as data generated from the cron results (never by hand), and the package exposes the references as typed values (#409, decisions of 2026-11-07: never by hand, no trajectories,
acceptablesolves allowed, analytic references separate).Steps.
tools/references/references.jl: read<report>-environment.tomlnext to each results file; refuse results without the columns of test: record how each solve was configured and the environment of the run (#409, part 1) #412; choose the representative of each solution (strict before acceptable, then smallest violation, then smallest objective, then a stable tie-break); write its tablereference(modeling, configuration, modeler, solver, options, status, iterations, time, violation, platform, run, commit, Julia, OS, architecture, CPU, package versions).valueand each solution'sobjectiveare those of the representative: a solve that can be redone.src/References/types.jl:AbstractReferencewith the contractobjective(ref)(TYP4:NotImplementedon the abstract type),NumericalReference,AnalyticReference(TYP7: different data).src/References/objectives.jl: the loader builds theNumericalReferences of each scheme (fieldreferences); APIreferences(p; grid_size, scheme),best_reference,analytic_reference(p, parameters); exported byReferences, reached asOptimalControlProblems.references(…)(the package exports are unchanged, [Dev] Split src into submodules (ct-conventions MOD1, MOD2), keeping the public exports #413).mainafter test: record how each solve was configured and the environment of the run (#409, part 1) #412 (run ids in [Metadata] Reference solutions with how they were obtained: typed references and API #409).tools/references/README.md,src/README.md.Done when (#409)
mainafter PR 1, run ids recorded in [Metadata] Reference solutions with how they were obtained: typed references and API #409.referencetable; the files are generated (consistency test: generated header, every solution has its reference, objectives match).AbstractReference,AnalyticReference,NumericalReferenceand the API, tested;reference_objective,solution_kind,reference_solution_dataunchanged for their callers.Evidence
Regeneration:
The API:
The second known solution of
moonlander(0.961844, the case of #367) is theacceptablesolve, recorded withstatus = "acceptable".Tests (
Pkg.test(test_args=["core"]), macOS, Julia 1.12.7):core | 1249 pass, 1 broken (existing);reference values | 161,reference objectivesgreen.The checks fail on broken cases.
beam.tomlfrommain):Restored: all green.
Choices
SAME_SOLUTION): the reference is then a solve that exists and can be redone. Reference objectives move accordingly within 1e-5 relative (e.g.beam8.88928162 → 8.88928181).update.jlloads the package, so a loader that refused such files would block their regeneration. The consistency test fails on it instead.objective(ref)extendsCTModels.Components.objective, the function the package already exports asobjective: one function for solutions and references, no name clash with OptimalControl. Not piracy: the methods are for our types.optionsandversionsareNamedTuples with sorted keys (the TOML tables are unordered), so equal tables give equal values.machine-level fields there.Labels
run ci github-runner(scope: every reference file changed, so every environment),run documentation(the problem pages read the reference files).🤖 Generated with Claude Code