Skip to content

Commit e3b946b

Browse files
rasheedjaCopilot
andcommitted
docs: update unreleased changelog entries
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 4f88c75 commit e3b946b

1 file changed

Lines changed: 41 additions & 16 deletions

File tree

ChangeLog.md

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,48 @@
22

33
## Unreleased changes
44

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
716
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`)
2247

2348
## [v0.2.0.0](https://github.com/rasheedja/LPPaver/tree/v0.2.0.0)
2449

0 commit comments

Comments
 (0)