شبیه سازی یک کامپیوتر کوانتومی با Qiskit

شبیه سازی یک کامپیوتر کوانتومی با Qiskit

شبیه سازهای کوانتومی Qiskit-نحوه استفاده از آنها و کاربرد آنها

آیا می خواهید یادگیری ماشین کوانتومی را شروع کنید؟ نگاهی به یادگیری ماشینهای کوانتومی دستی با پایتون بیندازید.

در محاسبات کوانتومی ، ما از ویژگیهای اساسی فیزیک کوانتومی برای انجام محاسبات استفاده می کنیم: برهم نهی و درهم تنیدگی. به پدیده کوانتومی که در آن یک سیستم کوانتومی در ترکیب خطی پیچیده ای از حالات کوانتومی | 0⟩ و | 1⟩ وجود دارد. درهم تنیدگی یک رابطه بسیار قوی بین ذرات کوانتومی است. ذرات درهم تنیده حتی اگر با فواصل زیاد از هم جدا شده باشند کاملاً در ارتباط هستند.

صرف این واقعیت که ما قادر به استفاده از این پدیده ها برای انجام یک محاسبه هستیم ، حیرت انگیز است. اما این واقعیت که این نوع محاسبات ما را قادر می سازد تا مشکلات ظاهراً حل نشدنی را حل کنیم ، قابل تصور نیست.

شگفت آور اینکه ما حتی به رایانه های کوانتومی نیز احتیاج نداریم. ما می توانیم آنها را با استفاده از یک دفترچه روزمره شبیه سازی کنیم.

فرض کنید ما مدار کوانتومی زیر را داریم.

تصویر نویسنده

دروازه Hadamard را بر روی یک کیوبیت در حالت پایه | 0⟩ برای قرار دادن آن در حالت |+apply اعمال می کنیم. در این حالت ، ما 50٪ احتمال داریم که کیوبیت را 0 و 50٪ شانس آن را 1 داریم.

فهرست زیر این مدار را در Qiskit - SDK محاسبه کوانتومی IBM نشان می دهد.

Qiskit بسته Aer را ارائه می دهد. این پشتوانه های مختلفی را برای شبیه سازی مدارهای کوانتومی ارائه می دهد. بیایید با اولین مورد ، یعنی qasm_simulator شروع کنیم.

هنگامی که مدار کوانتومی (qc) خود را با پسوند qasm_simulator (یا هر باطن دیگر) اجرا کردیم ، می توانیم با استفاده از متد job.result () نتیجه را بدست آوریم. به ما می توانیم این نتیجه را به اعداد (get_counts ()) تبدیل کنیم که به هیستوگرام توزیع حاصله وارد می کنیم.

حتی اگر مدار کوانتومی ما کیوبیت تولید کند که با احتمال 50٪ آن را 0 می سنجیم ، نتیجه توزیع کمی متفاوت را نشان می دهد.

تصویر نویسنده

به این دلیل است که شبیه ساز qasm_simulator شمارش اندازه گیری را به صورت تجربی بازیابی می کند. پارامتر Shots به Qiskit می گوید که چند بار مدار را اجرا کرده و نتیجه اندازه گیری شده را بدست آورد. بنابراین نتیجه کاملاً دقیق نیست. اما هر چه تعداد شلیک ها بیشتر باشد ، نتیجه دقیق تر می شود.

شبیه ساز qasm فقط بیت های کلاسیکی را که هنگام اندازه گیری کیوبیت های خود استفاده می کنیم در نظر می گیرد. مطابق با مکانیک کوانتومی ، ما نمی توانیم وضعیت واقعی کیوبیت را ببینیم. فقط می توانیم آن را مکررا اندازه گیری کنیم تا وضعیت آن به دست آید.

البته دانستن وضعیت دقیق مفید خواهد بود یک کیوبیت - به خصوص در حین توسعه یک مدار کوانتومی.

خوشبختانه ، Qiskit باطن دیگری را ارائه می دهد ، شبیه ساز statevector_simulator. این شبیه ساز حالت دقیق کیوبیت را محاسبه می کند. هنگامی که از این شبیه ساز استفاده می کنیم ، مهم است که همه اندازه گیری ها را حذف کنیم زیرا اندازه گیری روی هم قرار گرفتن کوانتوم را از بین می برد و ناگزیر منجر به حالت قطعی سیستم می شود. اما ما علاقه مند هستیم برهم نهی کوانتومی قبل از فروپاشی.

کد زیر مدار کوانتومی به روز شده را نشان می دهد. توجه داشته باشید ، statevector_simulator پارامتر عکس ها را نمی گیرد.

مشابه با شبیه ساز qasm_s ، ما می توانیم شمارش را از نتیجه اجرا دریافت کنیم.

تصویر نویسنده

نتیجه احتمالات دقیق اندازه گیری را نشان می دهد.

اما چگونهاین کار را انجام می دهد؟

برای درک اینکه چگونه یک کامپیوتر کلاسیک می تواند مدار کوانتومی را محاسبه کند ، باید در نظر بگیریم که حالت کوانتومی (اینجا | 0⟩) ​​و عملگر کوانتومی (اینجا H) واقعاً چیست.

در مکانیک کوانتومی ، از علامت Dirac استفاده می کنیم که شبیه | 0⟩ است. این چیزی جز یک بردار ساده نیست.

عملگرهای کوانتومی معمولاً با حروف بزرگ مانند H. نشان داده می شوند ، اما آنها نیز چیز جالبی نیستند. عملگر کوانتومی یک ماتریس است.

در نهایت مدار کوانتومی اصلاً چیز جالبی نیست ضرب ماتریسی است. آره. کل مدار ماتریس H را با بردار | 0⟩ ضرب می کند و بردار دیگری تولید می کند ، همانطور که در معادله زیر نشان داده شده است.

بردار حاصله دامنه های اندازه گیری را نشان می دهد که مربعات آنها احتمالات اندازه گیری هستند. مربع 1/sqrt (2) 1/2 است.

از شیء results ، می توانیم بردار حاصله را با استفاده از متد get_statevector () بدست آوریم. خروجی آرایه ای از بردارهای حالت است. در مثال ما ، آرایه: .

باطن statevector_simulator وضعیت سیستم کوانتومی داده شده را محاسبه می کند. برای بررسی کیوبیت ها در حالت برهم نهی ایده آل است.

مدار کوانتومی ما از یک عملگر واحد تشکیل شده است - دروازه هادامارد. فرض کنید ، ما به جای آن یک دنباله کامل از دروازه ها را اعمال می کنیم. به عنوان مثال ، می توانیم سه دروازه HZH را اعمال کنیم (در این پست در مورد توالی HZH بیشتر بدانید).

تصویر نویسنده

وقتی مدار را اجرا می کنیم ، می بینیم که نتیجه آن 1 است (اگر کیوبیت در حالت | 0⟩ باشد). اگر می خواهید این نتیجه را به صورت ریاضی تأیید کنید ، باید سه ماتریس ضرب کنیم.

حتی برای ماتریس های کوچک ، ضرب آنها دست و پا گیر است. شما باید چندین ضرب را انجام دهید و باید اطمینان حاصل کنید که سطرها و ستون ها را با هم مخلوط نکنید.

بنابراین ، من همیشه از کامپیوتر برای ضرب ماتریس ها استفاده می کنم. هزاران ماشین حساب برای انجام این کار وجود دارد. اما راحت ترین آن داخل Qiskit است. این شبیه ساز واحد است.

این شبیه ساز یکبار مدار را اجرا می کند و ماتریس تبدیل نهایی خود مدار را برمی گرداند. مدار کوانتومی ما هرطور که باشد ، در نهایت یک ماتریس است. و اجرای مدار بر روی حالت ورودی به سادگی ماتریس تبدیل را با بردار حالت ضرب می کند. مجدداً ، هنگام استفاده از این شبیه ساز ، مدار ما نباید هیچ اندازه گیری داشته باشد.

کد زیر ماتریس مدار H-Z-H را خروجی می دهد. همانطور که می بینیم ، شبیه ماتریس NOT-gate است. بنابراین ، جای تعجب نیست که وقتی روی یک کیوبیت در حالت | 0⟩ اعمال می شود ، نتیجه یک کیوبیت در حالت | 1⟩ است که ما همیشه آن را به عنوان یک آرایه 1.

 ([
  [2.22044605e-16+6.1232340e-17j ، 1.00000000e+00-1.8369702e-16j] ،
  [1.00000000e+00-6.1232340e-17j ، -2.22044605e-16+6.1232340e-17j]
]) 

اگر محاسبات کوانتومی ضرب ماتریسی باشد ، موضوع مهم چیست؟

ضرب ماتریس چیز جالبی نیست. مشکل این است که به محاسبات زیادی نیاز دارد. هرچه ماتریس بزرگتر باشد ، (به صورت نمایی) تعداد عملیات ضرب مورد نیاز بیشتر است. بنابراین ، هرچه زمان ضرب ماتریس بیشتر طول بکشد. ما می توانیم ماتریس هایی با اندازه دلخواه را با یک کامپیوتر کلاسیک ضرب کنیم. تنها مشکل این است که (تقریبا) برای همیشه طول می کشد تا بزرگ (بیایید بگوییم بزرگ)ماتریس ها اکثر رایانه های کلاسیک قادر نخواهند بود با ماتریس های بزرگتر از 30x30 (م effectivelyثر) کار کنند.

اینجاست که رایانه های کوانتومی مطرح می شوند. آنها ماتریس های زیادی را در یک مرحله ضرب می کنند. اندازه ماتریس مهم نیست بنابراین ، آنها می توانند محاسباتی را انجام دهند که کامپیوترهای کلاسیک نمی توانند (در یک زمان معقول) انجام دهند. چگونه آنها از مکانیک کوانتومی برای انجام محاسبات استفاده می کنند. این بسیار فراتر از آن چیزی است که اکثر افراد (از جمله من) قادر به درک آن هستند.

اما محاسبه کوانتومی چندان پیچیده نیست. در اصل ضرب ماتریس است. در مقیاس کوچک ، کامپیوترهای کلاسیک در ضرب ماتریس بسیار خوب (و دقیق) هستند. بنابراین ، رایانه های کلاسیک می توانند آنچه را که یک کامپیوتر کوانتومی انجام می دهد شبیه سازی کنند.

اما با افزایش اندازه ماتریس ها ، رایانه های کلاسیک به مرزهای خود می رسند. سپس ، دیگر هیچ شبیه ساز به شما کمک نمی کند.

آیا می خواهید یادگیری ماشین کوانتومی را شروع کنید؟ نگاهی به یادگیری ماشینهای کوانتومی دستی با پایتون بیندازید.

سه فصل اول را به صورت رایگان در اینجا دریافت کنید.

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد