lumix.solvers.cpsat_solver.LXCPSATSolver¶
- class lumix.solvers.cpsat_solver.LXCPSATSolver(enable_rational_conversion=False, rational_max_denom=10000, scale_objective=True, scaling_factor=1000)[source]¶
OR-Tools CP-SAT (Constraint Programming - Satisfiability) solver implementation for LumiX.
CP-SAT is a constraint programming solver optimized for: - Scheduling problems - Routing problems (TSP, VRP) - Combinatorial optimization - Integer and boolean decision problems
IMPORTANT: CP-SAT only supports INTEGER and BINARY variables (no continuous variables). Float coefficients are automatically converted to integers using rational approximation.
Supports: - Integer variables (bounded or unbounded) - Binary (boolean) variables - Linear constraints (≤, ≥, ==) - Single and indexed variable families - Multi-model expressions - Automatic float-to-rational conversion
TODO: Future CP-SAT-specific features: - AllDifferent constraints for scheduling - Circuit constraints for routing/TSP - Table constraints for allowed combinations - Interval variables for scheduling - NoOverlap constraints for resource scheduling - Cumulative constraints for resource capacity - Boolean logic constraints (OR, AND, XOR, implications) - Solution pool for multiple optimal solutions - Warm start via solution hints - Custom search strategies - Symmetry breaking
- Parameters:
- __init__(enable_rational_conversion=False, rational_max_denom=10000, scale_objective=True, scaling_factor=1000)[source]¶
Initialize CP-SAT solver.
- Parameters:
enable_rational_conversion (
bool) – Enable rational conversion and auto-scaling for continuous variablesrational_max_denom (
int) – Maximum denominator for float-to-rational conversionscale_objective (
bool) – Whether to scale objective coefficients to integersscaling_factor (
int) – Scaling factor for continuous variables (default: 1000) Higher values = more precision but risk integer overflow
- Return type:
None
Methods
__init__([enable_rational_conversion, ...])Initialize CP-SAT solver.
build_model(model)Build CP-SAT native model from LXModel.
Get underlying CP-SAT model for advanced usage.
solve(model[, time_limit, gap_tolerance])Solve optimization model with CP-SAT.
- __init__(enable_rational_conversion=False, rational_max_denom=10000, scale_objective=True, scaling_factor=1000)[source]¶
Initialize CP-SAT solver.
- Parameters:
enable_rational_conversion (
bool) – Enable rational conversion and auto-scaling for continuous variablesrational_max_denom (
int) – Maximum denominator for float-to-rational conversionscale_objective (
bool) – Whether to scale objective coefficients to integersscaling_factor (
int) – Scaling factor for continuous variables (default: 1000) Higher values = more precision but risk integer overflow
- Return type:
None
- build_model(model)[source]¶
Build CP-SAT native model from LXModel.
- Parameters:
model (
LXModel) – LumiX model to build- Return type:
CpModel- Returns:
CP-SAT CpModel instance
- Raises:
ValueError – If model contains continuous variables or unsupported features
- solve(model, time_limit=None, gap_tolerance=None, **solver_params)[source]¶
Solve optimization model with CP-SAT.
- Parameters:
model (
LXModel) – LumiX model to solvetime_limit (
Optional[float]) – Time limit in seconds (None = no limit)gap_tolerance (
Optional[float]) – Relative optimality gap tolerance (None = 0.0001)**solver_params (
Any) – Additional CP-SAT parameters Examples: - num_search_workers: Number of parallel workers (default: auto) - log_search_progress: Enable search logging (default: False) - max_time_in_seconds: Alternative to time_limit - cp_model_presolve: Enable presolve (default: True) - linearization_level: Linearization aggressiveness (0-2) - cp_model_probing_level: Probing level (0-2)
- Return type:
- Returns:
Solution object with results
- TODO: Add support for additional features:
Solution hints (warm start)
Solution callbacks
Assumption-based solving
Multiple solutions enumeration
- get_solver_model()[source]¶
Get underlying CP-SAT model for advanced usage.
- Return type:
CpModel- Returns:
CP-SAT CpModel instance
- Raises:
RuntimeError – If model hasn’t been built yet
Examples
# Access CP-SAT model for advanced features cpsat_model = solver.get_solver_model() # Add custom CP-SAT constraints cpsat_model.AddAllDifferent([var1, var2, var3])