پروژه — پیادهسازی شبیهساز و رمزگشای کد سطحی
خط لولهٔ کامل QEC را خودتان بسازید، از نویز تا منحنیهای خطای منطقی، فقط با Python و numpy. ابزارهای بیرونی — stim، pymatching، sinter — فقط بهعنوان مرجع برای اعتبارسنجی و مقایسه مجازند، هرگز بهعنوان هسته: نکته این است که هر عدد README شما با کدی تولید شود که خط به خط میفهمید. این پروژه، مقصد سطح-۳ (پیادهسازی) و سطح-۴ (مهندسی) بخش دهم است، و قویترین تکهٔ تنها شاهدی که میتوانید در نمونهکاری با هدف نقشهای QEC بگذارید.
دامنه و معماری
یک ابزار خط فرمان با سه لایه، که سخت از هم جدا میمانند:
noise.py— مدل نویز مداری: نویز دپلاریزاسیون (depolarizing) بهازای هر گیت، احتمال وارونگی بهازای هر ریست و هر اندازهگیری.code.py— کد سطحی چرخیده در فاصلهٔ d: چیدمان کیوبیتهای داده و سنجش، مجاورت بررسی-به-کیوبیت، یک دور استخراج سندروم.decode.py— رمزگشاهایی که روی تاریخچهٔ رویدادهای detector عمل میکنند (آرایهای سهبعدی: فضا × فضا × زمان).
شبیهساز فقط فریم پائولی را دنبال میکند (جبر bitset، ۳۴.۲) — هرگز بردار حالت نه. این میانبر نیست؛ همان تصمیم طراحی است که شبیهسازهای تولیدی میگیرند و همان است که اجرای ۱۰⁵ نمونه برای d = 7 را روی لپتاپ ممکن میکند.
نقطهعطفها
- M1 — کد تکراری سرتاسری. زنجیرهٔ یکبعدی، اندازهگیریهای بینقص، رمزگشایی کمینهوزن (آزمایش ۳۵.۹ تعمیمیافته به هر d). پذیرش:
p_Lاندازهگیریشده در d = 3 با3p^2 - 2p^3در حد خطای مونتکارلو میخواند؛ منحنیهای d = 3، 5، 7، 9 در p = 0٫۵ همدیگر را قطع میکنند. - M2 — چیدمان کد سطحی و دورهای سندروم. چرخیدهٔ d = 3 و d = 5: مجاورت بررسیها را بسازید، یک آزمایش حافظه با نویز پدیدارشناختی (خطاهای داده + وارونگی اندازهگیری) شبیهسازی کنید. پذیرش: با نویز صفر، صفر نقص؛ با فقط نویز اندازهگیری، نقصها بهصورت زوجهای زمانی ظاهر میشوند؛ راستیآزمایی عملگر منطقی با ساخت (دو رشتهٔ پلزنندهٔ مرز در ۳۵.۸).
- M3 — رمزگشای تطبیق. جفتکردن کمینهوزن را برای گراف دوبعدی هر دور پیاده کنید، سپس به تطبیق فضازمانی در طول دورها گسترش دهید (جفتکردن نقصها شامل زوجهای جداشده در زمان). هسته باید مال شما باشد: پیادهسازی گلبرگ، یا بهشکل قابلقبول union-find با مبادلهٔ دقتِ مستندشده. پذیرش: در d = 3،
p_Lرمزگشای شما با pymatching روی ۱۰⁵ نمونهٔ مشترک در حد میلههای خطا میخواند. - M4 — جاروب آستانه. p را از ۰٫۵٪ تا ۲٪ در نویز مداری جاروب کنید، d ∈ {3, 5, 7}، ≥ ۱۰⁴ نمونه در هر نقطه. پذیرش: منحنیها میان ۰٫۵٪ و ۱٫۵٪ همدیگر را قطع میکنند (تخمین آستانهٔ شما، با میله خطا)؛ زیر تقاطع، Λ > ۱ و فاصلهگذاری با
A(p/p_th)^((d+1)/2)تا ضریب ۲ میخواند. - M5 — گزارش. README با نمودارها (خطای منطقی در برابر فیزیکی، برازش Λ)، جدول زمان اجرا (نمونه/ثانیه بهازای هر d) و بخش صادقانهٔ محدودیتها. پذیرش: خواننده بتواند هر شکل را زیر ۳۰ دقیقه از مخزن بازتولید کند.
پروتکل اعتبارسنجی
بعد از هر نقطهعطف، همان آزمایش را با stim + pymatching اجرا کنید و خروجیها را diff کنید: شمار detector بهازای هر نمونه، وزنهای تطبیق، نتایج منطقی. هر ناهمخوانی توضیحنیافته یا باگ در کد شماست یا در مدل ذهنیتان — هر دو بهوزن طلا. سه ناهمخوانی از این دست و علت ریشهایشان را در README مستند کنید؛ آن بخش به مصاحبهگر بیش از نمودارها میآموزد.
اهداف کششی (stretch goals)
- خطاهای قلاب مداری: نشان دهید در ترتیب سادهلوحانهٔ CNOT، نرخ خطای منطقی در فاصلهٔ ثابت بدتر میشود — درس ۳۶.۴ بهچشمآمده.
- جراحی شبکه: یک CNOT منطقی میان دو وصله پیاده کنید و نرخ خطای منطقیاش را در برابر مبنا حافظه بسنجید.
- یک رمزگشای عصبی آموزشدیده (MLP کوچک روی تاریخچههای detector) در مقایسه با تطبیق از نظر دقت، با سنجش صادقانهٔ تأخیر.
- مقایسهٔ qLDPC: همان دادهٔ سندروم را با BP+OSD رمزگشایی کنید و بحث کنید تطبیق کجا ساختاراً شکست میخورد.
- آزمون مقیاس: d = 11 با رمزگشای union-find؛ گزارش کنید پیادهسازی شما کجا از بلادرنگ عقب میافتد و چرا.
بودجهٔ زمان: ۳ تا ۶ هفته نیمهوقت. تحویلی، یک مخزن عمومی با تستها، نمودارها و گزارش اعتبارسنجی است — همان سازندهای که «بخش دهم را خواندم» را به «بخش دهم را ساختم» تبدیل میکند.