Симулатор квантног рачунара
Напишите мало квантно коло или опишите прорачун високог нивоа, па га директно симулирајте и прегледајте резултате.
Модел шума
Прави квантни рачунари не рачунају савршено: кубити су веома осетљиви и при свакој нежељеној интеракцији са околином – топлотом, електромагнетним пољима или суседним кубитима – губе део информације (декохеренција). Квантна кола и очитавање зато могу дати погрешне резултате. Модел шума омогућава истраживање тог утицаја.
Опишите прорачун функцијама quantum.add, quantum.subtract, quantum.multiply, quantum.divide или quantum.random. Ctrl+Enter покреће симулацију. Цела документација доступна је преко дугмета „Документација”.
Овај код је аутоматски генерисан из програма изнад и директно симулиран. Овде га можете ручно изменити и поново покренути.
Генерисано коло је ручно измењено. Груписање регистара зато је скривено у дијаграму; поновно покретање програма изнад преписаће те промене.
Највише 4000 знакова. Доступне методе QuantumCircuit: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (други назив: toffoli), swap, measureAll и run. Ctrl+Enter покреће симулацију.
Дијаграм кола
Приказ корака показује вероватноће и вектор стања непосредно после изабраног кола. Резултати мерења у наставку увек се односе на цело коло.
Формат OpenQASM 2.0
OpenQASM 2.0 је широко коришћен формат за размену квантних кола који, између осталих, чита Qiskit. Напомена о редоследу битова: овај симулатор q0 чита као најзначајнији леви бит, док Qiskit q[0] чита као најмање значајан бит – зато се низови битова приказују обрнутим редоследом.
Вероватноће
Вероватноћа мерења сваког могућег низа битова, тачно израчуната из вектора стања. Смер читања: q0 је леви, најзначајнији бит.
Блохове сфере
Стање сваког појединачног кубита приказано је стрелицом у Блоховој сфери: северни пол = |0⟩, јужни пол = |1⟩, а екватор = једнако пондерисана суперпозиција. Ако је стрелица приметно краћа од полупречника сфере, кубит нема сопствено чисто стање – спрегнут је са другим кубитима.
Резултати мерења
Колико пута се сваки низ битова стварно појавио у симулираним мерењима. Када постоји више могућих резултата, бројеви насумично одступају око тачних вероватноћа.
Вектор стања
Комплексне амплитуде из којих произлазе вероватноће: квадрат апсолутне вредности амплитуде (реални² + имагинарни²) даје вероватноћу припадајућег стања.
| Стање | Реални део | Имагинарни део |
|---|
Основе: како то ради?
Од програма до физичког кубита
Прави квантни рачунар је више од чипа. Класична управљачка електроника претвара коло у прецизне импулсе. У приказаном примеру ласери за хлађење, поновно побуђивање, управљање кубитом и очитавање обликују те сигнале на оптичком столу и усмеравају их кроз вакуумску комору ка физичком кубиту.
Кубит и базна стања
Класични бит има вредност 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°. Утицај постаје видљив тек у комбинацији са суперпозицијом: између два Адамарова кола фаза одређује како се амплитуде сабирају или поништавају (интерференција). Варијанте са ознаком dagger sdg(q) и tdg(q) ротирају у тачно супротном смеру и поништавају S и T. Правило гласи: два T чине S, а два S чине Z.
CNOT и условна спрегнутост
Коло CNOT cnot(control, target) преокреће циљни кубит само када је управљачки кубит у стању |1⟩. Ако је управљачки кубит претходно у суперпозицији, може настати спрегнутост – два кубита више се не могу описати независно, као у примеру Беловог стања. Ако је управљачки кубит у одређеном базном стању, CNOT делује као обична условна операција.
CZ: симетрични сродник CNOT
Коло CZ cz(a, b) мења предзнак амплитуде само када су оба кубита у стању |1⟩. За разлику од CNOT, нема одвојеног управљачког и циљног кубита – коло једнако делује на оба, па је у дијаграму приказано као две повезане тачке. CZ и CNOT могу се претворити једно у друго: CNOT је CZ коме је циљни кубит пре и после окружен Адамаровим колима.
GHZ стање: трострука спрегнутост
GHZ стање, названо по Гринбергеру, Хорну и Цајлингеру, проширује начело Беловог стања на три кубита: једно Адамарово коло и два CNOT спрежу сва три кубита тако да мерење даје само |000⟩ или |111⟩ – никада мешовите низове битова. Ниједан кубит више нема сопствено стање; информација постоји искључиво у заједничкој корелацији.
Дојчов алгоритам: најмања квантна предност
Дојчов алгоритам једним вредновањем непознатог пророчишта одговара на питање за које класичном рачунару требају два вредновања: да ли је функција константна или уравнотежена? Улаз пролази кроз пророчиште у суперпозицији, а интерференција затим претвара глобално својство функције у један мерљив бит.
Гроверово претраживање: појачавање амплитуда
Гроверово претраживање проналази означену ставку у несортираном скупу са знатно мање упита него класични поступак. Пророчиште означава тражено стање променом фазе, овде колом CZ, а оператор дифузије затим појачава његову амплитуду и смањује остале.
Реверзибилно сабирање: од quantum.add() до кола
Уређивач програма преводи quantum.add({ a, b }) у коло X, CNOT и CCNOT (Тофоли) које изводи класично сабирање потпуно реверзибилно: свако коло може се тачно поништити јер се информације не одбацују. Коло CCNOT (ccnot(c1, c2, target)) преокреће циљни кубит само када су оба управљачка кубита |1⟩ – то је довољно као градивни елемент за реверзибилно извођење сваког класичног кола, укључујући потпуни сабирач са преносом. Улази A и B прво се колима X постављају у одређена базна стања без суперпозиције. Пошто цело коло quantum.add() даје одређен резултат упркос квантној симулацији, испод се не појављује више могућих стања са вероватноћама мањим од 100%.
Одузимање: сабирање обрнутим редом
Пошто су сва кола квантног кола тачно инвертибилна, цело коло сабирача може се извести уназад – и сабирање постаје одузимање: quantum.subtract({ a, b }) користи управо кола сабирача обрнутим редом и тако рачуна a − b. То није трик, већ основно начело реверзибилног рачунања: ниједан корак не уништава информацију и сваки корак може се поништити. У овом извођењу a мора бити веће или једнако b.
Множење: quantum.multiply()
Множење настаје из истих реверзибилних градивних елемената као сабирање: према школском поступку чинилац a сабира се више пута на помереним положајима, у складу са постављеним битовима чиниоца b. Свако делимично сабирање затим враћа помоћне кубите у почетно стање.
Дељење: 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 кубита. Прави квантни рачунари користе физичке кубите, изложени су шуму и декохеренцији и за поуздане резултате захтевају сложено управљање и исправљање грешака.