# Which Solver/Sampler Should I Use?

Reading through the descriptions of the solvers/samplers is probably a good place to start. Another great set of resources is the set of Jupyter Notebooks. They run through different samplers, show how the samplers compare, examine the inside of the samplers by working through examples, and so forth.

The QPU Samplers page includes the DWaveSampler, which is the basic QPU sampler, as well as the LeapHybridSampler, which is a simplified solution that we developed to help people solve very large problems (up to 10,000 variables) using only two simple parameters: input data and a time limit. The knapsack example uses the LeapHybridSampler with a BinaryQuadraticModel (BQM). A BQM is an in-house data model that can be constructed from either Ising or QUBO data.

The CPU solvers/samplers are all in dimod. They are good for getting an idea of how the samplers function without calling the QPU and for working on smaller problems and larger problems where you are more concerned with the processing of the data. They all function slightly differently, so be sure to look at the descriptions carefully. I often use the ExactSolver if I want to understand a small problem/proof of concept.

Understanding how samplers and composites fit together is important. The Samplers and Composites section talks about what each part does and touches on hybrid solutions. In the case of the QPU, the architecture is of a certain configuration (for the current QPU at the time of writing this article it's a Chimera Graph), so in order to plug an arbitrary set of dependencies in, an EmbeddingComposite is used to map the arbitrary problem to the QPU architecture in a process called minor embedding. The EmbeddingComposite as well as a number of other composites are described on the Composites page. The maximum cut example uses the EmbeddingComposite with the DWaveSampler and a QUBO.

We have a nonlinear-program solver that supports nonlinear programming, which is the process of solving an optimization problem where the objective function and constraints might not be linear. Such optimization problems are pervasive in business and logistics. The Ocean™ SDK’s dwave-optimization package enables highly efficient formulation of models for some optimization problems.

We also have a library called dwave-hybrid which provides workflows to allow for iterative samplings of the QPU, and comes with a preconfigured workflow called KerberosSampler. There are a number of samplers included that can be used in the workflows.