Welcome to LumiX Documentation¶
LumiX is a modern, type-safe wrapper for optimization solvers that makes mathematical programming accessible, maintainable, and enjoyable.
Key Features¶
- 🎯 Type-Safe & IDE-Friendly
Full type hints and autocomplete support for a superior development experience
- 🔌 Multi-Solver Support
Seamlessly switch between OR-Tools, Gurobi, CPLEX, GLPK, and CP-SAT
- 📊 Data-Driven Modeling
Build models directly from your data with automatic indexing and mapping
- 🔄 Automatic Linearization
Automatically linearize non-linear constraints (bilinear, absolute value, piecewise)
- 📈 Advanced Analysis
Built-in sensitivity analysis, scenario analysis, and what-if analysis tools
- 🎯 Goal Programming
Native support for multi-objective optimization with priorities and weights
- ⚡ ORM Integration
Type-safe integration with SQLAlchemy, Django ORM, and other databases
- 🛠️ Enhanced Logging
Domain-specific logging for tracking model building and solving progress
Quick Example¶
from lumix import LXModel, LXVariable, LXConstraint, LXLinearExpression, LXOptimizer
# Define variables
production = (
LXVariable[Product, float]("production")
.continuous()
.bounds(lower=0)
.indexed_by(lambda p: p.id)
.from_data(products)
)
# Build model
model = (
LXModel("production_plan")
.add_variable(production)
.maximize(
LXLinearExpression()
.add_term(production, lambda p: p.profit)
)
)
# Solve
optimizer = LXOptimizer().use_solver("gurobi")
solution = optimizer.solve(model)
print(f"Optimal profit: ${solution.objective_value:,.2f}")
Supported Solvers¶
LumiX provides unified interfaces to multiple optimization solvers:
Solver |
Linear |
Integer |
Quadratic |
Advanced |
License |
|---|---|---|---|---|---|
OR-Tools |
✓ |
✓ |
✗ |
SOS, Indicator |
Apache 2.0 (Free) |
Gurobi |
✓ |
✓ |
✓ |
SOCP, PWL, Callbacks |
Commercial/Academic |
CPLEX |
✓ |
✓ |
✓ |
SOCP, PWL, Callbacks |
Commercial/Academic |
GLPK |
✓ |
✓ |
✗ |
Basic |
GPL (Free) |
CP-SAT |
✗ |
✓ |
✗ |
Constraint Programming |
Apache 2.0 (Free) |
See also
See Available Solvers for detailed solver capabilities and installation instructions.
Table of Contents¶
Getting Started
Tutorials
User Guide
- User Guide
- Core Concepts
- Using Solvers
- Indexing Guide
- Nonlinear Terms
- Linearization Concepts
- Utils Module Guide
- Solution Handling
- Analysis Tools
- Goal Programming
- Core Module
- Solvers Module
- Indexing Module
- Nonlinear Module
- Linearization Module
- Utils Module
- Solution Module
- Analysis Module
- Goal Programming Module
- Quick Start
- Coming Soon
- Stay Tuned
API Reference
- API Reference
- Core Module API
- Solvers Module API
- Indexing Module API
- Nonlinear Module API
- Linearization Module API
- Utils Module API
- Solution Module API
- Analysis Module API
- Goal Programming Module API
- Core Module
- Solvers Module
- Indexing Module
- Nonlinear Module
- Linearization Module
- Utils Module
- Solution Module
- Analysis Module
- Goal Programming Module
- Quick Links
- Quick Reference
Development
- Development Guide
- Core Architecture
- Extending Core Components
- Solvers Architecture
- Extending Solvers
- Indexing Architecture
- Extending Indexing
- Nonlinear Module Architecture
- Extending Nonlinear Module
- Linearization Architecture
- Extending Linearization
- Utils Module Architecture
- Extending Utils Components
- Solution Module Architecture
- Extending Solution Components
- Analysis Architecture
- Extending Analysis
- Goal Programming Architecture
- Extending Goal Programming
- Design Decisions
- Overview
- Target Audience
- Getting Started
- Module Overview
- Core Module Documentation
- Solvers Module Documentation
- Indexing Module Documentation
- Nonlinear Module Documentation
- Utils Module Documentation
- Linearization Module Documentation
- Solution Module Documentation
- Analysis Module Documentation
- Goal Programming Module Documentation
- Next Steps
Why LumiX?¶
Traditional optimization libraries require verbose, error-prone code with limited IDE support. LumiX changes that:
Before (Traditional Approach)
# Manual indexing, no type safety
x = {}
for i in range(len(products)):
x[i] = model.addVar(name=f"x_{i}")
# String-based error-prone expressions
model.addConstr(sum(x[i] * data[i] for i in range(len(products))) <= capacity)
After (LumiX)
# Type-safe, data-driven, IDE-friendly
production = (
LXVariable[Product, float]("production")
.continuous()
.indexed_by(lambda p: p.id)
.from_data(products)
)
model.add_constraint(
LXConstraint("capacity")
.expression(
LXLinearExpression().add_term(production, lambda p: p.usage)
)
.le()
.rhs(capacity)
)
Core Capabilities¶
Model Building¶
Variables: Continuous, integer, binary with automatic indexing
Constraints: Linear, quadratic, indicator, and more
Expressions: Type-safe expression building with full IDE support
Multi-indexing: Natural multi-dimensional indexing (e.g., Driver × Date × Shift)
Index Dimensions: Flexible, filterable dimensions for single and multi-model indexing
Cartesian Products: Type-safe multi-dimensional variable families
Linearization¶
Automatic linearization of non-linear terms:
Bilinear products (x × y) using McCormick envelopes
Absolute values (x)
Min/max functions
Piecewise-linear functions
Indicator constraints
Analysis Tools¶
Sensitivity Analysis: Understand how changes in parameters affect the solution
Scenario Analysis: Compare multiple scenarios side-by-side
What-If Analysis: Quickly evaluate changes without rebuilding models
Utils Module¶
Enhanced utilities for production-ready optimization:
LXModelLogger: Domain-specific logging with automatic timing and formatted output
ORM Integration: Type-safe queries with full IDE support for SQLAlchemy, Django ORM
Rational Conversion: Float-to-rational conversion for integer-only solvers (GLPK)
Goal Programming¶
Multi-objective optimization with:
Weighted goal programming
Sequential (lexicographic) goal programming
Automatic constraint relaxation with deviation tracking
Community & Support¶
Documentation: https://lumix.readthedocs.io
Source Code: https://github.com/tdelphi1981/LumiX
Issue Tracker: https://github.com/tdelphi1981/LumiX/issues
License: Academic Free License v3.0