Рубрика развивается при поддержке
Разработка
Sergei Shirkin
4150

Использование квантовых вентилей в библиотеке Qiskit на Python, часть первая

Всем привет! Меня зовут Сергей Ширкин, это моя первая публикация на vc.ru. Немного о себе: моя основная деятельность связана с математикой, машинным обучением и искусственным интеллектом.

В закладки

Я работаю дата сайентистом в Dentsu Aegis, а также являюсь деканом факультетов Искусственного интеллекта и Аналитики Big Data в GeekUniversity на образовательном портале GeekBrains.

С этой статьи я начинаю рассказ про то, как работать с квантовыми вычислениями на Python, используя библиотеку Qiskit. Этот цикл статей рассчитан на аудиторию, которая уже знает в общих чертах, что такое квантовые вычисления, а также владеет математикой на уровне первого курса вуза (в основном потребуется линейная алгебра и комплексные числа) и умеет программировать на Python. Здесь не будет научпопа и новостей, только квантовые вычисления в чистом виде. Если все пойдет хорошо, то также мы начнем изучать квантовое машинное обучение, библиотеку PennyLane и многое другое.

Итак, начинаем.

Квантовые вентили (quantum gates) в квантовых вычислениях играют примерно такую же роль, как логические операторы (НЕ, И, ИЛИ и т.д.) в вычислениях, выполняемых с помощью классических компьютеров. В частности, практически аналогично логическому оператору НЕ действует квантовый вентиль X: кубит, на который он воздействует, меняет свое значение на противоположное:

То же самое действие можно привести в векторной форме:

Загрузим необходимые модули из библиотеки qiskit (в данном примере используется квантовый симулятор, но можно также и использовать квантовый компьютер в качестве бэкенда) и запишем последовательность этих операций, а также в конце измерим состояние кубита:

from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister from qiskit import execute # Создание квантового регистра q = QuantumRegister(1) # Создание классического регистра c = ClassicalRegister(1) # Создание схемы circuit = QuantumCircuit(q, c) # Применение квантового вентиля X circuit.x(q[0]) # Измерение кубита circuit.measure(q, c) # Запуск операций на квантовом симуляторе result = execute(circuit , ’local qasm simulator’).result() print(result.get_counts())

Как известно, состояния кубита (квантового бита), в отличие от классического бита, помимо базисных состояний 0 и 1 (для кубита используются обозначения |0⟩ и |1⟩), может включать в себя также и сочетание этих состояний, взятых с определенной амплитудой. Такое явление, когда кубит находится сразу в двух состояниях с разной вероятностью (до измерения кубита его состояние не может быть точно установлено), называется суперпозицией. Амплитуда может быть не только положительной, но и отрицательной, а в общем случае она является комплексным числом. Квадрат модуля амплитуды равен вероятности состояния.

В данном примере кубит переходит в состояние суперпозиции - в этом случае такой, что вероятность возникновения состояний |0⟩ и |1⟩ равна 50% (несмотря на то, что их амплитуды противоположны по знаку). Для получения суперпозиции используется оператор Адамара:

Подействуем таким оператором на кубит, изначально имеющий состояние 1:

q = QuantumRegister(1) c = ClassicalRegister(1) circuit = QuantumCircuit(q, c) # получение состояния |1⟩ из состояния |0⟩ circuit.x(q[0]) # Применение оператора Адамара circuit.h(q[0]) # Измерение состояния кубита circuit.measure(q, c) # Запуск операций на квантовом симуляторе result = execute(circuit , ’local qasm simulator’).result() print(result.get_counts())

Состояние кубита, которое мы получили до измерения, соответствует одному из базисных векторов базиса Адамара, который обозначается как |-⟩. Получить из него другой базисный вектор |+⟩ можно с помощью квантового вентиля Z:

В коде применение вентиля Z выглядит так:

circuit.z(q[0])

Если производить измерение такого кубита в базисе векторов |0⟩ и |1⟩, то примерно в половине случаев будет получаться состояние |0⟩, а в другой половине |1⟩.

Мы рассмотрели применение простейших квантовых вентилей к однокубитной системе.

В следующей части изучим более сложные квантовые вентили, операции с двумя кубитами, а также рассмотрим работу с сервисом облачных квантовых вычислений IBM Q Experience.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Sergei Shirkin", "author_type": "self", "tags": [], "comments": 3, "likes": 22, "favorites": 42, "is_advertisement": false, "subsite_label": "dev", "id": 88875, "is_wide": true, "is_ugc": true, "date": "Mon, 21 Oct 2019 10:07:44 +0300", "is_special": false }
Облачная платформа
Основа для цифровизации бизнеса
0
{ "id": 88875, "author_id": 380838, "diff_limit": 1000, "urls": {"diff":"\/comments\/88875\/get","add":"\/comments\/88875\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/88875"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 235819, "last_count_and_date": null }
3 комментария
Популярные
По порядку
9

Хабр переехал на vc?

Ответить
3

Я бы ожидал такое прочесть на хабре

Ответить
1

Очень обрадовался когда увидел в названии Qiskit, но почему-то пропало желание читать после упоминания GeekBrains.

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }