Skip to content

QBSolvLikeQpu

The QBSolv-like QPU is a specialized solver designed to tackle complex problems by decomposing them into smaller, manageable subproblems. It then solves these individual parts using a Quantum Processing Unit (QPU).

This particular implementation achieves its QBSolv-like behavior by utilizing the hybrid.QPUSubproblemAutoEmbeddingSampler from the D-Wave Ocean SDK as the core sampler for these subproblems. This approach allows for efficient handling of large-scale problems by breaking them down and leveraging the strengths of quantum computation for the subcomponents.

Note

This solver is only available for commercial and academic licenses.


Compatible Backends

The QBSolvLikeQpu algorithm supports the following backends:

By default, QBSolvLikeQpu uses the DWaveQpu backend.


Initialization

The following section outlines the default configurations of QBSolvLikeQpu. You can also specify other compatible backends for the algorithm. When backend=None is specified, the default backend will be initialized automatically. In this case, if the backend requires a token, it will be taken from the environment variables.

Default Configuration
from luna_quantum.solve.parameters.algorithms import QBSolvLikeQpu
from luna_quantum.solve.parameters.algorithms.base_params import (
    Decomposer,
    QuantumAnnealingParams
)

algorithm = QBSolvLikeQpu(
    backend=None,
    decomposer_size=50,
    rolling=True,
    rolling_history=0.15,
    max_iter=100,
    max_time=5,
    convergence=3,
    target=None,
    rtol=1e-05,
    atol=1e-08,
    num_reads=100,
    num_retries=0,
    quantum_annealing_params=QuantumAnnealingParams(
        anneal_offsets=None,
        anneal_schedule=None,
        annealing_time=None,
        auto_scale=None,
        fast_anneal=False,
        flux_biases=None,
        flux_drift_compensation=True,
        h_gain_schedule=None,
        initial_state=None,
        max_answers=None,
        num_reads=1,
        programming_thermalization=None,
        readout_thermalization=None,
        reduce_intersample_correlation=False,
        reinitialize_state=None
    ),
    decomposer=Decomposer(
        size=10,
        min_gain=None,
        rolling=True,
        rolling_history=1.0,
        silent_rewind=True,
        traversal='energy'
    )
)

Parameter Details

For a complete overview of available parameters and their usage, see the QBSolvLikeQpu API Reference.


Usage

from luna_quantum import LunaSolve

LunaSolve.authenticate("<YOUR_LUNA_API_KEY>")

# Define your model and algorithm
model = ...
algorithm = ...

solve_job = algorithm.run(model, name="my-solve-job")

API Reference

Bases: QBSolvLikeMixin, LunaAlgorithm[DWaveQpu]

QBSolv-like algorithm for QPU.

QBSolv QPU splits the problem into parts and solves them using the Tabu Search algorithm. For this purpose, the DWaveSampler is used.

Attributes:

Name Type Description
decomposer_size int

Size for the decomposer. Determines the maximum subproblem size to be sent to the quantum processor, with larger values potentially improving solution quality at the cost of increased processing time.

rolling bool

Whether to use rolling for the solver. When enabled, this allows for smoother transitions between subproblems during the decomposition process.

rolling_history float

Rolling history parameter for the solver. Controls how much previous iteration information is considered when solving subsequent subproblems.

max_iter int | None

Maximum number of iterations. Limits the total number of decomposition and solving cycles performed by the algorithm.

max_time int

Time in seconds after which the algorithm will stop. Provides a time-based stopping criterion regardless of convergence status.

convergence int

Number of iterations with unchanged output to terminate algorithm. Higher values ensure more stable solutions but may increase computation time.

target float | None

Energy level that the algorithm tries to reach. If this target energy is achieved, the algorithm will terminate early.

rtol float

Relative tolerance for convergence. Used when comparing energy values between iterations to determine if convergence has been reached.

atol float

Absolute tolerance for convergence. Used alongside rtol when comparing energy values to determine convergence.

num_reads int

Number of reads for the solver.

num_retries int

Number of retries for the solver.

quantum_annealing_params QuantumAnnealingParams

Quantum annealing parameters.

decomposer Decomposer

Decomposer: Breaks down problems into subproblems of manageable size Default is a Decomposer instance with default settings.

atol class-attribute instance-attribute

atol: float = DEFAULT_ATOL

backend class-attribute instance-attribute

backend: BACKEND_TYPE | None = Field(default=None, exclude=True, repr=False)

convergence class-attribute instance-attribute

convergence: int = 3

decomposer class-attribute instance-attribute

decomposer: Decomposer = Field(default_factory=Decomposer)

decomposer_size class-attribute instance-attribute

decomposer_size: int = 50

max_iter class-attribute instance-attribute

max_iter: int | None = 100

max_time class-attribute instance-attribute

max_time: int = 5

model_config class-attribute instance-attribute

model_config = ConfigDict(
    arbitrary_types_allowed=True, extra="allow", validate_assignment=True
)

num_reads class-attribute instance-attribute

num_reads: int = 100

num_retries class-attribute instance-attribute

num_retries: int = 0

quantum_annealing_params class-attribute instance-attribute

quantum_annealing_params: QuantumAnnealingParams = Field(
    default_factory=QuantumAnnealingParams
)

rolling class-attribute instance-attribute

rolling: bool = True

rolling_history class-attribute instance-attribute

rolling_history: float = 0.15

rtol class-attribute instance-attribute

rtol: float = DEFAULT_RTOL

target class-attribute instance-attribute

target: float | None = None

get_compatible_backends classmethod

get_compatible_backends() -> tuple[type[DWaveQpu], ...]

Check at runtime if the used backend is compatible with the solver.

Returns:

Type Description
tuple[type[IBackend], ...]

True if the backend is compatible with the solver, False otherwise.

get_default_backend classmethod

get_default_backend() -> DWaveQpu

Return the default backend implementation.

This property must be implemented by subclasses to provide the default backend instance to use when no specific backend is specified.

Returns:

Type Description
IBackend

An instance of a class implementing the IBackend interface that serves as the default backend.

run

run(
    model: Model | str,
    name: str | None = None,
    backend: BACKEND_TYPE | None = None,
    client: LunaSolve | str | None = None,
    *args: Any,
    **kwargs: Any,
) -> SolveJob

Run the configured solver.

Parameters:

Name Type Description Default
model Model or str

The model to be optimized or solved. It could be an Model instance or a string identifier representing the model id.

required
name str | None

If provided, the name of the job. Defaults to None.

None
backend BACKEND_TYPE | None

Backend to use for the solver. If not provided, the default backend is used.

None
client LunaSolve or str

The client interface used to interact with the backend services. If not provided, a default client will be used.

None
*args Any

Additional arguments that will be passed to the solver or client.

()
**kwargs Any

Additional keyword parameters for configuration or customization.

{}

Returns:

Type Description
SolveJob

The job object containing the information about the solve process.