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:
  • enable_rational_conversion (bool)

  • rational_max_denom (int)

  • scale_objective (bool)

  • scaling_factor (int)

__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 variables

  • rational_max_denom (int) – Maximum denominator for float-to-rational conversion

  • scale_objective (bool) – Whether to scale objective coefficients to integers

  • scaling_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_solver_model()

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 variables

  • rational_max_denom (int) – Maximum denominator for float-to-rational conversion

  • scale_objective (bool) – Whether to scale objective coefficients to integers

  • scaling_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 solve

  • time_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:

LXSolution

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])