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
#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: