[Перевод] DIY квантовые вычисления: как я начал собирать квантовые схемы
Квантовые вычисления — это прекрасный, сложный, новый мир, но нам не обязательно ждать разработок из Кремниевой долины, чтобы начать экспериментировать самим. На деле существует малоизвестный, но вполне доступный способ собрать квантовый компьютер самостоятельно.
В 2000 году учёные Книлл, Лафламм и Милбурн разработали метод выполнения квантовых вычислений, который позднее был назван протоколом KLM. По сути, они обнаружили возможность выполнения любых теоретических квантовых вычислений с помощью просто грамотно выстроенной оптики, в частности, зеркал.
Используя квантовые свойства света и протокол KLM, мы можем быстро и недорого создавать кубиты с помощью готовых оптических компонентов и электроники. Лучевые делители доступны всего по ~$20, что делает протокол KLM самым дешёвым методом реализации устройства для квантовых вычислений. Такая доступность позволила мне заняться изучением этой технологии прямо у себя дома.
▍ Квантовая случайность
Для нас действия квантовых систем выглядят «естественно» случайными. Фактическое действие субатомной частицы определяется вероятностью возникновения этого действия при его наблюдении, что делает эту технологию отлично подходящей для генерации случайности и энтропии.
В связи с этим первая собранная мной квантовая схема представляла простой генератор случайных чисел, основанный на протоколе KLM. С помощью лучевого делителя можно создавать два различных оптических пути или состояния фотона на основе его поляризации. Определяет эту возможность то, что светоделитель отражает горизонтально поляризованный свет, не препятствуя протеканию вертикально поляризованного.
Само по себе это не особо интересно, но свет обладает и ещё одной особенностью, известной как суперпозиция, когда фотон может выступать либо как частица, перемещающаяся по одному из двух путей, либо как волна, перемещающаяся одновременно по обоим. Этот эффект впервые пронаблюдал Томас Юнг в своём известном двухщелевом эксперименте.
И именно здесь возникает странное явление. Если фотон при прохождении светоделителя не окажется идеально поляризован горизонтально или вертикально, то одновременно и отразится, и пройдёт через щель. И только когда фотон оказывается обнаружен, он «коллапсирует» из волнообразного состояния обратно в частицу, оказываясь случайно в одном из состояний.
Запутал? Рекомендую приведённое ниже видео физика Евгения Хуторянского, в котором всё это объясняется намного нагляднее и интереснее.
▍ Объяснение квантовой механики
▍ Измерение света
Если вооружиться описанными выше знаниями, то создать квантовое устройство окажется несложно. Мы будем пропускать луч света через светоделитель и измерять его. Но как измерить свет?
Ответ прост. Несмотря на существование высокотехнологического (и дорогого) оборудования для измерения фотонов, проще всего вести измерение света с помощью фоторезистора.
Суть фоторезистора в том, что он позволяет изменять сопротивление цепи на основе того, сколько фотонов с ним проконтактировало. Когда фотоны достигают его поверхности, сопротивление цепи снижается, и напряжение в цепи растёт.
Фоторезисторы стоят наравне с транзисторами и светодиодами, что делает их очень доступным компонентом для самодельных квантовых устройств.
▍ Немного о состояниях фотонов
В нашем квантовом компьютере в качестве кубитов будут использоваться линейно поляризованные фотоны. Это даёт два возможных состояния кубита: горизонтально поляризованный и вертикально поляризованный, а также суперпозицию, которая может быть любым углом между 0 и 90°. Вкратце эти состояния продемонстрированы ниже в текстовом виде:
- вертикально поляризованный свет:
|
- горизонтально поляризованный свет:
__
- суперпозиция:
/
▍ Разработка квантовой схемы
При разработке квантовых компьютеров всё начинается с алгоритма. Вам нужно знать, какие именно действия должна выполнять квантовая схема, прежде чем вы сможете манипулировать частицами для получения желаемого.
Для нашей же первой квантовой схемы алгоритм будет очень прост:
- Подать импульс на лазерный диод для генерации фотонов.
- Пропустить эти фотоны через лучевой делитель.
- Измерить состояния V и H выходящих из делителя фотонов с помощью фоторезисторов.
- Если в состоянии H напряжение выше (меньше сопротивление, больше фотонов), чем в состоянии V, вернуть 0.
- Если наоборот, вернуть 1.
- Если напряжение окажется равным, алгоритм повторить.
Теперь можно перейти к созданию нашего квантового генератора случайных чисел.
▍ Прошивка Arduino
/* Annotated QRNGv1 Firmware V1.1
* Author: Noah G. Wood
*
* Copyright (c) 2019 Spooky Manufacturing, LLC
* License: GPLv3.0
*
*/
int triggerPin = 2; // Этот пин будет создавать импульс в квантовой схеме
int hPin = A0; // Этот пин измеряет горизонтально поляризованные фотоны
int vPin = A1; // Этот пин измеряет вертикально поляризованные фотоны
float H = 0;
float V = 0;
void setup() {
// Установка triggerPin и последовательного подключения
pinMode(13, OUTPUT);
pinMode(triggerPin, OUTPUT);
Serial.begin(9600);
}
int Random() {
// Подача импульса на лазер
digitalWrite(triggerPin, HIGH);
delay(3);
digitalWrite(triggerPin, LOW);
// Считывание фоторезисторов
H = analogRead(hPin);
V = analogRead(vPin);
// Определение случайного бита
if(H>V) { // Если фотонов больше в состоянии H, вернуть 0
return 0;
} if(H < V) { // Если фотонов больше в состоянии V, вернуть 1
return 1;
} else {
/* Одинаковое число фотонов в обоих режимах.
На самом деле нередкий случай. Для наших целей мы просто
будем выполнять функцию рекурсивно, пока не сгенерируется случайный бит
*/
Random();
}
}
void loop() {
// Основная программа
// Запуск программы и вывод случайного бита на последовательный порт
Serial.print(Random());
}
▍ Оптическая схема
Оптическая схема: лазерный диод, направленный на лучевой делитель. Каждый выходной путь делителя направлен на отдельный фоторезистор, характеристики которых замеряются с помощью Arduino Uno
▍ Необходимые компоненты
Если вы захотите собрать всё это сами, то вот список того, что вам потребуется (я использовал именно эти компоненты):
- Arduino Uno;
- фоторезисторы;
- лучевой делитель 50/50;
- красный лазерный светодиод 650нм;
- пластилин;
- Arduino Breadboard Shield;
- корпус (в этом случае я его заказал, но в первых прототипах использовал просто картонные коробки)
О доставке лучевых делителей:
Доставка светоделителей может затянуться, так как идут они из Китая. Я бы посоветовал заказывать эти компоненты в Edmund, но у нас нет необходимости использовать в домашних экспериментах столь дорогостоящее оборудование лабораторного уровня — пока.
Советы:
- для крепления макетной платы и лазерного диода используйте небольшой пластилиновый шарик;
- оденьте хлопковые перчатки, чтобы не заляпать оптику;
- во время использования накрывайте устройство для исключения доступа внешнего света.
▍ Проблема одного фотона
Для этого проекта можно использовать импульс лазера, состоящий из триллионов фотонов. Просто измеряя оба «состояния» и сравнивая сдвиг напряжения, можно легко определить, какое значение должен дать коллапсировавший кубит. Однако для более продвинутых проектов, включающих квантовую запутанность (в которой и заключается вся мощь квантового вычисления), необходимо использовать — так называемые источники одного фотона.
К сожалению, реализовать надёжную генерацию одного фотона не так просто. Та же квантовая случайность, которая обещает нам потенциал, далеко выходящий за возможности цифровых компьютеров, правит и созданием фотонов. И именно поэтому на рынке пока не существует идеального источника, генерирующего их по одному, хотя уже проводились многообещающие исследования с нано-алмазами, которые могут привести к созданию доступных коммерческих квантовых компьютеров.
Тем не менее путём ослабления лазерного луча и любитель вполне может создать достаточно надёжный источник одиночных фотонов для собственного использования, но это решение не идеально и несёт свои собственные сложности.
▍ Создание запутанных состояний
Запутанность представляет собой ещё одну большую проблему при создании собственных оптических квантовых схем. В конце концов, фотоны же не взаимодействуют друг с другом — как они могут запутаться? Но те же гении (серьёзно, гении), которые разработали протокол KLM, также нашли способ использовать простые оптические компоненты для запутывания фотонов с помощью нелинейных гейтов, вводящих сдвиг фаз, и, знаю, прозвучит как научная фантастика: телепортации.
Честно скажу, ни тот ни другой принцип я до конца не понимаю. Если вам интересно побольше узнать об этом, то лучше обратиться к странице Википедии (англ.), посвящённой протоколу KLM. Я сам лично работаю над этим в своей домашней мастерской, но пока ничего особого не добился.
▍ Открытые проекты квантовых вычислений
Моё восхищение квантовыми вычислениями, которое привело меня к сборке собственного квантового компьютера, также подтолкнуло меня к запуску Spooky Manufacturing, опенсорсного стартапа квантовых вычислений.
На данный момент мы ведём репозиторий на GitHub, где приведены полноценные инструкции, схемы и ПО для экспериментирующих с этой технологией (всё под открытой лицензией GPLv3).
Приглашаю желающих также ознакомиться и с другими проектами. Сейчас в разработке у нас находятся два инструмента:
- QEDA: программное обеспечение для автоматизации разработки оптических схем;
- QController: программа для тестирования квантовых схем.
Мы надеемся, что эти инструменты сделают проектирование, сборку и программирование самодельных квантовых компьютеров таким же простым и увлекательным занятием, как работа с Arduino или Raspberry Pi.
Эта статья написана в меру компетентности знаний автора. Все её содержание предназначено исключительно в качестве информационных или развлекательных целей и не является личным советом или профессиональной рекомендацией для применения в финансовых, юридических, технических вопросах или бизнесе.