mindquantum.algorithm.qaia.SimCIM

View Source On Gitee
class mindquantum.algorithm.qaia.SimCIM(J, h=None, x=None, n_iter=1000, batch_size=1, dt=0.01, momentum=0.9, sigma=0.03, pt=6.5)[source]

Simulated Coherent Ising Machine.

Reference: Annealing by simulating the coherent Ising machine.

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 zeros. 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.

  • momentum (float) – momentum factor. Default: 0.9.

  • sigma (float) – The standard deviation of noise. Default: 0.03.

  • pt (float) – Pump parameter. Default: 6.5.

Examples

>>> import numpy as np
>>> from mindquantum.algorithm.qaia import SimCIM
>>> J = np.array([[0, -1], [-1, 0]])
>>> solver = SimCIM(J, batch_size=5)
>>> solver.update()
>>> print(solver.calc_cut())
[1. 1. 1. 0. 0.]
>>> print(solver.calc_energy())
[-1. -1. -1.  1.  1.]
initialize()[source]

Initialize spin.

update()[source]

Dynamical evolution.