When to use classical SA
Use solver="sa" when your problem has fewer than ~500 variables and lowest-latency results matter more than solution quality improvement from multiple runs. Classical SA starts in milliseconds versus ~1 second GPU initialization overhead.
It's also the right choice for reproducibility-critical workflows: with a fixed seed, classical SA produces identical results across every run, making it easier to debug QUBO formulations without introducing stochastic noise.
Usage
import nerox
client = nerox.Client()
job = client.optimize.qubo(
Q=Q_matrix,
solver="sa", # classical simulated annealing
n_sweeps=100000, # more sweeps compensate for single chain
seed=0, # fully reproducible
)
result = job.wait()
print(result.solution, result.objective)