Esempio n. 1
0
 def test_sa(self):
     for i in range(self.trotterslices):
         spinVector = np.array([ 2*self.rng.randint(2)-1 
                                 for k in range(self.nspins) ], 
                               dtype=np.float64)
         tannealingsched = np.linspace(self.preannealingtemp,
                                       self.annealingtemp,
                                       self.annealingsteps)
         sa.Anneal(tannealingsched, 
                   self.annealingmcsteps, 
                   spinVector, 
                   self.nbs,
                   self.rng)
         # with the given parameters, they have surely found a ground state
         assert(np.sum(spinVector[:4]) == 4 or
                np.sum(spinVector) == -8)
         assert(sa.ClassicalIsingEnergy(spinVector, self.isingJ) == -8.0)
Esempio n. 2
0
#     nspins,
#     isingJ,
#     4,
#     'ising_instances/santoro_80x80_neighbors.npy'
#     )
neighbors = np.load('ising_instances/santoro_80x80_neighbors.npy')
# initialize the states
spinVector = np.array([2 * rng.randint(2) - 1 for k in range(nspins)],
                      dtype=np.float)
configurations = np.tile(spinVector, (trotterslices, 1)).T
print("Initial state energy: ", sa.ClassicalIsingEnergy(spinVector, isingJ))
print '\n'
# Try just using SA
tannealingsched = np.linspace(preannealingtemp, annealingtemp, annealingsteps)
t0 = time.time()
sa.Anneal(tannealingsched, annealingmcsteps, spinVector, neighbors, rng)
t1 = time.time()
print("Final SA energy: ", sa.ClassicalIsingEnergy(spinVector, isingJ))
print str(
    np.sum(spinVector == groundstate)) + '/' + str(nspins) + ' spins agree'
print "SA time (seconds): ", str(t1 - t0)
print '\n'

# Now do PIQA
preannealingsched = np.linspace(preannealingtemp, annealingtemp, 100)
annealingsched = np.linspace(fieldstart, fieldend, annealingsteps)
t0 = time.time()
sa.Anneal(preannealingsched, 1, spinVector, neighbors, rng)  # preannealing
qmc.QuantumAnneal(annealingsched, annealingmcsteps, trotterslices,
                  annealingtemp, nspins, configurations, neighbors, rng)
t1 = time.time()
Esempio n. 3
0
# Generate list of nearest-neighbors for each spin
neighbors = tools.GenerateNeighbors(nspins, isingJ, 8)
# keep a count of the populations
coinc_sa = np.zeros(2**nspins)
coinc_qa = np.zeros(2**nspins)

print("")
print("# samples", samples)

# Try using SA (random start)
for sa_itr in xrange(samples):
    spinVector = np.array([2 * rng.randint(2) - 1 for k in range(nspins)],
                          dtype=np.float)
    starten, startstate = (sa.ClassicalIsingEnergy(spinVector, isingJ),
                           getbitstr(spinVector))
    sa.Anneal(tannealingsched, tannealingmcsteps, spinVector, neighbors, rng)
    bitstr = getbitstr(spinVector)
    coinc_sa[int(bitstr, 2)] += 1

# Now do PIQA
qmc_errors_diff = 0
for s in xrange(samples):
    confs = np.tile(
        np.array([2 * rng.randint(2) - 1 for k in range(nspins)],
                 dtype=np.float), (trotterslices, 1)).T
    qmc.QuantumAnneal(annealingsched, annealingmcsteps, trotterslices,
                      annealingtemp, nspins, confs, neighbors, rng)
    if not np.all(np.sum(confs, axis=1) / trotterslices == confs[:, 0]):
        qmc_errors_diff += 1
    else:
        bitstr = reduce(lambda x, y: x + y,
Esempio n. 4
0
])
# get the spin version
svec = 2 * msvec - 1
print("Initial state energy: ",
      sorted([sa.ClassicalIsingEnergy(v, isingJ) for v in svec]))
print '\n'

# Generate list of nearest-neighbors for each spin
neighbors = tools.GenerateNeighbors(nspins, isingJ, 4)

# SA annealing schedule
tannealingsched = np.linspace(preannealingtemp, annealingtemp, annealingsteps)
# Normal annealing routine
t0 = time.time()
for vec in svec:
    sa.Anneal(tannealingsched, annealingmcsteps, vec, neighbors, rng)
t1 = time.time()
print("Final SA energy: ",
      sorted([sa.ClassicalIsingEnergy(v, isingJ) for v in svec]))
print "SA time (seconds): ", str(t1 - t0)
print '\n'

# Now try multispin encoding
t0 = time.time()
sa.Anneal_multispin(tannealingsched, annealingmcsteps, msvec, neighbors, rng)
t1 = time.time()
print(
    "Final SA-multispin energies: ",
    sorted(
        [sa.ClassicalIsingEnergy(tools.bits2spins(v), isingJ) for v in msvec]))
print "SA-multispin time (seconds): ", str(t1 - t0)