Releases: wouterbles/pyaugmecon
Releases · wouterbles/pyaugmecon
2.0.1
- Removed pre-v2 dead code (model.py, pyaugmecon.py, process_handler.py, queue_handler.py, solver_adapter.py, solver_process.py) superseded by the solver/ subpackage.
- Added conda-forge distribution. Install via conda install -c conda-forge pyaugmecon. Updated README with conda/mamba instructions and solver package mapping.
2.0.0
Breaking changes
- Moved the package to
src/pyaugmeconand removed the options module. UsePyAugmeconConfigdirectly. - Replaced the broad options object with one strict Pydantic config model. Unsupported setting names are rejected instead of being silently accepted.
- Kept the public result surface small: removed undocumented
PyAugmeconattributes such ascoverage_*,exact_guarantee,objective_order_*,nadir_source,grid_points_effective, andsummary. - Exposes advanced parallel controls as
work_distributionandflag_policy.
Core behavior
- Added explicit
exactandsampledrun modes. - Built epsilon levels deterministically and added objective ordering with
objective_order="auto_range"or"given". - Automatically deactivates all user objectives before solving.
- Checks for reserved internal component names before modifying the Pyomo model.
- Computes auto-safe nadir bounds when explicit
nadir_pointsare not provided. - Keeps decision-variable payloads optional with
store_decision_variables. - Normalizes objective keys deterministically with
round_decimals. Workers also snap near-integer noise on objective values viaobjective_tolerancebefore sending results.
Parallel solve path
- Uses spawn-based multiprocessing with shared-memory model handoff.
- Splits work with
work_distribution="dynamic","fixed", or"outer_grid". The default"auto"picks"outer_grid"for exact multi-worker runs and"dynamic"otherwise. - Uses
flag_policy="local"or"shared". The default"auto"picks"shared"for exact multi-worker runs and"local"otherwise. - Adds clearer worker failure, timeout, early-stop, job queue, result queue, and error queue handling.
- Workers emit structured
Solutionrecords instead of nested result maps. - The worker hot loop caches Pyomo component handles and objective expressions once per worker to reduce repeated Pyomo lookups.
- Shared outer-grid skip state avoids repeat infeasible solves between workers; missed concurrent updates can only cost an extra solve, not a wrong answer.
Solver support
- Sets HiGHS as the default solver family.
- Adds fallback chains for HiGHS, Gurobi, CPLEX, XPRESS, CBC, and SCIP families.
- Adds
solver_options,solver_io, andsolve_warmstartcontrols. - Handles solver statuses through a shared adapter so infeasible, infeasible-or-unbounded, time-limit, and unsupported terminations are reported consistently.
Logging and artifacts
- Replaced print output with
tqdmprogress and Loguru-backed run logging. - Added
log_sink=to forward run messages to objects with.info(message). - Added
artifact_folder,artifact_name,write_csv,progress_bar,log_to_console, andprocess_logging. - Writes payoff, grid, and solution tables as CSV files through a small tabular helper.
Docs, examples, and packaging
- Solver backends are opt-in through extras:
pyaugmecon[highs],pyaugmecon[gurobi],pyaugmecon[xpress],pyaugmecon[cbc].cbcnow installscbcboxto match Pyomo's executable backend path.scipremains supported through Pyomo when ascipexecutable is installed. The base install does not pull in any solver. - Documented solver fallback order, backend selection rationale, and common free/community license notes.
- Packaged the knapsack CSV data used by
pyaugmecon.example_models, so the bundled examples work from installed wheels. - Rewrote benchmarks as a modular CLI (
benchmarks/cli.py,cases.py,engines.py) with engine pluggability supporting both this project and theaugmecon-pyimplementation. Bundled knapsack benchmark cases are maintained and documented inbenchmarks/README.md. - Restructured tests into
tests/unit,tests/integration, andtests/support, with knapsack regression reference data undertests/input/. - Switched project tooling to
uv, Ruff, ty, pytest, andprek. - Replaced the previous CI setup with GitHub Actions for Ruff, ty, and pytest on Python 3.12, 3.13, and 3.14.
- Added release workflow to verify builds and publish to PyPI.
- Removed obsolete files:
dev/make_distribution.sh,gurobi.env, andpytest.ini.
Fixed Issues and PRs
- Queue and scheduling work: Issue #14.
- Auto publish pipeline: Issue #15.
- CI coverage updates: Issue #16.
- Solution storage updates: Issue #17.
- Solver support including CBC: Issue #20.
- Objective auto-deactivation: Issue #22.
- Reserved-name conflict checks: Issue #23.
- Thanks @yvanoers for PR #6 and PR #7.
- Thanks @kschulze26 for PR #25.
1.0.8
- Add method to check if user-provided model component names mask pyaugmecon-added component names
- Update LICENSE
1.0.7
- Update readme to include other solvers
- Fix Pandas warning
1.0.6
Fix dependencies
1.0.5
- Update dependencies
1.0.4
- Correctly enqueue items such that the work can be redistributed when a process finishes its work
1.0.3
1.0.2
- Update dependencies