Skip to content

Commit 22beaa8

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

1 file changed

Lines changed: 28 additions & 42 deletions

File tree

ChangeLog.md

Lines changed: 28 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -2,48 +2,34 @@
22

33
## Unreleased changes
44

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
16-
a single `Bounded { lowerBound :: Maybe SimplexNum, upperBound :: Maybe SimplexNum }` record
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`)
5+
- `twoPhaseSimplex` now takes a `VarDomainMap` as its first argument
6+
- Specify each variable's domain using smart constructors: `nonNegative`, `unbounded`, `lowerBoundOnly`, `upperBoundOnly`, or `boundedRange`
7+
- Variables not in the `VarDomainMap` are assumed to be `unbounded`
8+
- To keep the same behaviour as before (all vars non-negative), use `nonNegative` for all variables
9+
- `twoPhaseSimplex` now takes a list of `ObjectiveFunction`s instead of a single one
10+
- Optimise multiple variables against one constraint set in a single call
11+
- Pass an empty list to run Phase 1 only (feasibility check)
12+
- `twoPhaseSimplex` now returns `SimplexResult` instead of `Maybe Result`
13+
- `SimplexResult` contains `Maybe FeasibleSystem` and `[ObjectiveResult]`
14+
- Each `ObjectiveResult` pairs an `ObjectiveFunction` with its `OptimisationOutcome`
15+
- `OptimisationOutcome` is either `Optimal { varValMap }` or `Unbounded`
16+
- `optimizeFeasibleSystem` now returns `OptimisationOutcome` instead of `Maybe Result`
17+
- Restructured `VarDomain` type to support upper bounds
18+
- Replaced `NonNegative`, `LowerBound SimplexNum`, and `Unbounded` constructors with a single `Bounded { lowerBound :: Maybe SimplexNum, upperBound :: Maybe SimplexNum }` record
19+
- Added smart constructors: `unbounded`, `nonNegative`, `lowerBoundOnly`, `upperBoundOnly`, and `boundedRange`
20+
- Added `VarDomainMap` newtype for mapping variables to their domains
21+
- Added `VarTransform` type with `AddLowerBound`, `AddUpperBound`, `Shift`, and `Split` constructors
22+
- Removed `Result`, `SimplexMeta`, `SystemWithSlackVarRow`, `Equation` types
23+
- Removed `extractObjectiveValue` and `foldDictValue` utility functions
24+
- Renamed `prettyShowVarConstMap` to `prettyShowVarLitMapSum`
25+
- Widened dependency version bounds (supports GHC 9.2–9.12)
26+
- Removed `package.yaml`; `simplex-method.cabal` is now maintained directly
27+
- Use HSpec for tests
28+
- Add Nix flake
29+
- Add Makefile with cabal and stack support
30+
- Add CI for cabal (GHC 9.2–9.12), stack (LTS 22.44), and Nix
31+
- Explicit import lists on all modules
32+
- Bump Stackage LTS to 22.44
4733

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

0 commit comments

Comments
 (0)