Skip to content

Set aircraft-derived upper bounds on mass and distance states#1055

Draft
bdphilli wants to merge 2 commits intoOpenMDAO:mainfrom
bdphilli:fix-state-bounds-scaling
Draft

Set aircraft-derived upper bounds on mass and distance states#1055
bdphilli wants to merge 2 commits intoOpenMDAO:mainfrom
bdphilli:fix-state-bounds-scaling

Conversation

@bdphilli
Copy link
Copy Markdown
Contributor

When mass_bounds or distance_bounds have None as the upper bound (the default), Dymos sets it to ~1e21. With mass_ref=1e4 and distance_ref=1e6, this creates scaled upper bounds of ~1e17 and ~1e15 respectively, while other design variables have scaled ranges of O(1).

In build_phase(), replace None upper bounds with values derived from aviary_inputs: 2x GROSS_MASS for mass, 2.5x DESIGN_RANGE for distance. This reduces scaled upper bounds to O(10), matching the scale of other design variables.

User-specified bounds are preserved — the override only applies when the upper bound is None.

Addresses #607

bdphilli and others added 2 commits March 28, 2026 13:08
When mass_bounds or distance_bounds have None as the upper bound
(the default), Dymos sets it to ~1e21. With mass_ref=1e4 and
distance_ref=1e6, this creates scaled upper bounds of ~1e17 and
~1e15 respectively, while other design variables have scaled
ranges of O(1).

In build_phase(), replace None upper bounds with values derived
from aviary_inputs: 2x GROSS_MASS for mass, 2.5x DESIGN_RANGE
for distance. This reduces scaled upper bounds to O(10), matching
the scale of other design variables.

User-specified bounds are preserved — the override only applies
when the upper bound is None.

Addresses OpenMDAO#607
@ehariton
Copy link
Copy Markdown
Contributor

ehariton commented Apr 29, 2026

@robfalck , I didn't realize dymos set any constraints if the user specifies there are no bounds to a state. Do you think we'd get easier convergence if we set the bound guesses as Ben suggests? If so, maybe we should we reevaluate all instances where we set bounds to None?

@robfalck
Copy link
Copy Markdown
Contributor

The way some optmizers work is that having a bound value beyond +/- 1E21 or 1E30 (depends on the optimizer), they treat it as "unbounded" and handle it a bit differently internally. I think the default behavior in OpenMDAO should be that bounds of None.

One of the real issues with this is that the scaling forces the upper and lower bounds to cross the "treat this as unbounded" threshold. This is fixed in the autoscaler pull request on OpenMDAO.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants