- tocdepth
2
Решение задачи в QUBO при помощи сэмплера Dwave
В инструкции рассмотрен пример решения задачи в формулировке в QUBO. Для решения используется образ виртуальной машины «Квантовый симулятор» на мощностях CPU и предустановленный в образе сэмплер Dwave. Вы запустите сэмплер Dwave, решите задачу с применением алгоритма имитации отжига , получите результаты решений и интерпретируете их.
Перед началом работы
Получите доступ к сэмплерам Dwave удобным способом:
удаленно в Jupiter Server с помощью инструкции;
локально с помощью команды в терминале:
pip install dwave-samplers
Запустите сэмплер
Чтобы запустить сэмплер DWave, отправьте в терминал команду:
sampler = SimulatedAnnealingSampler()
num_reads = 10
num_sweeps = 10**5
beta_range=[0.1, 4.2]
beta_schedule_type='geometric'
sample_set = sampler.sample_qubo(Q, num_reads = num_reads, num_sweeps = num_sweeps, beta_range=beta_range, beta_schedule_type=beta_schedule_type)
Где:
sampler
— объект решателя.num_reads
— количество запусков алгоритма.num_sweep
— максимальное количество итераций алгоритма.beta_range
— расписание отжига, последовательность обратных температуре величин.beta_schedule_type
— тип интерполяции между точками.
Подробнее о параметрах функции можно узнать в документации Dwave SimulatedAnnealingSampler.
Получите результаты
Отправьте в терминал команду:
print(sample_set)
В результате отобразится таблица:
0 1 2 3 4 5 6 7 8 9 energy num_oc. 0 0 1 0 0 1 0 1 0 1 1 -62.625568 1 1 0 1 0 0 1 0 1 0 1 1 -62.625568 1 2 0 1 0 0 1 0 1 0 1 1 -62.625568 1 3 0 1 0 0 1 0 1 0 1 1 -62.625568 1 4 0 1 0 0 1 0 1 0 1 1 -62.625568 1 5 0 1 0 0 1 0 1 0 1 1 -62.625568 1 6 0 1 0 0 1 0 1 0 1 1 -62.625568 1 7 0 1 0 0 1 0 1 0 1 1 -62.625568 1 8 0 1 0 0 1 0 1 0 1 1 -62.625568 1 9 0 1 0 0 1 0 1 0 1 1 -62.625568 1 ['BINARY', 10 rows, 10 samples, 10 variables]
Где:
Столбцы от 0 до 9 показывают полученные решения. Каждое число в строке, 0 или 1, соответствует одной из переменных в векторе решения.
Столбец
energy
показывает значение функции \(E(x)\). Это число указывает, насколько эффективно решение с точки зрения достижения минимального значения функции — чем меньше число, тем лучше.Столбец
num_oc
показывает, сколько раз конкретное решение было найдено.
Каждая строка в таблице представляет одну попытку решения задачи.
Выберите решение
Выберите решение одним из двух методов:
Чтобы получить конкретное решение, используйте метод
record
, отправив команду:n = 9 E = sample_set.record[n][1] x = sample_set.record[n][0] print("Energy is ",E) print("Solution is ",x)
Где:
n
— номер решения.E
— значение энергии, связанное с решением.x
— бинарный вектор, представляющий решение.
В результате отобразятся значения выбранного решения:
Energy is -62.625567961557635 Solution is [0 1 0 0 1 0 1 0 1 1]
Чтобы получить эффективное решение, используйте метод
first
, отправив команду:x = sample_set.first[0] print("Energy is ",E) print("Solution is ",x)
В результате отобразятся значения эффективного решения с точки зрения достижения минимального значения функции:
Energy is -62.625567961557635 Solution is {0: 0, 1: 1, 2: 0, 3: 0, 4: 1, 5: 0, 6: 1, 7: 0, 8: 1, 9: 1}
для Dev & Test