Skip to content

Quadratic Assignment API Reference

Data

Data model for Quadratic Assignment use case.

QapData

Bases: UcData

Data for the Quadratic Assignment Problem (QAP).

Assigns n facilities to n positions to minimize the total cost, which is the sum of flow * distance for all facility pairs.

Attributes:

  • name (Literal['quadratic_assignment_problem']) –

    Identifier for this data type.

  • flow_matrix (NumPyArray) –

    An n x n matrix of flows between facilities.

  • distance_matrix (NumPyArray) –

    An n x n matrix of distances between positions.

  • names (list[str]) –

    Identifiers for each facility. Defaults to Facility 0, ..., Facility n-1.

  • position_names (list[str]) –

    Identifiers for each position. Defaults to Position 0, ..., Position n-1.

plot(*, ax: Axes | None = None) -> Axes | tuple[Axes, Axes]

Plot the flow and distance matrices side by side.

Parameters:

  • ax (Axes | None, default: None ) –

    Matplotlib axes to draw on. If None, a new figure with two subplots is created.

Returns:

  • Axes | tuple[Axes, Axes]

    A single axes when ax is provided, otherwise a tuple of (flow_ax, distance_ax).

to_string() -> str

Return a string describing the data.

Returns:

  • str

    String representation of the data.

from_values(flow_matrix: np.ndarray | list[list[float]], distance_matrix: np.ndarray | list[list[float]], names: list[str] | None = None, position_names: list[str] | None = None) -> QapData staticmethod

Create a QapData instance from flow and distance matrices.

Parameters:

  • flow_matrix (ndarray | list[list[float]]) –

    An n x n symmetric matrix of flows between facilities.

  • distance_matrix (ndarray | list[list[float]]) –

    An n x n symmetric matrix of distances between positions.

  • names (list[str] | None, default: None ) –

    Identifiers for each facility. Defaults to Facility 0, ..., Facility n-1.

  • position_names (list[str] | None, default: None ) –

    Identifiers for each position. Defaults to Position 0, ..., Position n-1.

Returns:

  • QapData

    A QapData instance with the given matrices.

generate_random(n: int = 4, seed: int | None = None) -> QapData staticmethod

Generate a random Quadratic Assignment instance.

Creates symmetric flow and distance matrices.

Parameters:

  • n (int, default: 4 ) –

    Number of facilities/positions, by default 4.

  • seed (int | None, default: None ) –

    Random seed for reproducibility, by default None.

Returns:

  • QapData

    A randomly generated data instance.

Formulation

Formulation for Quadratic Assignment use case.

QapFormulation

Bases: UcFormulation[QapData, QapSolution]

Constraint-based formulation for Quadratic Assignment.

Mathematical Formulation

Decision Variables: x_{i,k} in {0,1}: 1 if facility i is assigned to position k

Objective: minimize sum_{i,j,k,m} flow[i][j] * distance[k][m] * x[i,k] * x[j,m]

Constraints: 1. Each facility one position: sum_k x[i,k] == 1 for all i 2. Each position one facility: sum_i x[i,k] == 1 for all k

to_string(data: QapData) -> str staticmethod

Return a string describing the formulation.

Parameters:

  • data (QapData) –

    The problem data.

Returns:

  • str

    String representation of the formulation.

formulate(data: QapData) -> Model staticmethod

Formulate the Quadratic Assignment Problem.

Parameters:

  • data (QapData) –

    The problem data.

Returns:

  • Model

    A Luna Model ready to be solved.

interpret(solution: Solution, data: QapData) -> QapSolution staticmethod

Extract solution from quantum result.

Parameters:

  • solution (Solution) –

    The quantum solution.

  • data (QapData) –

    The problem data.

Returns:

Solution

Solution model for Quadratic Assignment use case.

QapSolution

Bases: UcSolution

Solution for the Quadratic Assignment Problem.

Attributes:

  • name (Literal['quadratic_assignment_problem']) –

    Identifier for this solution type.

  • assignment (dict[str, str]) –

    Mapping from facility name to position name.

  • total_cost (float) –

    Total flow * distance cost of the assignment.

  • is_valid (bool) –

    Whether the assignment is a valid permutation.

plot(data: QapData | None = None, *, ax: Axes | None = None) -> Axes

Plot the assignment result as an item-position matrix.

Parameters:

  • data (QuadraticAssignmentData | None, default: None ) –

    Problem data for context.

  • ax (Axes | None, default: None ) –

    Matplotlib axes to draw on. Creates a new figure if None.

Returns:

  • Axes

    The axes with the plot.

to_string() -> str

Return a string describing the solution.

Returns:

  • str

    String representation of the solution.

Instance

Instance model for QuadraticAssignment use case.

QapInstance

Bases: UcInstance[QapData, QapFormulation, QapSolution]

Instance combining data and formulation for QuadraticAssignment.

Collection

Collection of Quadratic Assignment instances.

QapCollection

Bases: UcInstanceCollection[QapInstance]

Collection of Quadratic Assignment instances.

from_random(min_size: int, max_size: int, num_instances: int = 1, *, seed: int | None = None) -> QapCollection classmethod

Generate random Quadratic Assignment instances.

Parameters:

  • min_size (int) –

    Minimum number of facilities/locations.

  • max_size (int) –

    Maximum number of facilities/locations.

  • num_instances (int, default: 1 ) –

    Number of instances per size, by default 1.

  • seed (int | None, default: None ) –

    Random seed for reproducibility, by default None.

Returns: