mindquantum.algorithm.qaia.ASB#
- class mindquantum.algorithm.qaia.ASB(J, h=None, x=None, n_iter=1000, batch_size=1, dt=1, xi=None, M=2, backend='cpu-float32')#
Adiabatic SB algorithm.
Reference: Combinatorial optimization by simulating adiabatic bifurcations in nonlinear Hamiltonian systems.
Note
For memory efficiency, the input array ‘x’ is not copied and will be modified in-place during optimization. If you need to preserve the original data, please pass a copy using x.copy().
- Parameters:
J (Union[numpy.array, scipy.sparse.spmatrix]) – The coupling matrix with shape (N x N).
h (numpy.array) – The external field with shape (N, ).
x (numpy.array) – The initialized spin value with shape (N x batch_size). Will be modified during optimization. If not provided (
None), will be initialized as random values uniformly distributed in [-0.01, 0.01]. Default:None.n_iter (int) – The number of iterations. Default:
1000.batch_size (int) – The number of sampling. Default:
1.dt (float) – The step size. Default:
1.xi (float) – positive constant with the dimension of frequency. Default:
None.M (int) – The number of update without mean-field terms. Default:
2.backend (str) – Computation backend and precision to use: ‘cpu-float32’, ‘gpu-float32’,’npu-float32’. Default:
'cpu-float32'.
Examples
>>> import numpy as np >>> from mindquantum.algorithm.qaia import ASB >>> J = np.array([[0, -1], [-1, 0]]) >>> solver = ASB(J, batch_size=5) >>> solver.update() >>> print(solver.calc_cut()) [1. 1. 1. 1. 1.] >>> print(solver.calc_energy()) [-1. -1. -1. -1. -1.]
- update()#
Dynamical evolution based on Modified explicit symplectic Euler method.