OpenMDAO v0.10.0 Release Notes
- User can select .gradient_options.fd_form="complex_step" to use complex step instead of regular finite difference. This performs complex step across the whole model.
- User can set .gradient_options.derivative_direction="forward" or "adjoint" to force it to use one method or the other
- Users can now manually specify FD blocks via .gradient_options.fd_blocks
- Several major speed improvements throughout the framework. Benchmark problem in this post (http://openmdao.org/forum/questions/1191/openmdao-overhead-cost) is now down to about 4 .2 seconds.
- New interfaces for CaseIteratorDriver, DoeDriver, NeigborhoodDOEDriver, ExpectedImprovement, MultiObjectiveExpectedImprovement, ParetoFilterComponent, MetaModel. NOT Backwards compatible
- New AdaptiveSampleDriver added to help with Efficient Global Optimiziation
- Updated (and hugely simplified) Efficient Global Optimization example cases
- Improved ParetoFilter handeling of constrained problems
- Dramatically improved MultiObjectiveEGO performance
- CaseRecorders moved up into assembly (removed from driver). Case recording moved down into workflow.
- High/low values are no longer required for add_parameter calls to solver.
- Derivative calculation bug with MDF on scalable problem
- Fix openmdao installer for OSX 10.9 with clang compiler
- Improved testing for response surface model
- fs_step bug related to pseudocomponents in parameter groups
- Array parameters and constraints now work properly in FixedPointIterator
- Failed cases no longer stop the CSV case recorder
- Can now call replace on an interface slot even if it's empty
- Invalidation bug causing DOEdriver to run twice in a solver workflow is fixed
- Adjoint derivatives are now only used if they are defined (regardless of how many quantities of interest there are)
Major API Changes
So we took lazy evaluation out. Its original intended purpose was still a good one, and we wanted to keep the behavior around in some form, so we now scan the data dependency graph one time, just before execution. We look at all the components in the different workflows, and anything that is upstream of components but not in any workflows, gets added to a special initialization group that gets run one (and only one) time at the start of the execution. This means that OpenMDAO still tries to make sure no components are ever run unless all of their upstream components have run first. But it now only enforces this behavior in the context of .run(). If you call a .run method, it will just execute with whatever inputs it has at that time and won't walk backwards up the graph to run anything else first.
- The CaseIteratorDriver and DOEDriver interface has been completely reworked to make it easier and simpler to use. You now tell it exactly which parameters and quantities of interest it should care about, and then it collects the results of the cases into arrays of data matching those quantities. These arrays can then be passed around to other components, like MetaModel. The new interface is not backwards compatible, but the change is significantly for the better in terms of simplicity and readability.
- Lazy Evaluation has been removed from the framework. This change should not directly affect any running models, so we're calling it "backwards compatible." Lazy evaluation happened if you ran a component in an assembly somewhere, but some other upstream component had not yet run. Then the framework would walk backwards up the dependency graph to find those upstream components and execute them first. This feature made sure that no components ever ran without fully valid inputs from all upstream components. But it was also terribly complex to implement and added a significant source of bugs in the derivatives system.