ToolDingo

Квантов компютърен симулатор

Напишете малка квантова схема в JavaScript, симулирайте я директно във вашия браузър и вижте електрическата диаграма, вероятностите и вектора на състоянието. Или опишете изчисление на високо ниво (например добавяне) и гледайте как автоматично се превръща в истинска обратима квантова верига.

Модел на шума

Истинските квантови компютри не изчисляват перфектно: кубитите са изключително чувствителни и губят част от информацията си (декохерентност) чрез всяко нежелано взаимодействие с околната среда – топлина, електромагнитни полета, съседни кубити. Операциите на вратата също никога не са идеално прецизни и дори окончателното отчитане може да се обърка. Този симулатор изчислява идеално по подразбиране; тук можете да активирате типични модели на грешки и да наблюдавате техния ефект директно в резултатите.

Отнася се за всяка симулация на тази страница – за изпълнения на високо ниво и ръчно написани схеми.
%
На порта и включен кубит или на бит за четене за модела на четене. Изберете стойност за сценария, който искате да проучите.

Програмен код

Опишете изчисление с quantum.add, quantum.subtract, quantum.multiply, quantum.divide или quantum.random. Ctrl+Enter стартира симулацията. Пълна документация чрез бутона „Документация“.

Документация

Опишете изчисление в редактора – реална квантова верига се генерира автоматично от него и се симулира. Максимум 4000 знака. Ctrl+Enter стартира симулацията.

ФормулаОписаниеОграничения
quantum.add({ a, b })Добавете две числаРезултат макс. 4 бита (0–15)
quantum.subtract({ a, b })Изважданеa ≥ b, макс. 4 бита
quantum.multiply({ a, b })УмножениеФактори 0–7 (3 бита)
quantum.divide({ a, b })Деление (частно + остатък)b ≥ 1; много стегнат: битове(a)+битове(b)+битове(a÷b)+1 ≤ 10
quantum.random({ bits })Истинско квантово случайно числобитове 1–10

Изберете пример

Код на веригата

Максимум 4000 знака. Налични методи на QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (псевдоним: toffoli), swap, measureAll, run. Ctrl+Enter стартира симулацията.

Изберете пример

Основи: Как работи?

Схематична настройка на квантов компютър: контролен компютър насочва няколко лазерни лъча през оптична маса към кубит във вакуумна камера.
От класическия компютър за управление през лазери и оптика до физическия кубит.

От програма към физически кубит

Истинският квантов компютър е повече от чип. Класическата управляваща електроника преобразува веригата в прецизни импулси. В показания пример лазерите за охлаждане, повторна помпа, кюбит и отчитане оформят тези сигнали върху оптична маса и ги насочват към екранирана вакуумна камера. Там те променят и измерват състоянието на кубита; след това резултатът от измерването се връща към класическия компютър.

Qubit и основни състояния

Класическият бит е 0 или 1. Кубитът може допълнително да съществува в суперпозиция на двете основни състояния |0⟩ и |1⟩. При няколко кубита всички базови състояния се записват като битов низ, напр. |10⟩ за 2 кубита – къде q0 в този симулатор винаги е най-значимият (вляво) бит.

Суперпозиция

Кубит в суперпозиция едновременно носи компоненти на няколко основни състояния. Тези компоненти се описват като комплексни амплитуди; квадратът на големината на амплитудата дава вероятността за получаване на съответното състояние при измерване.

Сферата на Блок

Състоянието на един кубит може да се визуализира като стрелка в сфера: северният полюс представлява |0⟩, южния полюс |1⟩и всички точки на екватора са еднакво претеглени суперпозиции – фазата определя посоката по екватора, в която сочи стрелката. Ротационните врати rx, ryи rz завъртете стрелката около съответната ос, фазовите порти като S и T я завъртете около оста Z. При заплетени кубити стрелката се свива към центъра на сферата: тогава отделният кубит вече няма собствено чисто състояние – така че заплитането става буквално видимо.

Измерване и снимки

measureAll() измерва всички кубити наведнъж и прекратява веригата. Тъй като едно измерване дава само един произволен резултат, веригата концептуално се измерва "изстрели" пъти с run({ shots }), така че разпределението на вероятностите да се показва като хистограма. Точните вероятности се изчисляват допълнително директно от вектора на състоянието, независимо от случайността на изстрелите.

Портата Адамар

Портата на Адамард h(q) взема кубит от определено състояние (|0⟩ или |1⟩) в еднакво претеглена суперпозиция на |0⟩ и |1⟩ – така че около 50% / 50% при измерване.

Фазови порти: S и T

Портите s(q) и t(q) не променят вероятностите за измерване на един кубит; те само въртят фазата на |1⟩ амплитуда – S с 90°, T с 45°. Те показват своя ефект само в комбинация със суперпозиция: между две врати на Адамар фазата решава как амплитудите се комбинират или отменят (интерференция). Вариантите на камата sdg(q) и tdg(q) завъртете точно в обратната посока и отменете S и T. Правилото е: две T правят S, две S правят Z.

CNOT и условно заплитане

Портата CNOT cnot(control, target) обръща целевия кубит точно когато контролният кубит е в състояние |1⟩. Ако контролният кубит е в суперпозиция предварително, това може да създаде заплитане – тогава двата кубита вече не могат да бъдат описани независимо един от друг, както в примера със състоянието на Bell. Ако вместо това контролният кюбит е в определено базово състояние, CNOT извършва само условно преобръщане на битове без заплитане. Така че не всеки CNOT автоматично създава заплитане.

CZ: симетричен роднина на CNOT

Портата CZ cz(a, b) обръща знака на амплитудата точно когато и двата кубита са |1⟩. За разлика от CNOT, няма контрол и целеви кубит – портата действа еднакво и на двата кубита, поради което е начертана като две свързани точки на диаграмата. CZ и CNOT могат да бъдат преобразувани един в друг: CNOT е CZ, чийто целеви кубит преминава през врата на Адамар преди и след. CZ е централен градивен елемент на много алгоритми, като търсенето на Grover.

GHZ състояние: заплитане като трио

Състоянието GHZ (наречено на Greenberger, Horne и Zeilinger) разширява принципа на състоянието на Bell до три кубита: един Hadamard gate плюс два CNOTs оплитат и трите, така че измерването дава само |000⟩ или |111⟩ – никога смесени битови низове. Никой кубит вече няма собствено състояние; информацията се крие изключително в споделената корелация.

Deutsch алгоритъм: най-малкото квантово предимство

Алгоритъмът на Deutsch отговаря с една оценка на неизвестен оракул на въпрос, за който класическият компютър се нуждае от две оценки: постоянна ли е функцията или балансирана? Номерът е да изпратите входа през оракула в суперпозиция – благодарение на интерференцията отговорът след това е недвусмислено кодиран във входния кюбит. Принципът зад него (фазов откат) е в основата на почти всички квантови алгоритми.

Търсене на Grover: усилващи амплитуди

Търсенето на Grover намира маркиран запис в несортиран набор със значително по-малко заявки от класическите изисквания. Оракул маркира търсеното състояние с обръщане на фазата (тук чрез CZ порта), след което операторът на дифузия усилва маркираната амплитуда за сметка на всички останали. С 2 кубита, една итерация е достатъчна, за да се измери попадението със 100% вероятност.

Обратимо добавяне: от quantum.add() към верига

Редакторът на програмния код по-горе превежда quantum.add({ a, b }) във верига от гейтове X, CNOT и CCNOT (Toffoli), която възпроизвежда класическото събиране по чисто обратим начин: всеки гейт може да бъде отменен точно, защото не се изхвърля никаква информация. Порта CCNOT (ccnot(c1, c2, target)) обръща целевия кубит само когато и двата контролни кубита са |1⟩ – това е достатъчно като градивен елемент за повторно изграждане на всяка класическа схема обратимо, включително пълен суматор с пренасяне. Входовете A и B първо се инициализират като определени базови състояния (без суперпозиция) с помощта на X gates. Тъй като следователно цялата верига преминава само през определени състояния вместо суперпозиции, измерването в края дава точно един резултат със 100% вероятност – класически правилната сума. Ето защо quantum.add() дава детерминистичен резултат въпреки квантовата симулация, вместо няколко възможни състояния с вероятности под 100%.

Изваждане: събиране в обратен ред

Тъй като всеки гейт на квантовата верига е точно обратим, цялата верига на суматора може да се изпълни в обратна посока – и добавянето се превръща в изваждане: quantum.subtract({ a, b }) използва точно гейтовете на суматора в обратен ред и по този начин изчислява a − b. Това не е трик, а основният принцип на обратимо изчисление: никоя изчислителна стъпка не унищожава информацията, всяка стъпка може да бъде отменена. В тази версия се изисква a ≥ b, за да не се получи отрицателен резултат.

Умножение: quantum.multiply()

Умножението тук възниква от точно същите обратими градивни елементи като събирането: следвайки метода на учебника, фактор a се добавя няколко пъти в изместени позиции – съвпадайки със зададените битове на фактор b. Всяко частично добавяне е един и същ обратим суматор с пулсации; пренасянето се влива в следващия бит на продукта всеки път. Тъй като резултатният регистър расте заедно с продукта, факторите са ограничени до 3 бита (0–7) тук – само тогава факторът, продуктът и пренасящият кубит заедно се вписват в 10-те кубита на този симулатор.

Разделяне: quantum.divide()

Разделът също използва само обратими градивни елементи: quantum.divide({ a, b }) извършва дълго деление, изградено от изместени, обратими изваждания на делителя от остатъчния регистър; резултатът е коефициентът и остатъка (a = quotient · b + remainder). Защото дивидент, делител, частно и кубитът за заемане трябва да се побере в 10-те кубита заедно, разделянето е най-силно ограничената операция: bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 трябва да съдържа и делителя b трябва да бъде ≥ 1 (без деление на нула). Ако даден вход не отговаря на бюджета, редакторът го докладва, вместо да изчисли.

Истинска произволност: quantum.random()

Класическите компютри не могат да генерират истинска случайност – техните „случайни числа“ идват от детерминистични алгоритми (псевдослучайност). Квантовият компютър може: quantum.random({ bits }) поставя всеки бит в суперпозиция 50/50 с помощта на врата на Адамар и само измерването решава – фундаментално непредсказуемо – коя стойност излиза. На реалния квантов хардуер това е физически истинска произволност; този симулатор го имитира с псевдо-случайността на вашия браузър.

Симулатор срещу реален квантов хардуер

Този симулатор изчислява точно състоянието, като използва класическа аритметика с плаваща запетая във вашия браузър – това работи само защото тук се разглеждат изключително много малки вериги с до 10 кубита. Истинските квантови компютри използват физически кубити, податливи са на грешки (декохерентност, шум) и тяхното предимство се проявява само с много по-големи вериги, които вече не могат да бъдат симулирани класически на практика. Този инструмент е инструмент за обучение, а не истински квантов процесор.

Често задавани въпроси

Това истински квантов компютър ли е?
Не. Този инструмент е класически симулатор на вектор на състоянието, който изчислява точно математиката на малка квантова верига (до 10 кубита), използвайки аритметика с плаваща запетая във вашия браузър. Истинският квантов хардуер използва физически кубити и работи фундаментално различно.
Кой кубит е q0 в битов низ като "10"?
q0 винаги е най-значимият (вляво) бит. Следователно с 2 кубита x(0) създава състояние |10⟩, а не |01⟩.
Какво означава "изстрели"?
Shots е броят на симулираните повтарящи се измервания (1–10 000). Всеки изстрел на случаен принцип чертае резултат от измерването според точното разпределение на вероятностите на вектора на състоянието. Самите точни вероятности не зависят от случайността и се показват отделно.
Защо някои примери показват съобщение за грешка?
Обхватът на MVP позволява точно една верига с точно едно извикване run() след measureAll(). Невалидни qubit индекси, гейтове след measureAll(), невалидни ъгли или брой изстрели и синтактични грешки в кода се отхвърлят с разбираемо съобщение за грешка.
Какво правят портите на Hadamard, X и CNOT?
X разменя |0⟩ и |1⟩. Адамар превръща базисното състояние в еднакво претеглена суперпозиция. CNOT обръща целта си само когато контролата е |1⟩ и може да създаде заплитане, когато се комбинира със суперпозиция.
Как се създава заплитането?
Един пример прилага Адамард към първия кубит и след това CNOT към втория. Кубитите вече не могат да бъдат описани независимо и измерването води до корелирани резултати като |00⟩ или |11⟩.