[Dev] Expose the duals of the JuMP path, boundary and box constraints, aligned with signs.md
Mantenedores costumam responder em até 1 dia
@ocots já está trabalhando nisso.
Desde 8/11/2026.
Avaliação
Esta issue ainda não foi avaliada.
Descrição
Context
#326 aligns the sign of the JuMP costate with OptimalControl (ct-conventions rules/signs.md, SGN1–SGN6, v0.11.0): the normalized multiplier of a constraint row is -JuMP.dual(ref), for a Min and a Max model alike. Today only the dynamics constraints are exposed — their duals are read as the costate. The duals of the other constraints the JuMP models create exist but are never read:
- path constraints:
lower <= g(x, u, v, t) <= upperrows, built at every node; - boundary constraints:
lower <= g(x0, xf, v) <= upperrows; - box bounds on the state, control and variable components (
LowerBoundRef/UpperBoundRef).
All of them are concatenated in model[:constraints] (dynamics, path, boundary); build.jl would have to keep the refs per group to expose them.
What to do (later)
- Expose the duals of the path and boundary constraints, and of the box bounds, normalized as the costate (
-JuMP.dual). - Conventions to apply (
rules/signs.mdv0.11.0):- SGN3: a two-sided row
l ≤ c ≤ ucarries one signed multipliery = μU − μL(≥ 0upper active,≤ 0lower active) — a JuMPIntervalconstraint gives one signed dual, mapped by-dual; - SGN2: for a box bound or a single-bounded row, the dual is the multiplier of that side,
≥ 0— i.e.-dual(LowerBoundRef)/-dual(UpperBoundRef)give the nonnegative per-side values; - SGN5: the same constraint declared as a path constraint or as a box must have the same dual — the comparison tests should check it;
- the scale of a time-dependent dual (density vs raw multiplier) is free in SGN5 — CTDirect divides the path multipliers by
h; choose the same here for consistency.
- SGN3: a two-sided row
- Follow the ecosystem design for reading duals by constraint label (
dual(sol, model, label)): CTModels.jl#105, CTFlows.jl#314 and discussion #312 — this issue waits for it, as #326 did for the costate.
Tests
Extend the sign tests of #326 (two layers, SGN6): the normalized duals must satisfy ∇F + Jᵀy = 0 on hand-written JuMP problems with known multipliers — active lower and upper sides of a two-sided row, bounds of variables, min f vs max -f (SGN1) — and match the OptimalControl duals of the same problem where both are exposed.
Related
#326, #170, control-toolbox/CTDirect.jl#405, control-toolbox/CTModels.jl#105.
- Linguagem predominante
- Julia
- Estrelas
- 13
- Forks
- 1
- Merge médio
- 3h 33min
- PRs com merge (30d)
- 55
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de control-toolbox/OptimalControlProblems.jl
-
[Cron/Doc] ModelingToolkit convergence cron, trajectories, and documentation (#308)Talvez já em andamento @ocots assumiu hoje. Abertadocumentation feature
control-toolbox/OptimalControlProblems.jl#439 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Tests] Corleone solve helper and ModelingToolkit test suite (smoke, equivalence, reference solution) (#308)Talvez já em andamento @ocots assumiu hoje. Abertafeature
control-toolbox/OptimalControlProblems.jl#438 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Problems] ModelingToolkitBackend, extension ModelingToolkitModels, and continuous bryson_denham (#308)Talvez já em andamento @ocots assumiu hoje. Abertafeature
control-toolbox/OptimalControlProblems.jl#437 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
cron-convergence
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 32/100
control-toolbox/OptimalControlProblems.jl#436 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
-
[Cron] cron-failureAbertacron-failure
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
control-toolbox/OptimalControlProblems.jl#435 · 5 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de control-toolbox/OptimalControlProblems.jl
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 73/100
Mantenedores costumam responder em até 1 dia
-
lux
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
JuliaGraphs/GraphNeuralNetworks.jl#732 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia
-
erfinv(::Float16) and erfcinv(::Float16) are wrong for abs(x) <= 0.75 (erfinv(Float16(0)) == 0.2201)Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
JuliaMath/SpecialFunctions.jl#571 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100