InfiniteOpt v0.6.0
Breaking changes
NLPExpris dropped in favor ofJuMP.GenericNonlinearExpr@registerhas been replaced withJuMP.@operatormap_nlp_to_asthas been discontinued- Optimizer model API has been replaced with the more general transformation backend API. For modelling, the syntax is largely the same, but accessing methods like
optimizer_model_variablehave been changed totransformation_variable. The old API is still supported via deprecation and users are encouraged to run Julia in deprecation mode to update their code. DomainRestrictionshave been replaced withDomainRestrictionwhich enforces restrictions based on arbitrary Julia functions (similar to parameter functions). Please see the constraint guide in the documentation for details.start_value_functionandset_start_value_functionhave been dropped in favor ofJuMP.start_valueandJuMP.set_start_value.- Semi-infinite variables have been refactored internally to behave more consistently with point variables. The user API remains the same, though bounds and start values can now be specified.
- Point variables inherit domain info from infinite variables in a more general way. Semi-infinite and point variables defined via macros define their own info that overwrites that of the infinite variable. Semi-infinite and point variables defined functionally only modify info if specified via domain modification methods (e.g.,
set_lower_bound,delete_lower_bound). @infinite_parameterno longer supportsDenseAxisArrays andSparseAxisArrays in favor ofArrayto significantly improve performance.Collections.VectorTuplehave been refactored to focus on tuples ofArrays andNumbers.- Core data structures have been modified to simply the code base; however, users are not encouraged work directly with core data objects.
Features
- Trained machine learning models can be embedded via the
InfiniteMathOptAIextension. - Transcribed values can be converted to interpolated functions via the
InfiniteInterpolationsextension. - Semi-infinite variables can now have bounds and start values.
- Higher-order derivatives are now preserved to facilitate more accurate transformations.
- Recursion is removed to handle deeply nested nonlinear expressions without stackoverflow errors
- Non-JuMP models (e.g., ExaModels) can now be interfaced via the new transformation API.
set_parameter_valuenow preserves the backend for efficient resolves.warmstart_backend_start_valuesefficiently warmstarts the backend for resolves.- Support is added for
MOI.Parameter. - New examples have been added to the documentation.
- Misc. bug fixes and documentation improvements.
Merged pull requests:
- Refactor to directly support higher order derivatives (#341) (@pulsipher)
- Fix SigFig Bug (#344) (@pulsipher)
- Improve the Extensibility of Derivative Methods (#345) (@pulsipher)
- Support Expression Restrictions (#348) (@pulsipher)
- Generalize Transformation API (#349) (@pulsipher)
- Backend API Refinements (#351) (@pulsipher)
- Remove
ndarrayKeyword Argument (#356) (@pulsipher) - Use
OrderedDictfor Array Parameter Supports (#357) (@pulsipher) - Allow Non-Vector Input for Infinite Parameter Supports (#358) (@pulsipher)
- Improve Performance of Internal Semi-Infinite Variables (#359) (@pulsipher)
- Fix bug in
restricted_copy(#360) (@pulsipher) - Fix printing test for JuMP v1.23.0 (#361) (@odow)
- Improve Defaults of
JuMP.is_binary,JuMP.is_integer, andJuMP.is_fixed(#365) (@pulsipher) - Use invokelatest after eval to adjust to upcoming julia change (#369) (@Keno)
- Addition of three new examples under optimial control. (#370) (@dnguyen227)
- Fix Deletion of Variable Dependencies (#377) (@pulsipher)
- Update CI Versioning (#378) (@pulsipher)
- Update Optimal Control Example Documentation (#380) (@wenwen0231)
- Add InfiniteInterpolate as an extension (#382) (@wenwen0231)
- CompatHelper: bump compat for DataStructures to 0.19, (keep existing compat) (#385) (@github-actions[bot])
- Map finite parameters to JuMP.Parameters (#387) (@wenwen0231)
- Map parameter functions to JuMP.Parameters (#389) (@wenwen0231)
- Add Extension for MathOptAI (#390) (@pulsipher)
- Properly Handle Parameter Functions as JuMP.Parameters in Measures (#391) (@wenwen0231)
- Updated Versioning (#392) (@pulsipher)
- Clean Up and Simplify Dependence on Infinite Parameters (#393) (@pulsipher)
- Improve Parameter Support (#394) (@pulsipher)
- Add Support for Functions in Variable Domains and Overhaul Domain Restrictions (#395) (@pulsipher)
- Provide an API for Reformulating High Order Derivatives into 1st Order Derivatives (#396) (@pulsipher)
- Remove Parameter Numbers (#397) (@pulsipher)
- Remove Recursion from
map_expression(#398) (@pulsipher) - Prep for v0.6 (#399) (@pulsipher)
Closed issues:
- Cannot Transcribe Scalar Measures/Derivatives of Dependent Infinite Parameters (#56)
- Return Interpolated Value Functions (#82)
- Point Variable Inheritance is Invalidated with Changes to Infinite Variable Info (#148)
- Specify Exclusion Points for Constraints (#167)
- Maintain Higher-Order Derivative Representations (#197)
- Vector-Valued Nonlinear Functions (#229)
- Restrict Infinite Parameters to only use Arrays (#233)
- Allow Functional Bounds on Infinite Variables (#253)
- Support Restrictions on Expressions (#347)
- Can i write the InfiniteOpt's Model to file of nl? (#364)
- [FEATURE] Query expression and parameter function names. (#367)
- Deleting variables does not work when a constraint evaluates a variable at multiple time points (#376)
- Update example documentation (#379)
- Ability for Callback function during optimization run (#383)
- Can't install/precompile InfiniteOpt (#388)