Як слідкувати за заплутуваннями при емуляції квантових обчислень?


9

Я намагаюся створити бібліотеку квантових обчислень як мій університетський проект. Я все ще вивчаю всі аспекти галузі квантових обчислень. Я знаю, що вже існують ефективні бібліотеки для квантової емуляції. Я просто хочу зробити своє, що допоможе мені зрозуміти деякі основні поняття квантових обчислень.

я знаю це n кубіти можна зберігати за допомогою 2nелемент складного масиву. Також, an кубітна брама - це 2n×2n2D масив. Отже, мої сумніви (в основному пов'язані із заплутуванням):

  1. Коли мені потрібно знайти тензорний виріб воріт (наприклад IHI, для 3кубітна система)? Чи завжди потрібно обчислити тензорний добуток порядку2n×2n, навіть якщо кубіти не заплуталися?

  2. Маючи лише a 2nЕлемент масиву (в якому я зберігаю коефіцієнти), чи можу я якось якось обчислити, які кубіти заплутані? Або мені потрібно зробити іншу структуру даних, щоб зберігати інформацію про заплутаність моєїn кубіти (про які кубіти заплуталися)?

  3. Чи моє 2-е питання насправді актуальне? Чи потрібно взагалі відслідковувати інформацію про заплутаність? Я маю на увазі, я не знаю, чи достатньо множення воріт із коефіцієнтами (навіть якщо система заплутана). Можливо, це актуально лише під час вимірювання.


1
Це залежить від nпередчасна оптимізація для відстеження шаблону заплутаності чи ні. Якщо у вас просто 3 кубіти, ви не дуже заробляєте, докладаючи зусиль, щоб це було "передчасною оптимізацією". Тож запитайте себе, наскільки масштабованою вам насправді це потрібно.
AHusain

1
@MidhunXDA "Я знаю, що відбувається фізично, але я не в змозі перетворити це на математичну форму". Наскільки мені відомо, існує безліч фізичних процесів, які призводять до квантових обчислень. Я думаю, що було б добре, якби ви точно описали один з тих фізичних процесів, які ви хочете наслідувати (або всі вони, якщо ви думаєте, що це все ще буде в межах питання). Я думаю, що уточнюючи це, це робить питання чіткішим та простішим у відповіді.
Дискретна ящірка

1
Будь ласка, розділіть це на кілька запитань - я бачу принаймні три чіткі.
Хізер

3
@heather Я погоджуюся з плакатом, що це справді всі питання, які є різними аспектами одного і того ж. Я не бачу, як вдосконалити питання, але я вважаю, що це досить добре розумію, щоб дати відповідь.
DaftWullie

2
@heather я настійно рекомендую модераторам не затримувати запитання самостійно, за винятком крайніх випадків (читайте: відверто поза темою чи спамом). На це питання, хоч трохи широкий, можна обґрунтовано відповісти в одному дописі. FWIW тут є в основному два питання: 1) Коли обчислити тензорні вироби воріт? 2) Як врахувати ефект заплутування при цьому?
Санчаян Дутта

Відповіді:


5

Безумовно, достатньо завжди обчислювати повне 2n×2n унітарна матриця, а потім застосуйте її до 2n-вкладний вектор стану. Якщо це ви вирішили зробити, це все, що вам потрібно зробити, оскільки вся інформація про заплутування міститься в цьому векторі. Швидкий і простий спосіб зрозуміти, чи заплутався той чи інший кубіт - це простежити частковий слід вашого (чистого) вектора стану над усіма іншими кубітами. Якщо отримана матриця має ранг 1, цей кубіт знаходиться в роздільному стані, інакше він заплутаний.

Я припускаю, що питання вашого питання насправді "Як можна уникнути цієї величезної обчислювальної вартості?". Взагалі, це не може - якщо ви використовуєте повну потужність квантового комп'ютера, вам завжди знадобиться це2n-вкладний вектор стану. Однак існують різні хитрощі, які знижують обчислювальні витрати, такі як затримка потреби в такому великому векторі стану шляхом відстеження заплутаності.

Підвищення ефективності

Найбільша економія, яку ви можете зробити в порівнянні з наївним реалізацією вище, - це уникати 2n×2nунітарні матриці. Наприклад, якщо ви використовуєте лише 1-або 2-кубітні ворота, просто використання розрідженості матриць означає, що вам потрібно лишеO(2n) зберігання замість O(22n).

Тоді є інші тактики, які ви можете використовувати. Наприклад, уявіть, що ви хочете застосувати унітарні двері з двома кубітамиU на кубітах i і j. Ви можете взяти набори з 4 елементів із вашого вектора стану (|x1,2,ni,j|yi,j для фіксованих x{0,1}n2 приймаючи всіх різних y{0,1}2) та просто застосування 4×4 унітарний Uна цьому 4-елементному векторі. Повторюючи це для кожногоx повернеться U діє на вихідний вектор стану.

Я думаю, є й інші стратегії, які можна було б придумати. Той, який запропонував себе з оригінального питання, - це відстеження заплутаності. Це забезпечує покращення пам’яті та швидкості на початку обчислення, але в кінцевому підсумку стає рівноцінним, оскільки (імовірно) все в квантовому комп’ютері в кінцевому підсумку заплутається.

Відстеження заплутаності

Припустимо, що ваше обчислення складається лише з унітарної еволюції та вимірювання на множиніn кубіти, тобто немає декогерентності, імовірнісних карт тощо. Давайте припустимо, що ви починаєте з повністю відокремленого стану, такого як |0n. У цей момент кожен кубіт відокремлений, і його достатньо для утриманняnрізні регістри, кожен з яких передає стан відокремленого кубіта. Якщо ваш перший хвірт - це лише операція з одним кубітомU на кубіт i, тоді ви просто оновите стан, збережений на кубіті i як |ψiU|ψi, і більше нічого не потрібно чіпати.

Якщо ви хочете зробити двоквітні ворота V між кубітами i і j, скажімо, тоді вам доведеться поєднувати штати на обох сайтах. Отже, ви замінюєте два регістри розмірності 2 на один регістр розмірності 4, що містить станV|ψi|ψj. Проблема полягає в тому, що тепер ви не можете знову розділити цей стан, тому вам доведеться зберігати ці два кубіти в реєстрі назавжди після. Звичайно, якщо у вас коли-небудь є 1-кубітна брамаU подати заявку на кубіт iтепер вам доведеться подати заявку |ψi,jUI|ψi,j. Потім, наступного разу, коли ви захочете 2-кубітний ворота між, скажімо,j і k, вам доведеться поєднати пробіли для (i,j) і k. Ці простори будуть постійно зростати, але якщо ворота локалізовані лише на одному просторі, потрібно лише застосувати його там (використовуючиI оператори розміщують його на решті кубітів), і вам не потрібно нічого робити в інших просторах.

Якщо ви робите такі речі, у вас не буде (принаймні, протягом перших кроків алгоритму) жодного 2nреєстр елементів. Вам доведеться мати купу різних регістрів і відслідковувати, які кубіти описуються, які реєструються в окремому масиві. Кожного разу, коли ви поєднуєте пробіли деяких кубітів, ви оновлюватимете цей додатковий масив.

Ось кілька дуже грубих псевдокодів, які можуть допомогти передати мій сенс:

#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}

#apply action of each gate
for each gate
   for each gate_target
       target_block=entangled_blocks entry containing gate_target
   next gate_target
   if all target_blocks equal then
      apply gate on target_block (pad with identity on other qubits)
   else
      new_entangled_block=union(target_blocks)
      new_state_vec=tensor_product(quantum_states for each target block)
      apply gate on new_state_vec (pad with identity on other qubits)
      replace all target_blocks in entangled_blocks with new_entangled_block
      replace all quantum_states(all target blocks) with new_state_vec
   end if
next gate

Інші параметри

(Ні в якому разі не вичерпний)

Можливо, вам буде цікаво почитати про стани Matrix Product, які є приємним способом інкапсуляції інформації про не надто заплутані стани, і які можуть запропонувати вам альтернативний шлях, залежно від того, що саме ви намагаєтеся досягти.


Я намагаюся досягти - це, звичайно, ефективність. Також я хочу точно знати, як працюють усі ці процеси (адже я - нобі). Отже, на практиці кращим вибором є просто збереження всіх кубічних коефіцієнтів разом в одному масиві (записи), правда? Дякую за відповідь.
Midhun XDA

@DaftWullie Ваше перше речення створює враження, що загалом потрібно було б зберігати повне 2n×2n унітарний, а не просто той 2nвектор.
Норберт Шуч

@MidhunXDA З точки зору ефективності, все по суті є рівнозначним, оскільки квантовий комп'ютер врешті змусить заплутатися все. Щоб дізнатися, що відбувається, вам, мабуть, краще починати з одного масиву, відповідного вектору стану. Але, використовуючи відстеження заплутаності, ви можете отримати деякі покращення швидкості та пам’яті, які мають дати можливість трохи довше моделювати.
DaftWullie

@NorbertSchuch Я сказав, що для цього "достатньо", це правда. Я додав додаткову інформацію про те, як цього уникнути. Ви, мабуть, знаєте інші, кращі тактики.
DaftWullie
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.