Version History¶
This page outlines changes from each release.
v1.0.0 (April 20, 2020)¶
New Features¶
Added workspaces; for more information, see Workspaces in User Guide and Efficiency Analysis example
Added package configurations
Added abstract actions that allow server-side operations. Highlights include:
Added structure decorators for better control of submissions
Changes¶
Refactored the entire package; sasoptpy now has core, abstract, interface, session, and util directories
Experimental RESTful API was dropped
get_obj_by_name function was removed
lso solver was renamed blackbox
Because of the use of literal strings (PEP 498), only Python 3.6 or later versions are supported
Bug Fixes¶
Fixed: Arithmetic operations with powers are generating incorrect results
Fixed: Variable groups with space in their index are not getting values
Fixed: Constraints without directions do not produce an error
Fixed: Documentation does not mention conda-forge library requirement
Fixed: Single-dimensional parameters are hard to access
v0.2.1 (February 26, 2019)¶
New Features¶
Support for evaluating nonlinear expressions is added, see
Expression.get_value()
andutils._evaluate()
Support for multiple objectives is added for LSO solver, see
Model.set_objective()
and Multiobjective exampleSupport for spaces inside variable indices is added
Experimental RESTful API is added
Changes¶
Dictionaries inside components are replaced with ordered dictionaries to preserve deterministic behavior
Math operators are added into the keys of linear coefficient dictionaries
Some iterators are rewritten by using the yield keyword for performance
key_name and col_names parameters are added into
read_table()
Bug Fixes¶
Fixed: Using a single variable as an objective is producing incorrect input
Fixed:
Expression.get_value()
fails to evaluate expressions with operatorsFixed:
Expression.add()
overrides operators in some instancesFixed: Expressions with same components but different operators get summed incorrectly
Fixed: New version of Viya complains about
pandas.DataFrame
column typesSyntax fixes for PEP 8 compliance
Notes¶
A Jupyter notebook example of the Diet Problem is added
A new example is added to show usage of experimental RESTful API
Unit tests are added for development repository
CI/CD integration is added for the development repository on Gitlab
Generated models can be checked by using the hash values inside tests.responses
v0.2.0 (July 30, 2018)¶
New Features¶
Support for the new runOptmodel CAS action is added
Nonlinear optimization model building support is added for both SAS 9.4 and SAS Viya solvers
Abstract model building support is added when using SAS Viya solvers
New object types,
Set
,SetIterator
,Parameter
,ParameterValue
,ImplicitVar
,ExpressionDict
, andStatement
are added for abstract model buildingModel.to_optmodel()
method is added for exporting model objects into PROC OPTMODEL code as a stringWrapper functions
read_table()
andread_data()
are added to read CASTable and DataFrame objects into the modelsMath function wrappers are added
_expr
and_defn
methods are added to all object types for producing OPTMODEL expression and definitionsMultiple solutions are now returned when using solveMilp action and can be retrieved by using
Model.get_solution()
methodModel.get_variable_value()
is added to get solution values of abstract variables
Changes¶
Variable and constraint naming schemes are replaced with OPTMODEL equivalent versions
Variables and constraints now preserve the order in which they are inserted to the problem
Model.to_frame()
method is updated to reflect changes to VariableGroup and ConstraintGroup orderingsTwo solve methods, solve_on_cas and solve_on_viya are merged into
Model.solve()
Model.solve()
method checks the available CAS actions and uses the runOptmodel action whenever possibleAs part of the merging process,
lp
andmilp
arguments are replaced withoptions
argument inModel.solve()
andModel.to_optmodel()
An optional argument
frame
is added toModel.solve()
for forcing use of MPS mode and solveLp-solveMilp actionsMinor changes are applied to __str__ and __repr__ methods
Creation indices for objects are being kept by using the return of the
register_name()
functionObjective constant values are now being passed by using new CAS action arguments when posssible
A linearity check is added for models
Test folder is added to the repository
Bug Fixes¶
Nondeterministic behavior when generating MPS files is fixed.
Notes¶
Abstract and nonlinear models can be solved on Viya only if the runOptmodel action is available on the CAS server.
Three new examples are added which demonstrate abstract model building.
Some minor changes are applied to the existing examples.
v0.1.2 (April 24, 2018)¶
New Features¶
As an experimental feature, sasoptpy now supports SASPy connections
Model.solve_local()
method is added for solving optimization problems by using SAS 9.4 installationsModel.drop_variable()
,Model.drop_variables()
,Model.drop_constraint()
,Model.drop_constraints()
methods are addedModel.get_constraint()
andModel.get_constraints()
methods are added to retrieveConstraint
objects in a modelModel.get_variables()
method is added_dual
attribute is added to theExpression
objectsVariable.get_dual()
andConstraint.get_dual()
methods are addedExpression.set_name()
method is added
Changes¶
Session argument accepts
saspy.SASsession
objectsVariableGroup.mult()
method now supportspandas.DataFrame
Type check for the
Model.set_session()
is removed to support new session typesProblem and solution summaries are not being printed by default anymore, see
Model.get_problem_summary()
andModel.get_solution_summary()
The default behavior of dropping the table after each solve is changed, but can be controlled with the
drop
argument of theModel.solve()
method
Bug Fixes¶
Fixed: Variables do not appear in MPS files if they are not used in the model
Fixed:
Model.solve()
primalin argument does not pass into options
Notes¶
A .gitignore file is added to the repository.
A new example is added: Decentralization. Both CAS and SAS versions of the new example are added.
There is a known issue with the nondeterministic behavior when creating MPS tables. This will be fixed with a hotfix after the release.
A new option (no-ex) is added to makedocs script for skipping examples when building docs.
v0.1.1 (February 26, 2018)¶
New Features¶
Initial value argument ‘init’ is added for
Variable
objectsVariable.set_init()
method is added for variablesInitial value option ‘primalin’ is added to
Model.solve()
methodTable name argument ‘name’, table drop option ‘drop’, and replace option ‘replace’ are added to
Model.solve()
methodDecomposition block implementation is rewritten; block numbers does not need to be consecutive and ordered
Model.upload_user_blocks()
VariableGroup.get_name()
andConstraintGroup.get_name()
methods are addedModel.test_session()
method is added for checking if session is defined for modelsexpr_sum()
function is added for faster summation ofExpression
objects
Changes¶
methods.py is renamed to utils.py
Bug Fixes¶
Fixed: Crash in VG and CG when a key not in the list is called
Fixed: get_value of pandas is depreceated
Fixed: Variables can be set as temporary expressions
Fixed: Ordering in
get_solution_table()
is incorrect for multiple entries
v0.1.0 (December 22, 2017)¶
Initial release