Releases: airbus/discrete-optimization
v0.5.0
This is a breaking API release, where #328 had huge impact on the use of the library.
The PR details the main breaking changes that concerns the name of packages, modules, class. Everything is now realigned to a convention
As described in the PR :
- We use camel case for classes
- For each problem,
- the solvers are stored in a subpackage "solvers" (was sometimes "solver"),
in a module with a short name "{technology}" without adding
"solver" or the problem name - the base solver class is also in solvers, accessible directly via
discrete_optimization.{problem}.solvers
, - the solvers_map is accessible in
discrete_optimization.{problem}.solvers_map
, - the solver class name follow the logic
{Technology}{Problem}Solver
, - the problem class name is
{Problem}Problem
, - the solution class name is
{Problem}Solution
,
- the solvers are stored in a subpackage "solvers" (was sometimes "solver"),
Raise issue if any need for adaptation of code or undesired effect.
Main new adding : didppy usage on most problems implemented. We thank the developers of this lib for the support.
What's Changed
- Adapt pickup-vrp lp iterative solver with ortools/mathopt by @nhuet in #320
- Fix wrong implementation of the capacity check of the facility problem. by @g-poveda in #322
- Minor changes in fjsp solvers by @g-poveda in #323
- Fix vrp callback in solver ortools by @g-poveda in #324
- New solvers based on dynamic programming and the didppy library by @g-poveda in #321
- Adding example on solving rcpsp with calendar by @g-poveda in #325
- Bug fix by @g-poveda in #326
- Full renaming (package/module/class) by @nhuet in #328
- Correct rcpsp solvers_map module name by @nhuet in #329
- Avoid warning at each iteration of lns about subsolver time_limit by @nhuet in #331
- Github runner macos-12 replaced by macos-13 by @nhuet in #330
- TSP with ortools update by @g-poveda in #332
- Implement warmstart for DP solver/models by @g-poveda in #333
- Avoid module names which match a known library name by @nhuet in #334
- Rename test_ortools into test_ortools_routing by @nhuet in #336
- Test use of callbacks with dp solvers by @nhuet in #337
- Detect by introspection which arguments are licit for dp solvers by @nhuet in #338
- Fix lns init phase + constraint handler mix for minizinc subsolvers by @nhuet in #335
- Readme update by @g-poveda in #340
- Update test with callback for rcpsp/cp_mzn that randomly failed by @nhuet in #341
- Use an internal indexing of nodes to allow CPM to work with mixed nodes by @nhuet in #339
- Handle failed introspection on the dp solvers by @g-poveda in #342
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
- Use minizinc 2.8.5 binary in tests by @nhuet in #284
- Harmonize time_limit/timeout/... arguments by @nhuet in #278
- Stop limiting ortools for windows tests by @nhuet in #285
- Fix imports in examples by @nhuet in #287
- Add a tutorial for lexicographic optimization by @nhuet in #280
- Remove limit on nb of solutions in parameters for milp and cp by @nhuet in #288
- Test on python 3.12 by @nhuet in #286
- Update test with callback by @nhuet in #290
- Introduce SubBrickHyperparameter and ListHyperparameter in tutorials by @nhuet in #283
- Add QAOA and VQE solver for the problem Facility + add positibily to personnalized ansatz for QAOA and VQE by @ArmandGautier in #291
- Drop support for python 3.8 by @nhuet in #292
- Correct use of time_limit by @nhuet in #295
- Fix quantum solvers
__init__()
andinit_model()
by @nhuet in #293 - CPSat solver for multiskill rcpsp by @g-poveda in #294
- Stop using deprecated/removed arguments from qiskit-ibm-runtime by @nhuet in #297
- Introduce a milp solver base class using ortools/mathopt api by @nhuet in #289
- Adding redundant constraints CPSAT Multiskill Rcpsp by @g-poveda in #296
- Bugs in rcpsp multiskill calendars utils and cpsat solver by @g-poveda in #299
- Adding basic example of mathopt for knapsack by @g-poveda in #300
- Optuna example for MSRCPSP by @g-poveda in #301
- Changed the unit test testing by @g-poveda in #302
- Rename NewFixedSizedIntervalVar to NewFixedSizeIntervalVar to follow ortools release by @g-poveda in #304
- Job shop problem integration by @g-poveda in #303
- Unify set_warm_start for lp solvers (gurobi and ortools.mathopt) by @nhuet in #298
- Change kamis_available definition in optuna example by @nhuet in #306
- Stop checking minzinc binary at discrete_optimization import by @nhuet in #311
- Add status to lp solvers (and default one to all solvers) by @nhuet in #308
- JSP dev by @g-poveda in #312
- Update minizinc version in notebooks and binder env by @nhuet in #314
- Update lexico api by @nhuet in #315
- Unify lp solvers
init_model()
methods by @nhuet in #305 - Extract
set_warm_start
stuff from init_model in rcpsp milp solvers by @nhuet in #307 - Add constraint handlers for mathopt solvers by @nhuet in #309
- Rename "warmstart" boolean for cpsat coloring solver into "do_warmstart" by @nhuet in #316
- TSP updates by @g-poveda in #313
- Flexible job shop problem implementation by @g-poveda in #310
- Remove dependency in python-mip by @nhuet in #317
- Update colab installation in notebooks by @nhuet in #318
- Update solvers_map's by @nhuet in #319
Full Changelog: v0.3.2...v0.4.0
v0.3.2
What's Changed
- add optuna example and two new solvers for mis problem by @ArmandGautier in #216
- Unify lns solvers api by @nhuet in #214
- Modify the way to use quantum simulator to have more general function (no need to separe simulation and real device anymore) by @ArmandGautier in #219
- Allow SubBrickKwargsHyperparameter to directly specify a subbrick class by @nhuet in #218
- Allow hyperparameter definition dependending on other hyperparameters by @nhuet in #220
- Fix issue with subsolvers whose hyperparameters share names but not types by @nhuet in #221
- Make use of
depends_on
to improve existing solvers hyperparameters definition by @nhuet in #222 - Convert maximum_independent_set into a findable subpackage by @nhuet in #223
- Remove unused imports by @nhuet in #224
- Update ParamsConstraintBuilder hyperparameters by @nhuet in #225
- add a step parameter to the class IntegerHyperparameter by @ArmandGautier in #226
- Add Optuna utilities to generate and run studies on single problem instance and multiple problem instances by @nhuet in #227
- Replace test for timed pruner with timed optuna callback by @nhuet in #228
- Allow GPHH solvers to not define training_domains by @nhuet in #229
- Add possibility of defining subchoices for EnumHyperparameter by @nhuet in #230
- More robust satisfy function for rcpsp by @g-poveda in #231
- More precise solver and hyperparameters settings to handle missing gurobi solver/licence by @g-poveda in #232
- Make qiskit an optional dependency by @nhuet in #234
- Prepare compatibility with numpy 2.0 by @nhuet in #238
- Add possibility to specify labels for CategoricalHyperparameter by @nhuet in #235
- Clean pyproject.toml by @nhuet in #237
- Add log and step attributes to integer and float hyperparameter by @nhuet in #239
- Correct initialisation of get_edges_for_vehicle() in GPDP problem by @g-poveda in #241
- Add "name_in_kwargs" attribute to hyperparameters by @nhuet in #240
- Add quantum solvers for the coloring problem by @ArmandGautier in #236
- Add possibility to suggest bounds of a float hyperparameter by @nhuet in #242
- Add dynamically hyperparameters to a solver class in an optuna study by @nhuet in #243
- Add possibility to finetune ortools-cpsat solvers by @nhuet in #244
- Simplification of ResultStorage api by @nhuet in #246
- Fix lns solve() and unify contraint handlers api by @nhuet in #248
- Fix use of
time_limit_iter0
in LNS_CP by @nhuet in #250 - Implement an ortools-cpsat based lns solver by @nhuet in #245
- Avoid random crash in test_cp_rcp by @nhuet in #252
- Make ConstraintHandlerMix more generic by @nhuet in #253
- add quantum solvers for tsp2Dmodel problem by @ArmandGautier in #247
- Implement lns solver for maximum independent set problem by @nhuet in #251
- Example script for MIS by @g-poveda in #254
- add general class solvers for QAOA and VQE, can be use for any DO problem with a gurobi model. + quantum solvers for the knapsack problem by @ArmandGautier in #255
- Implement lexicographic optimization by @nhuet in #249
- New solver added for maximum independent set by @g-poveda in #256
- Lexico tools update by @g-poveda in #257
- Cpsat based solver for traveling saleman problem by @g-poveda in #258
- CPSat solver for vrp problem by @g-poveda in #259
- LNS with cpsat for the coloring graph problem by @g-poveda in #261
- Improve optuna utils by @nhuet in #263
- Refactor SubBrickHyperparameter by @nhuet in #260
- Implement ListHyperparameter, a variable list of hyperparameters by @nhuet in #262
- Add hyperparameters from MinizincCPSolver to ColoringCP by @nhuet in #266
- Fix bug in cpsat vrp model by @g-poveda in #267
- Simplify
LargeNeighborhoodSearchScheduling.__init__()
by @nhuet in #265 - Store CPSolver in the OrtoolsCPSatSolver by @g-poveda in #268
- Add WarmstartMixin for solvers which can start from an initial solution by @nhuet in #264
- Drop trials with same parameters as others by failing them by @nhuet in #271
- Implement a sequential metasolver by @nhuet in #269
- Add possibility in sequential metasolver to customize kwargs using previous solution by @nhuet in #270
- List without replacement of categorical or subbrick hyperparameters by @nhuet in #272
- Improve
SubBrickHyperparmeter.suggest_hyperparameter_with_optuna()
by @nhuet in #273 - Unit test change for vrp cpsat by @g-poveda in #274
- Update fetching of IMOPSE datasets by @nhuet in #276
- Add a unit factor when reporting time with optuna callback by @nhuet in #277
- Add hyperparameters to SequentialMetasolver by @nhuet in #275
- Update and fix notebooks by @nhuet in #279
- add ansatz as class variable for QAOA and VQE algorithms by @ArmandGautier in #281
- Add executed_ansatz variable to QAOA and VQE solvers by @ArmandGautier in #282
Full Changelog: v0.3.1...v0.3.2
v0.3.1
What's Changed
- Update hyperparameters for all LNS CP solvers by @nhuet in #206
- Enable callbacks for LS_RCPSP_Solver by @nhuet in #207
- Freeze ortools for windows tests by @nhuet in #208
- Add hyperparameters to rcpsp solvers by @g-poveda in #210
- Add maximum independent set problem and solvers by @ArmandGautier in #209
- Adapted the colormap usage in the different plot functions by @g-poveda in #211
- Minor change on hyperparam for ga solver by @g-poveda in #212
- Skip tests using python-mip on macos arm64 by @nhuet in #213
New Contributors
- @ArmandGautier made their first contribution in #209
Full Changelog: v0.3.0...v0.3.1
v0.3.0
What's Changed
- Squash gh-pages into a single commit when deploying doc by @nhuet in #138
- Update list of binderhubs by @nhuet in #139
- Minor fixes and refactoring on local search and genetic algorithms by @nhuet in #141
- New solver for RCPSP models by @g-poveda in #142
- Fix update-doc-versions job by @nhuet in #143
- Increase minimal version of python to >=3.8 by @nhuet in #145
- Update ortools solvers by @nhuet in #144
- Adding VRP examples and test + update routing examples by @g-poveda in #146
- Update github actions to use node 20 instead of node 16 by @nhuet in #147
- Add callbacks in
SolverDO.solve()
by @nhuet in #148 - Add callbacks to pickup_vrp ortools solver by @nhuet in #149
- Increase timeout to avoid random errors in tests on github runners by @nhuet in #152
- New solver development for RCPSP and some fix by @g-poveda in #153
- Add SolverDO.init() and ._init_model() by @nhuet in #154
- Fix parameter usage in greedy coloring so that the code actually works by @g-poveda in #155
- Handle missing distance value from the dictionnary of distance in GPDP problem by @g-poveda in #158
- Refactor ortools cp-sat based solvers by @nhuet in #151
- Fix problem of LargeNeighborhoodSearchRCPSP solver by @g-poveda in #159
- Hyperparameters optimization with Optuna by @nhuet in #150
- Adding CPSat solver for graph coloring problem by @g-poveda in #160
- Fix ortools-cpsat-based solver when using several workers by @nhuet in #163
- Update optuna full example by @nhuet in #164
- Put in common
MilpSolver.retrieve_solutions()
by @nhuet in #162 - Adding CPSat solver for coloring and new optuna example by @g-poveda in #165
- Fix corner case of cpsat encoding by @g-poveda in #166
- Fix retrieve_solutions() for milp solvers by @nhuet in #167
- Adding objective function logger callback by @g-poveda in #161
- Implement callbacks integration for gurobi solvers by @nhuet in #168
- Implement callbacks for ASP clingo solvers by @nhuet in #169
- Knapsack solver hyperparameters by @g-poveda in #170
- Adding kwargs in constructor function of CPSatSolver of Rcpsp by @g-poveda in #172
- Fix linting issue PR172 by @g-poveda in #173
- Hyperparameters improvements and refactoring by @nhuet in #174
- Update solvers to make them use
complete_with_default_hyperparameters
by @nhuet in #175 - Handle subsolvers hyperparameters in knapsack decomposition solver by @nhuet in #176
- Move binder environment into a subdirectory of main branch by @nhuet in #177
- Adding hyperparams for facility solvers by @g-poveda in #171
- Update Knapsack solver and optuna examples by @g-poveda in #178
- Fix cpmpy example by @nhuet in #179
- Implement callbacks for lns solvers by @nhuet in #181
- Implement callbacks for knapsack decomposed solver by @nhuet in #182
- Fix CategoricalHyperparameter.suggest_with_optuna() by @nhuet in #184
- Add colab links for notebooks by @nhuet in #185
- Add a basic content to "getting started" doc page. by @nhuet in #188
- Add a notebooks explaining callbacks usage by @nhuet in #189
- Implement callbacks for iterative pickup-vrp milp solvers by @nhuet in #183
- Fix optuna callback by @nhuet in #190
- Update Hyperparams for coloring solver by @g-poveda in #192
- Implement callbacks for minizinc-based solvers by @nhuet in #187
- Avoid having to install minizinc to build the doc by @nhuet in #193
- Modified parse_file function to include the possibility to read in patterson rcpsp files by @derhendrik in #196
- Use time instead of number of iteration to display and/or prune the trials with optuna by @nhuet in #194
- Fetch datasets RG30 and RG300 from solutionsupdate.ugent.be and use them in tests by @nhuet in #197
- Fix github actions with macos-latest by @nhuet in #199
- Make easier hyperparameters definition for LNS solvers by @nhuet in #195
- Fix binder build trigger for releases by @nhuet in #200
- Add optuna tutorial by @nhuet in #198
- Clean test workflow matrix by @nhuet in #201
- Fix some issues in preparation for python 3.12 support by @nhuet in #203
- Update library metadata by @nhuet in #204
- Remove unnecessary assert that could randomly fail by @nhuet in #205
New Contributors
- @derhendrik made their first contribution in #196
Full Changelog: v0.2.3...v0.3.0
v0.2.3
What's Changed
- Fix typos in minizinc tip by @nhuet in #84
- Make docs/README.md point to contributing page by @nhuet in #86
- Cleaner integration of model and data MSPSP-Instlib by @g-poveda in #87
- New attribute in CPSolvers : status_solver by @g-poveda in #89
- MSLIB (+ polishing MSPSP) integration by @g-poveda in #90
- [Doc] Fix typo in contributing page by @nhuet in #91
- [Doc ]Remove newlines at the end of version string coming from git by @nhuet in #92
- [Gihub actions] Fix pip cache key by @nhuet in #93
- Robustify create-binder-env job by @nhuet in #94
- Fix mypy issues in knapsack by @nhuet in #95
- Put common tools for ghh in a separate file by @nhuet in #101
- Remove pytest slow marker not relevant anymore by @nhuet in #96
- Make mypy stricter by @nhuet in #97
- Update dependencies to ease proper typing by @nhuet in #98
- Fix generic_tools for stricter mypy by @nhuet in #99
- Fix issues with stricter mypy in coloring by @nhuet in #100
- Fix mypy issues in tsp by @nhuet in #102
- Fix issues with stricter mypy in facility by @nhuet in #104
- Fix issues with stricter myp for knapsack by @nhuet in #105
- Fix mypy issues in vrp by @nhuet in #103
- Create a dataclass to specify objective type and default weights by @nhuet in #106
- Bump isort pre-commit hook by @nhuet in #107
- Add RCPSP educational notebooks by @nhuet in #60
- Update pickup_vrp API to be in par with the rest of the library by @nhuet in #108
- Replace addConstr() by newer addLConstr() available for gurobi >= 9.0 by @nhuet in #113
- Set "trigger binder env build" step as optional in github workflow by @nhuet in #114
- Improve "trigger binder build" step by @nhuet in #115
- Add new generic CplexMilpSolver for linear programming using docplex library by @g-poveda in #110
- ASP Solver for coloring problem binded to the library by @g-poveda in #109
- Improve readibility of notebooks page in documentation by @nhuet in #117
- Use Agg backend for matplotlib in github actions to avoid random issues in windows tests by @nhuet in #119
- Adding contributors credits by @g-poveda in #116
- ASP Based solver for knapsack problem by @g-poveda in #120
- Knapsack iterative solver by @g-poveda in #121
- Change ortools version in requirements by @g-poveda in #122
- Fix issue in alternating ga by @nhuet in #123
- Harmonize use of int (32 or 64) and stop using deprecated numpy aliases by @nhuet in #124
- Refactor non preemptive rcpsp models and fix typing issues by @nhuet in #127
- Remove deprecated code by @nhuet in #128
- Fix an issue when evaluating with encoding priority_worker_per_task by @nhuet in #129
- Minor fix for rcpsp and rcpsp_multiskill by @g-poveda in #126
- Pass some relevant logger from debug to info by @g-poveda in #130
- Fix Rcpsp modules by @g-poveda in #131
- Coloring Fix by @g-poveda in #132
- Fix knapsack by @g-poveda in #133
- RCPSP development by @g-poveda in #134
- Coloring problem enrichment by @g-poveda in #135
- Make linter job actually perform a check by @nhuet in #136
- Ponctual fixes by @g-poveda in #137
Full Changelog: v0.2.1...v0.2.3
v0.2.2
What's Changed
- Fix typos in minizinc tip by @nhuet in #84
- Make docs/README.md point to contributing page by @nhuet in #86
- Cleaner integration of model and data MSPSP-Instlib by @g-poveda in #87
- New attribute in CPSolvers : status_solver by @g-poveda in #89
- MSLIB (+ polishing MSPSP) integration by @g-poveda in #90
- [Doc] Fix typo in contributing page by @nhuet in #91
- [Doc ]Remove newlines at the end of version string coming from git by @nhuet in #92
- [Gihub actions] Fix pip cache key by @nhuet in #93
- Robustify create-binder-env job by @nhuet in #94
- Fix mypy issues in knapsack by @nhuet in #95
- Put common tools for ghh in a separate file by @nhuet in #101
- Remove pytest slow marker not relevant anymore by @nhuet in #96
- Make mypy stricter by @nhuet in #97
- Update dependencies to ease proper typing by @nhuet in #98
- Fix generic_tools for stricter mypy by @nhuet in #99
- Fix issues with stricter mypy in coloring by @nhuet in #100
- Fix mypy issues in tsp by @nhuet in #102
- Fix issues with stricter mypy in facility by @nhuet in #104
- Fix issues with stricter myp for knapsack by @nhuet in #105
- Fix mypy issues in vrp by @nhuet in #103
- Create a dataclass to specify objective type and default weights by @nhuet in #106
- Bump isort pre-commit hook by @nhuet in #107
- Add RCPSP educational notebooks by @nhuet in #60
- Update pickup_vrp API to be in par with the rest of the library by @nhuet in #108
- Replace addConstr() by newer addLConstr() available for gurobi >= 9.0 by @nhuet in #113
- Set "trigger binder env build" step as optional in github workflow by @nhuet in #114
- Improve "trigger binder build" step by @nhuet in #115
- Add new generic CplexMilpSolver for linear programming using docplex library by @g-poveda in #110
- ASP Solver for coloring problem binded to the library by @g-poveda in #109
- Improve readibility of notebooks page in documentation by @nhuet in #117
- Use Agg backend for matplotlib in github actions to avoid random issues in windows tests by @nhuet in #119
- Adding contributors credits by @g-poveda in #116
- ASP Based solver for knapsack problem by @g-poveda in #120
- Knapsack iterative solver by @g-poveda in #121
Full Changelog: v0.2.1...v0.2.2
v0.2.1
What's Changed
- Check minizinc binary version and bump minizinc-python version by @nhuet in #48
- Fix "Fetch data for tests" workflow step for windows by @nhuet in #50
- Fix the copy() function of RCPSPModel by @g-poveda in #53
- Update actions to use node 16 by @nhuet in #52
- New model for resource usage optimisation in RCPSP problem by @g-poveda in #45
- Use new way of setting output parameter by @nhuet in #57
- Use pyproject.toml instead of setup.py by @nhuet in #58
- Show discrete_optimization path used by pytest by @nhuet in #62
- Use new feature caching pip cache with setup-python action by @nhuet in #61
- New knapsack solver based on cpmpy library by @g-poveda in #63
- Knapsack notebook by @nhuet in #59
- Use pyproject.toml file for mypy configuration by @nhuet in #66
- Adding new solver for coloring problem based on cost function network by @g-poveda in #64
- Build and deploy the documentation by @nhuet in #56
- Fix a bug when calling get_data_available without data_home existing by @nhuet in #67
- Fix dependencies of the library and test importing each module correctly by @nhuet in #68
- Fix utility function creating sampled rcpsp instance by @g-poveda in #71
- Fix github+binder links for notebooks when tagging a release by @nhuet in #72
- Update automatically binder environment when pushing on default branch or tagging a release by @nhuet in #73
- Modify prerequisites text for binder users by @nhuet in #74
- Simplify readme by pointing to online doc by @nhuet in #75
- Add tips in doc to install minzinc easily in a terminal (works on cloud) by @nhuet in #78
- Update minizinc install command line for ubuntu in github actions by @nhuet in #79
- Correct minizinc install command lines in doc for Linux without FUSE by @nhuet in #82
- Fix installation instructions in editable mode (need recent version of pip) by @nhuet in #83
- Skip minizinc version check if DO_SKIP_MZN_CHECK env variable is set by @nhuet in #81
Full Changelog: v0.2.0...v0.2.1
v0.2.0
What's Changed
- Integrate previous work done on a previous repo by @nhuet in #5
- Fix issues when gurobi not available by @nhuet in #6
- Test importing all modules by @nhuet in #7
- Restore njit decorator for sgs_fast_preemptive_minduration() by @nhuet in #8
- Fix typo and finish a sentence. by @nhuet in #10
- Clean the code by @nhuet in #9
- Allow more time for rcpsp_ms to rcpsp solver by @nhuet in #11
- Add linear flow solver pickup_vrp test by @nhuet in #15
- Create a coverage report by @nhuet in #12
- Remove obsolete module and move example to examples/ by @nhuet in #18
- [codereview.doctor] Add encoding when parsing files by @nhuet in #20
- [coderview.doctor] Use dataclass instead of NamedTuple by @nhuet in #22
- [coderview.doctor] Avoid redundant list comprehension by @nhuet in #23
- [coderview.doctor] Use Optional instead of Union by @nhuet in #24
- [codereview.doctor] Use f-strings by @nhuet in #21
- Remove unnecessary prints by @g-poveda in #26
- Fix mypy issues on generic_tools, coloring, and facility by @nhuet in #25
- Avoid duplicates by calling look_for_solver_class in look_for_solver by @nhuet in #27
- [codereview.doctor] Remove "if" conditions that always evaluate to True or False by @nhuet in #19
- Replace print by logging by @nhuet in #28
- Remove solve_lns() methods from CP and LP solvers by @nhuet in #29
- Remove methods only used in former solve_lns() by @nhuet in #30
- Modify ParametersCP and ParametersMilp by @nhuet in #31
- Examples Fix and refactoring by @g-poveda in #32
- Refactor milp solvers by @nhuet in #33
- Refactor CP solvers by @nhuet in #35
- Examples and unit test all running by @g-poveda in #37
- Add pre-commit hooks for notebooks by @nhuet in #39
- Fix logging messages by @nhuet in #40
- Update readme by @nhuet in #41
- Replace no break spaces by regular spaces by @nhuet in #44
- Enrich the API doc for coloring, facility, and generic_tools by @nhuet in #42
- Release workflow by @nhuet in #38
- Add copyright for source files by @nhuet in #43
- Fix RCSPSP_MS LP solver by @nhuet in #46
- Update references for other minizinc files by @nhuet in #47
New Contributors
Full Changelog: https://github.com/airbus/discrete-optimization/commits/v0.2.0