|
2 | 2 |
|
3 | 3 | ## Unreleased changes |
4 | 4 |
|
5 | | -- **BREAKING CHANGE**: Restructured `VarDomain` type to support upper bounds |
6 | | - - Replaced `NonNegative`, `LowerBound SimplexNum`, and `Unbounded` constructors with |
| 5 | +### Breaking changes |
| 6 | + |
| 7 | +- **`twoPhaseSimplex` signature changed**: |
| 8 | + - Old: `ObjectiveFunction -> [PolyConstraint] -> m (Maybe Result)` |
| 9 | + - New: `VarDomainMap -> [ObjectiveFunction] -> [PolyConstraint] -> m SimplexResult` |
| 10 | + - The first argument is now a `VarDomainMap` specifying variable domains |
| 11 | + - The second argument is now a **list** of `ObjectiveFunction`; pass an empty list to check |
| 12 | + feasibility only (Phase 1) without optimising |
| 13 | + - The return type is now `SimplexResult` (see below) |
| 14 | +- **`VarDomain` type restructured** to support upper bounds: |
| 15 | + - Replaced `NonNegative`, `LowerBound SimplexNum`, and `Unbounded` constructors with |
7 | 16 | a single `Bounded { lowerBound :: Maybe SimplexNum, upperBound :: Maybe SimplexNum }` record |
8 | | - - Added smart constructors for convenience: `unbounded`, `nonNegative`, `lowerBoundOnly`, |
9 | | - `upperBoundOnly`, and `boundedRange` |
10 | | - - `Bounded Nothing Nothing` is equivalent to `Unbounded` |
11 | | - - `Bounded (Just 0) Nothing` is equivalent to `NonNegative` |
12 | | - - Upper bounds are now supported and automatically added as LEQ constraints |
13 | | -- Added `AddUpperBound` constructor to `VarTransform` for upper bound constraint generation |
14 | | -- Updated `getTransform` to return a list of transforms (can now generate both lower and upper bound transforms) |
15 | | -- Use Hspec for tests |
16 | | -- Add nix flake |
17 | | -- twoPhaseSimplex now takes a VarDomainMap (as the first param) |
18 | | - - You can specify each Var's domain using smart constructors: `nonNegative`, `unbounded`, |
19 | | - `lowerBoundOnly`, `upperBoundOnly`, or `boundedRange` |
20 | | - - If a VarDomain for a Var is undefined, it's assumed to be `unbounded` |
21 | | - - If you want to keep the same behaviour as before (all vars non-negative), use `nonNegative` for all Vars |
| 17 | + - `Bounded Nothing Nothing` is equivalent to the old `Unbounded` |
| 18 | + - `Bounded (Just 0) Nothing` is equivalent to the old `NonNegative` |
| 19 | + - Added smart constructors: `unbounded`, `nonNegative`, `lowerBoundOnly`, `upperBoundOnly`, |
| 20 | + and `boundedRange` |
| 21 | +- **`Result` and `SimplexMeta` types removed**; replaced by: |
| 22 | + - `SimplexResult { feasibleSystem :: Maybe FeasibleSystem, objectiveResults :: [ObjectiveResult] }` |
| 23 | + — the top-level return from `twoPhaseSimplex` |
| 24 | + - `ObjectiveResult { objectiveFunction :: ObjectiveFunction, outcome :: OptimisationOutcome }` |
| 25 | + — the result for each objective function |
| 26 | + - `OptimisationOutcome` — describes the outcome of optimising a single objective (optimal |
| 27 | + value found, unbounded, or infeasible) |
| 28 | + |
| 29 | +### New features |
| 30 | + |
| 31 | +- Upper bounds on variables are now supported: use `upperBoundOnly` or `boundedRange` in the |
| 32 | + `VarDomainMap`; upper bounds are automatically added as LEQ constraints |
| 33 | +- `twoPhaseSimplex` can optimise multiple objective functions in a single call against one |
| 34 | + constraint set; results are returned in the same order as the input list |
| 35 | +- Added `VarDomainMap` type for mapping variables to their domains; variables not present are |
| 36 | + assumed `unbounded` |
| 37 | + |
| 38 | +### Infrastructure |
| 39 | + |
| 40 | +- Added Nix flake (`flake.nix`) for a reproducible dev environment via `nix develop` (GHC 9.6, |
| 41 | + cabal, stack, fourmolu, hlint, HLS) |
| 42 | +- Added `Makefile` with `make build`, `make test`, `make ci`, etc.; supports both cabal and |
| 43 | + stack via `BUILD_TOOL=cabal|stack` (default: cabal) |
| 44 | +- CI now tests GHC 9.2–9.12 across ubuntu, macos, and windows (cabal); Stack LTS 22.44 on |
| 45 | + ubuntu and macos; and a Nix-based job running both cabal and stack |
| 46 | +- Replaced HUnit golden tests with HSpec (`hspec-discover`) |
22 | 47 |
|
23 | 48 | ## [v0.2.0.0](https://github.com/rasheedja/LPPaver/tree/v0.2.0.0) |
24 | 49 |
|
|
0 commit comments