mirror of
https://github.com/ANL-CEEESA/MIPLearn.git
synced 2025-12-09 02:48:52 -06:00
MIPLearn v0.3
This commit is contained in:
53
CHANGELOG.md
53
CHANGELOG.md
@@ -1,45 +1,34 @@
|
||||
# MIPLearn: Changelog
|
||||
# Changelog
|
||||
|
||||
## [0.2.0] - [Unreleased]
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.3.0] - 2023-06-08
|
||||
|
||||
This is a complete rewrite of the original prototype package, with an entirely new API, focused on performance, scalability and flexibility.
|
||||
|
||||
### Added
|
||||
|
||||
- **Added two new machine learning components:**
|
||||
- Added `StaticLazyConstraintComponent`, which allows the user to mark some constraints in the formulation as lazy, instead of constructing them in a callback. ML predicts which static lazy constraints should be kept in the formulation, and which should be removed.
|
||||
- Added `UserCutComponents`, which predicts which user cuts should be generated and added to the formulation as constraints ahead-of-time, before solving the MIP.
|
||||
- **Added support to additional MILP solvers:**
|
||||
- Added support for CPLEX and XPRESS, through the Pyomo modeling language, in addition to (existing) Gurobi. The solver classes are named `CplexPyomoSolver`, `XpressPyomoSolver` and `GurobiPyomoSolver`.
|
||||
- Added support for Gurobi without any modeling language. The solver class is named `GurobiSolver`. In this case, `instance.to_model` should return ` gp.Model` object.
|
||||
- Added support to direct MPS files, produced externally, through the `GurobiSolver` class mentioned above.
|
||||
- **Added dynamic thresholds:**
|
||||
- In previous versions of the package, it was necessary to manually adjust component aggressiveness to reach a desired precision/recall. This can now be done automatically with `MinProbabilityThreshold`, `MinPrecisionThreshold` and `MinRecallThreshold`.
|
||||
- **Reduced memory requirements:**
|
||||
- Previous versions of the package required all training instances to be kept in memory at all times, which was prohibitive for large-scale problems. It is now possible to store instances in file until they are needed, using `PickledGzInstance`.
|
||||
- **Refactoring:**
|
||||
- Added static types to all classes (with mypy).
|
||||
- Add support for Python/Gurobipy and Julia/JuMP, in addition to the existing Python/Pyomo interface.
|
||||
- Add six new random instance generators (bin packing, capacitated p-median, set cover, set packing, unit commitment, vertex cover), in addition to the three existing generators (multiknapsack, stable set, tsp).
|
||||
- Collect some additional raw training data (e.g. basis status, reduced costs, etc)
|
||||
- Add new primal solution ML strategies (memorizing, independent vars and joint vars)
|
||||
- Add new primal solution actions (set warm start, fix variables, enforce proximity)
|
||||
- Add runnable tutorials and user guides to the documentation.
|
||||
|
||||
### Changed
|
||||
|
||||
- Variables are now referenced by their names, instead of tuples `(var_name, index)`. This change was required to improve the compatibility with modeling languages other than Pyomo, which do not follow this convention. For performance reasons, the functions `get_variable_features` and `get_variable_categories` should now return a dictionary containing categories and features for all relevant variables. Previously, MIPLearn had to perform two function calls per variable, which was too slow for very large models.
|
||||
- Internal solvers must now be specified as objects, instead of strings. For example,
|
||||
```python
|
||||
solver = LearningSolver(
|
||||
solver=GurobiPyomoSolver(
|
||||
params={
|
||||
"TimeLimit": 300,
|
||||
"Threads": 4,
|
||||
}
|
||||
)
|
||||
)
|
||||
```
|
||||
- `LazyConstraintComponent` has been renamed to `DynamicLazyConstraintsComponent`.
|
||||
- Categories, lazy constraints and cutting plane identifiers must now be strings, instead `Hashable`. This change was required for compatibility with HDF5 data format.
|
||||
- To support large-scale problems and datasets, switch from an in-memory architecture to a file-based architecture, using HDF5 files.
|
||||
- To accelerate development cycle, split training data collection from feature extraction.
|
||||
|
||||
### Removed
|
||||
|
||||
- Temporarily removed the experimental `BranchPriorityComponent`. This component will be re-added in the Julia version of the package.
|
||||
- Removed `solver.add` method, previously used to add components to an existing solver. Use the constructor `LearningSolver(components=[...])` instead.
|
||||
- Temporarily remove ML strategies for lazy constraints
|
||||
- Remove benchmarks from documentation. These will be published in a separate paper.
|
||||
|
||||
|
||||
## [0.1.0] - 2020-11-23
|
||||
|
||||
- Initial public release
|
||||
- Initial public release
|
||||
Reference in New Issue
Block a user