Exemple #1
0
 def qbsolv_solver(self, ising=True):
     """ qbsolv is for breaking up large optmisation problems into smaller
         ones for the D-Wave machines. 
         This function has not been properly implemented yet.
     """
     if ising:
         response = QBSolv().sample_ising(self.h, self.j)
     else:
         response = QBSolv().sample_qubo(self.q_dict)
     min_energy = 0
     for sample in response.data(['sample', 'energy']):
         sample_dict = {
             'sample': {k: int((1 + sample[0][k]) / 2)
                        for k in sample[0]}
         }
         sample_dict.update({'energy': sample[1]})
         self.samples.append(sample_dict)
         min_energy = min(sample[1], min_energy)
         self.solution = {
             f'x{k+1}': v
             for k, v in sample_dict['sample'].items()
             if k < len(self.masses)
         } if min_energy == sample[1] else self.solution
     self._solution_blocks()
     return response
Exemple #2
0
#from dwave_qbsolv import QBSolv
#from dwave.system.samplers import DWaveSampler
#from dwave.system.composites import EmbeddingComposite
#subqubo_size = 30
#sampler = EmbeddingComposite(DWaveSampler())
#resp = QBSolv().sample_qubo(Q, solver=sampler, solver_limit=subqubo_size)

# # Use LeapHybridSampler() for faster QPU access
# sampler = LeapHybridSampler()
# resp = sampler.sample_qubo(Q)

# First solution is the lowest energy solution found
sample = next(iter(resp))

# Display energy for best solution found
print('Energy: ', next(iter(resp.data())).energy)

# Print route for solution found
route = [-1] * node_count
for node in sample:
    if sample[node] > 0:
        j = node % node_count
        v = (node - j) / node_count
        route[j] = int(v)

# Compute and display total mileage
mileage = 0
for i in range(node_count):
    mileage += distances[route[i]][route[(i + 1) % node_count]]

print('Mileage: ', mileage)
from dwave_qbsolv import QBSolv
import neal
import itertools
import random

qubo_size = 2000
subqubo_size = 30
Q = {
    t: random.uniform(-1, 1)
    for t in itertools.product(range(qubo_size), repeat=2)
}

sampler = neal.SimulatedAnnealingSampler()
response = QBSolv().sample_qubo(Q, solver=sampler, solver_limit=subqubo_size)
for sample in response.data():
    print(sample[0], "Energy: ", sample[1], "Occurrences: ", sample[2])
    else:
        print('Sampling with classical solver...')
        sampler = 'sim'
        res = QBSolv().sample_qubo(Q, num_repeats=10)

    # check constraints
    samples = list(res.samples())
    energy = list(res.data_vectors['energy'])

    n_print = 20
    energies = []
    n_violations = []
    n_occ = []
    for num, sample in enumerate(
            res.data(fields=['sample', 'energy', 'num_occurrences'],
                     sorted_by='energy')):
        if num < n_print:
            sample_arr = np.array(
                [sample.sample[key] for key in sample.sample.keys()])
            violations = check_constraints(
                sample_arr,
                save='result/instantinsanity/nonsoln_problem{0}{1}'.format(
                    num, sampler),
                plot_soln=True)
            energy = sample.energy

            if num == 0:
                n_occ.append(sample.num_occurrences)
            elif energy == energies[-1]:
                n_occ[-1] += sample.num_occurrences
            else: