simplex-trace 0.2.0

Exact-arithmetic simplex (primal, Big-M, two-phase, dual) that records every tableau and pivot as data, with sensitivity analysis.
Documentation
# Changelog

All notable changes to this project are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.2.0] - 2026-10-24

### Added

- `Method::DualSimplex`: every constraint is written as `<=` and the slack basis, which may be
  infeasible but must be dual feasible, is repaired with dual pivots. Trace steps
  `Step::DualPivot` (ratio test over the columns) and `Step::InfeasibleRow` (the row that
  proves infeasibility), the stage `Phase::Dual`, and `DualRatioTest`.
- `reoptimize`: appends constraints to a solved problem and re-optimizes from the previous
  final tableau with the dual simplex, recording each new row as `Step::ConstraintAdded`.
  Works on a solution loaded from JSON.
- `Solution::problem`: the problem a solution answers.
- `Snapshot::is_feasible`.
- `Error::NotDualFeasible` and `Error::NotOptimal`.
- `#![forbid(unsafe_code)]`; the README examples are compiled as doctests.

### Changed

- A solution's JSON now carries its problem under `"problem"`. Solutions serialized by 0.1
  lack it and no longer deserialize.
- Variable names must be unique, non-empty and may not look like a slack or artificial column
  (`s1`, `a2`, ...). Such problems are rejected with `Error::InvalidProblem` instead of
  producing an ambiguous tableau.
- `Phase` may gain variants in minor releases (`#[non_exhaustive]`).

## [0.1.0] - 2026-10-24

First release.

### Added

- Primal simplex, Big-M (with a symbolic `M`) and two-phase methods, in exact rational
  arithmetic.
- A full trace of every run: tableau snapshots, pivots with their minimum-ratio tests,
  phase 1 results, artificial variables driven out of the basis, redundant rows removed, and
  the Big-M infeasibility diagnosis. Tableaus follow Taha's convention.
- Dantzig and Bland pivot rules; every method always reports optimal, infeasible or
  unbounded.
- Sensitivity analysis of every optimal solution: shadow prices, slacks, reduced costs, and
  the right-hand-side and cost ranges that keep the basis optimal, each price linked to the
  tableau cell it is read from.
- Optional `serde` feature: problems, solutions and traces as JSON, with numbers as exact
  strings.

[Unreleased]: https://github.com/angelariasus/simplex-trace/compare/v0.2.0...HEAD
[0.2.0]: https://github.com/angelariasus/simplex-trace/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/angelariasus/simplex-trace/releases/tag/v0.1.0