Binary Integer Linear Programming (BILP) API Reference
Data
Data model for general Binary Integer Linear Programming (BILP) use case.
BilpData
Bases: UcData
Data container for general Binary Integer Linear Programming (BILP).
A BILP is an optimization problem with: - Binary decision variables (0 or 1) - Linear objective function - Linear constraints (equality or inequality)
Attributes:
-
name(Literal['binary_integer_linear_programming']) –Constant identifier for this data type.
-
constraint_matrix(NumPyArray) –An m x n constraint matrix S where m is the number of constraints and n is the number of variables.
-
rhs(list[float]) –Right-hand side vector b of length m.
-
objective_coeffs(list[float]) –Coefficient vector c of the linear objective function of length n.
-
constraint_senses(list[Literal['==', '<=', '>=']]) –List of constraint types for each row in
constraint_matrix. Defines whether the constraint is equality, <=, or >=.
__post_init__() -> None
Ensure constraint_senses is set; default to equality if None.
plot(*, ax: Axes | None = None) -> Axes
Visualize the BILP data with a constraint matrix heatmap and constraint types.
Parameters:
-
ax(Axes | None, default:None) –Matplotlib axes to draw on. Creates a new figure if None.
Returns:
-
Axes–Axes with the plot.
to_string() -> str
Return a string describing the data instance.
from_arrays(constraint_matrix: np.ndarray, rhs: list[float], objective_coeffs: list[float], constraint_senses: list[Literal['==', '<=', '>=']] | None = None) -> BilpData
staticmethod
Create a BilpData instance from numpy arrays.
Parameters:
-
constraint_matrix(ndarray) –The m x n constraint matrix.
-
rhs(list[float]) –Right-hand side vector of length m.
-
objective_coeffs(list[float]) –Coefficients for the linear objective function.
-
constraint_senses(list[Literal['==', '<=', '>=']] | None, default:None) –Constraint types for each row. Defaults to equality if None.
Returns:
-
BilpData–A populated BilpData instance.
generate_random(n_vars: int = 5, n_constraints: int = 3, size: int | None = None, seed: int | None = None) -> BilpData
staticmethod
Generate a random feasible BILP instance.
Ensures feasibility by first generating a random binary solution and computing the RHS from it. Constraint types are chosen randomly.
Parameters:
-
n_vars(int, default:5) –Number of binary variables. Default is 5.
-
n_constraints(int, default:3) –Number of constraints. Default is 3.
-
size(int | None, default:None) –If provided, overrides n_vars for collection compatibility.
-
seed(int | None, default:None) –Random seed for reproducibility. Default is None.
Returns:
-
BilpData–A randomly generated BILP instance.
Formulation
Formulation for general Binary Integer Linear Programming (BILP) use case.
BilpFormulation
Bases: UcFormulation[BilpData, BilpSolution]
Formulation class for general Binary Integer Linear Programming (BILP).
This class translates a BilpData instance into an optimization model suitable for solvers. Supports equality and inequality constraints.
Mathematical Formulation
to_string(data: BilpData) -> str
staticmethod
formulate(data: BilpData) -> Model
staticmethod
Formulate the general BILP as an optimization model.
Parameters:
-
data(BilpData) –Problem data containing the constraint matrix, RHS, objective coefficients, and constraint senses.
Returns:
-
Model–An optimization model ready to be solved by a solver.
Notes
- Supports equality (==, default), less-than-or-equal (<=), and greater-than-or-equal (>=) constraints.
- All decision variables are binary.
interpret(solution: Solution, data: BilpData) -> BilpSolution
staticmethod
Interpret the solver's solution and convert it to a BilpSolution.
Parameters:
-
solution(Solution) –The solver's solution object.
-
data(BilpData) –The problem data.
Returns:
-
BilpSolution–Structured solution containing: - solution vector - objective value - validity flag (all constraints satisfied)
Raises:
-
NoSolutionFoundError–If the solver did not return any solution.
Solution
Solution model for BILP use case.
BilpSolution
Bases: UcSolution
Solution for the Binary Integer Linear Programming (BILP) use case.
Attributes:
-
name(Literal['binary_integer_linear_programming']) –Identifier for this solution type.
-
solution_vector(list[int]) –Binary solution vector x.
-
objective_value(float) –Objective value c^T x.
-
is_valid(bool) –Whether all equality constraints S x == b are satisfied.
plot(data: BilpData | None = None, *, ax: Axes | None = None) -> Axes | list[Axes]
Visualize the BILP solution with a variable bar chart and optional constraint heatmap.
Parameters:
-
data(BilpData | None, default:None) –Problem data providing the constraint matrix and senses. If provided, a heatmap showing which constraints are activated by the solution is displayed below the solution bar chart.
-
ax(Axes | None, default:None) –Matplotlib axes or array of axes to draw on. If None, a new figure with two subplots (bars + heatmap) is created.
Returns:
-
Axes | list[Axes]–The axes containing the plot(s). Returns a single Axes if only one subplot is used, otherwise a list of two Axes [bar_chart, heatmap].
to_string() -> str
Return a string describing the solution.
Instance
Instance model for Bilp use case.
BilpInstance
Bases: UcInstance[BilpData, BilpFormulation, BilpSolution]
Instance combining data and formulation for Bilp.
Collection
Collection of BILP instances.
BilpCollection
Bases: UcInstanceCollection[BilpInstance]
Collection of BILP instances.
from_random(min_size: int, max_size: int, num_instances: int = 1, *, seed: int | None = None) -> BilpCollection
classmethod
Not implemented for BILP.
Random generation cannot reliably produce feasible BILP instances with mixed constraint types, as there is no efficient way to guarantee that a valid binary solution exists for arbitrary constraint matrices and right-hand sides.
Raises:
-
NotImplementedError–Always raised.
filter_infeasible(max_runtime: float = 3600, *, quiet: bool = True) -> list[bool]
Drop the instances of this collection that have no feasible solution.
Every instance is formulated and handed to SCIP, which stops as soon as
it finds the first feasible solution. An instance is removed from the
collection when SCIP proves the model infeasible, when no solution turns
up within max_runtime, or when formulating it fails altogether. This
keeps randomly generated instances from breaking a downstream pipeline.
Parameters:
-
max_runtime(float, default:3600) –SCIP time limit per instance in seconds. Must be positive. Defaults to 3600 seconds.
-
quiet(bool, default:True) –Suppress the SCIP solver output.
Returns:
-
list[bool]–Feasibility mask over the instances as they were before filtering, in that order:
Truewhere the instance was kept,Falsewhere it was removed.
Raises:
-
ValueError–If
max_runtimeis not positive.