QC-کامپیوتر کوانتومی چیست؟

QC-کامپیوتر کوانتومی چیست؟

عکس توسط Nong Vang

Hype کنجکاوی را بر می انگیزد ، اما باعث ایجاد مزاحمت های غیر ضروری نیز می شود. گوگل ادعا می کند اولین برتری کوانتومی را با پردازنده کوانتومی Sycamore 53 کیوبیت خود که بر روی مدارهای ابررسانا ساخته شده است ، نشان داد. این امر بسیار مهم است زیرا هیچ رایانه ای مشکلی را حل نکرده است که رایانه های سنتی برای همیشه به آن نیاز دارند. گوگل ادعا می کند که ژنراتور تصادفی توصیف شده در مقاله در 200s انجام می شود ، در حالی که 10000 سال طول می کشد تا شبیه ساز ژنراتور توسط کامپیوتر کلاسیک شبیه سازی شود. این برتری کوانتومی است که جامعه تحقیقاتی به دنبال آن است. با این حال ، انتظار نداشته باشید که در ماه های آینده جهشی در محاسبات داشته باشیم. برای مشکلات جالب تر ، آنها هنوز به پیشرفت زیادی نیاز دارند.

بسیاری از مجلات به پیشرفت کوانتومی در نحوه ذخیره اطلاعات بیشتر کیوبیت ها نسبت به یک بیت دودویی که صفر یا یک است ، کمک می کنند. فرض کنید یک کیوبیت می تواند 1 میلیارد اطلاعات بیشتر از یک بیت دودویی داشته باشد ، یک دستگاه 53 کیوبیتی به سادگی معادل 6.6 گیگابایت دستگاه است. من 5 سال پیش یک لپ تاپ 16 گیگابایتی خریدم. اگر فکر می کنید محاسبات کوانتومی در مورد رمزگذاری اطلاعات بیشتر در یک "بیت" واحد است ، ما به طور کامل پتانسیل آن را به شدت از دست خواهیم داد. به جای این که به شما پاسخ 60 ثانیه ای با کلمات کلیدی بدهیم ، ما پایه لازم را ایجاد می کنیم تا بتوانیم موضوع را با عمق بیشتری کاوش کنیم. اطلاعات را به شکل 0 و 1s به نام بیت ذخیره می کند در حالی که یک کامپیوتر کوانتومی اطلاعات را در حالتهای بسیار غنی تر به نام کیوبیت رمزگذاری می کند. در حالی که یک بیت واحد دارای 2 حالت ممکن است ، یک کیوبیت می تواند در هر وضعیتی در سطح کره زیر باشد.

بنابراین ترویج رایانه های کوانتومی به عنوان راهی برای طراحی رایانه کوچکتر با ظرفیت بالاتر طبیعی به نظر می رسد. نه ، در واقع ، دانشمندان معتقد نیستند که ما به زودی یک کامپیوتر کوانتومی به اندازه یک لپ تاپ خواهیم داشت. در سال 2018 ، بزرگترین رایانه کوانتومی عمومی فقط 72 کیوبیت دارد.

اطلاعات کوانتومی در برابر اختلالات محیط آسیب پذیر است. مسائل با هم تعامل دارند. حتی پردازنده کوانتومی که کیوبیت ها را نگه می دارد کوچک است ، برای جداسازی کیوبیت ها به تجهیزات زیادی نیاز داریم.

اصلاح شده از منبع IBM

برای مثال ، به کامپیوتر کوانتومی IBM که دارای 50 کیوبیت است نگاهی بیندازید.

چپ (داخل کامپیوتر کوانتومی IBM 50 کیوبیت) راست (محفظه کامپیوتر کوانتومی)

برای جداسازی محیط زیست ، IBM کامپیوتر کوانتومی دارای یخچال رقیق کننده است تا پردازنده کوانتومی را تا 15 میلی درجه کلوین خنک کند. همچنین دارای کابل های زیادی است که پالس های مایکروویو را برای خواندن و دستکاری کیوبیت ها ارسال می کند. در فیزیک کوانتوم ، اندازه تجهیزات نقطه قوت آن نیست. برای دسترسی و کنترل در مقیاس کوانتومی ، ماشینها معمولاً بزرگتر می شوند تا کوچک. بنابراین "بیت در مقابل کیوبیت" بخشی از محاسبات کوانتومی است اما نه کل آن.

انگیزه

ابتدا ، ما باید انگیزه محاسبات کوانتومی را درک کنیم. در سال 1981 ، برنده جایزه نوبل ، ریچارد فاینمن ، پرسید: "ما از چه کامپیوتری برای شبیه سازی فیزیک استفاده می کنیم؟" در سخنرانی خود ،

طبیعت کلاسیک ، لعنتی و نیستاگر می خواهید شبیه سازی طبیعت را انجام دهید ، بهتر است آن را مکانیکی کوانتومی کنید ، و از نظر خوشی این یک مشکل فوق العاده است ، زیرا به نظر نمی رسد خیلی آسان باشد. مثال. تولید کود تقریباً 1.2 of از مصرف انرژی جهان را تشکیل می دهد. در فرآیند سنتز شیمیایی Haber-Bosch از کاتالیزور فلزی برای اتصال هیدروژن با نیتروژن در دمای بالا برای ایجاد آمونیاک استفاده می شود.

متأسفانه ، این فرآیند انرژی زیادی مصرف می کند. باکتری های موجود در خاک آنزیم های نیتروژناز تولید می کنند تا نیتروژن را از هوا خارج کرده و آمونیاک را در دمای معمولی تولید کنند. مدتی است که دانشمندان در حال بررسی این فرآیند رفع نیتروژن هستند.

منبع

با این حال ، در حالی که رایانه های ما می توانند پتا بایت اطلاعات (1،000،000 گیگابایت) را پردازش کنند ، به ندرت تعامل شیمیایی را برای خوشه F آنزیم نیتروژناز در بالا شبیه سازی می کند. این بخش بسیار کوچکی از آنزیم است که فقط شامل چهار اتم آهن و چهار اتم گوگرد است. با افزایش تعداد اتم ها ، فعل و انفعالات به صورت تصاعدی رشد می کند و برای روش کلاسیک بسیار دشوار می شود. این مشکل یک مسئله اساسی را در رایانه های فعلی ما نشان می دهد ، چگونه می توانیم سرعت محاسبات را افزایش دهیم؟

به عنوان مثال ، AI آموزش حجم عظیمی از داده ها را پردازش می کند. ما می خواهیم تا آنجا که ممکن است پردازش داده ها را موازی کنیم. برای CPU دو هسته ای زیر ، می توانیم دو کار را همزمان انجام دهیم. اما حتی با یک پردازنده 8 هسته ای ، این برای بسیاری از مشکلات AI کافی نیست.

برنامه ریزی وظایف در CPU دو هسته ای

بنابراین ، هوش مصنوعی مدلها بر روی پردازنده های گرافیکی (به عنوان مثال ، کارت گرافیک کامپیوتر) آموزش می بینند. برای پردازنده گرافیکی پیشرفته ، بیش از 4K+ هسته وجود دارد که می توانند خطوط مشابه عملیات را روی داده های 4K+ به طور همزمان موازی کنند.

منبع: Nvidia

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

این دلیل مسئله مقیاس پذیری مثال کود است.

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

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

رایانه های کوانتومی چه چیزی ارائه می دهند؟ به طور خلاصه ، گرفتاری و تداخل دو پدیده کوانتومی هستند که در DNA طبیعت ادغام شده اند. کامپیوترهای کوانتومی به آنها ارزان قیمت می دهند. ما همچنین می توانیم مقدار نمایی از اطلاعات را در کیوبیت ها با استفاده از برهم نهی رمزگذاری کرده و برهم نهی به طور موازی ، به جای یک داده در یک زمان ، دستکاری کنیم. این موازی سازی کوانتومی به ما امکان می دهد برخی از مسائل را سریعتر از الگوریتم های کلاسیک موجود حل کنیم. مهمتر از همه ، کاربرد رایانه های کوانتومی تنها به مشکلات دینامیک کوانتومی محدود نمی شود. راه حل هایی را در زمینه هایی ارائه می دهد که قبلاً تصور می شد بسیار پیچیده است. به عنوان مثال ، الگوریتم Shor برای شکستن رمزگذاری که معمولاً برای اینترنت استفاده می شود و یکی از اصلی ترین آنها محسوب می شود ، طراحی شده استنامزد در نشان دادن برتری کوانتومی بر محاسبات کلاسیک.

< p> به عنوان پیش نمایش ، یک سیستم 64 کیوبیتی دارای

ضرایبی که می توانیم اطلاعات را قبلاً رمزگذاری و دستکاری کنیم. موازی سازی کوانتومی به ما اجازه می دهد تا همه آنها را همزمان در ارائه محاسبات موازی دستکاری کنیم. به نظر می رسد جادویی است اما متأسفانه طبیعت باعث افزایش سرعت می شود. ما نمی توانیم مستقیماً به این ضرایب دسترسی پیدا کنیم. ما از طریق اندازه گیری به اطلاعات دسترسی داریم. با این حال ، حالت سقوط شده را باز می گرداند اما ضریب را نشان نمی دهد. این کار الگوریتم های کارآمد را بسیار سخت می کند.

سیستم 3 کیوبیتی

برای درک عمیق تر آن ، باید مقداری از دانش مکانیک کوانتومی را بدانیم.

چرخش

با خیال راحت این قسمت را با سرعتی که دوست دارید مرور کنید. اما درک ضد شهود مکانیک کوانتومی سرگرم کننده است.

بسیاری از ذرات و اتم ها رفتار مغناطیسی را پردازش می کنند و می توانند در زیر میدان مغناطیسی منحرف شوند. به عنوان مثال ، وقتی اتم های هیدروژن را بین دو آهن ربا شلیک می کنیم ، مسیر آن تغییر می کند.

منبع : Wikipedia

در مثال زیر ، ما ذرات را به سمت صفحه شلیک می کنیم.

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

اما چرخش یک آهنربا نیست! اگر آهن ربا باشد ، اتم ها باید بسته به چرخش به نقاط مختلف روی صفحه ضربه بزنند. در عوض ، ذرات فقط در دو منطقه اصلی فرود می آیند.

(توجه داشته باشید ، تنظیمات تجربی و توضیحات برای نمایش آسان تر ساده شده است.)

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

این یک چرخش بالا یا پایین است

بیایید ویژگی اسپین را کمی بیشتر بررسی کنیم. ما دو جعبه سیاه داریم که برای اندازه گیری چرخش تنظیم شده اند. در کادر اول ، چرخش رو به بالا را اندازه گیری می کنیم. ما آزمایش را طوری تنظیم کردیم که تمام ذرات خروجی در سمت راست دارای چرخش بالا و خروجی در پایین دارای چرخش پایین است. ذرات چرخش بالا را در جعبه دوم تغذیه می کنیم تا دوباره چرخش بالا را اندازه گیری کنیم. همانطور که انتظار می رفت ، 100٪ ذرات در سمت راست خارج می شوند. چرخش رو به بالا به عنوان یک چرخش بالا اندازه گیری می شود. img>

ما آزمایش را تکرار می کنیم مگر اینکه جهت آهنربا را در کادر دوم 180 درجه بچرخانیم تا چرخش رو به پایین اندازه گیری شود.

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

اکنون آخرین آزمایش را تنظیم می کنیم. در جعبه دوم و چهارم زیر ، آهنربا را در جهت عقربه های ساعت 90 درجه می چرخانیم. ما این اندازه گیری را چرخش مناسب می نامیم. جالب اینجاست که این راه اندازی با شگفتی های زیادی همراه است!

تمام ذرات خارج شده در جعبه اول دارای چرخش بالا هستند. بنابراین اندازه گیری چرخش برای جعبه 2 چیست؟ پاسخ آزمایشی این است که نیمی از ذرات به سمت راست و نیمی از ذرات به پایین خارج می شوند. با آنچه آهن ربا های کلاسیک پیش بینی می کنند متفاوت است. در مکانیک کلاسیک ، هیچ یک از آنها نباید چرخش مناسب داشته باشند. شگفتی دوم نصف استذرات به سمت راست و نیمه از پایین مجدداً در جعبه چهارم خارج می شوند. اما آیا همه ذرات چرخش پایین در جعبه 1 را از قبل فیلتر می کنیم؟ بنابراین چرا نیمی از آنها در حال چرخش پایین هستند؟

سعی کنید از شهود برای توضیح آن استفاده نکنید. شهود از تجربیات گذشته ایجاد شده است و اکثر مردم هرگز اشیاء را در مقیاس کوانتومی مشاهده نمی کنند.

بنابراین بگذارید با نظریه توطئه در مورد آنچه در حال رخ دادن است شروع کنیم. ایلان ماسک معتقد است که ما در دنیای شبیه سازی زندگی می کنیم. بنابراین اجازه دهید با این مفهوم شروع کنیم. ما در دنیای کامپیوتر زندگی می کنیم. همه اشیاء در صورت درخواست ایجاد می شوند. این بدان معناست که کامپیوتر یک شیء را تنها در صورت مشاهده آن ارائه می دهد. وقتی از خانه خارج می شوید ، مردی را در خیابان می بینید. رایانه یک برگه از گزینه های احتمالی با احتمالات مربوطه بیرون می آورد. به عنوان مثال ، 15 درصد احتمال دارد که مرد چشم سبز داشته باشد و 35 درصد احتمال دارد که چشم های قهوه ای داشته باشد و غیره ... بنابراین وقتی به صورت او نگاه می کنید ، کامپیوتر قطعه قطعه می کند و تعیین می کند که در نهایت با توجه به به تاس ها

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

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

اما هنگامی که چرخش اندازه گیری می شود ، طبیعت تصمیم می گیرد و وضعیت خود را بر اساس مقدار دامنه α در چرخش بالا یا پایین تنظیم می کند. بنابراین اندازه گیری ها حالت ها را تغییر می دهند. در مکانیک کلاسیک ، مشاهده ما باید به اندازه کافی ملایم باشد بنابراین نباید بر وضعیت ذرات تأثیر بگذارد. در مکانیک کوانتومی ، اندازه گیری ها روی هم قرار می گیرند تا یکی از حالت های ممکن مشاهده شده وجود داشته باشد. این قانون دینامیک کوانتومی است. به طور طبیعی ، ممکن است بپرسید چرا ما این قانون را داریم. پاسخ شخصی من این است که یا به عنوان یک قاعده اساسی در طبیعت (غیرقابل انکار) کدگذاری شده است یا فیزیک عمیق تری وجود دارد که باید کشف شود. در واقع ، توضیحات رقابتی از جمله تفسیر جهان های متعدد (معروف به جهان موازی) وجود دارد. این یک داستان علمی تخیلی نیست. این مورد توجه دانشمندان تحسین شده از جمله استفان هاوکینگ قرار می گیرد.

مفهوم برهم نهی هسته اصلی مکانیک کوانتومی است. معمولاً توضیح داده می شود که پین ​​به طور همزمان در بالا و پایین قرار دارد. اما من در برابر این وسوسه مقاومت خواهم کرد زیرا ما به سادگی نظریه را با شهود خود تطبیق می دهیم. در فیلم Men in Black II ، تامی جونز به کار داخلی دستگاه مرتب سازی حروف اهمیتی نمی دهد. او هرگز آن را باز نمی کند اما دستگاه به خوبی به او سرویس می دهد.

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

هشدار

اما قبل از توضیح محاسبات کوانتومی با جزئیات ، یک چیز وجود دارد که باید انجام دهم. پیشاپیش ما در حال توسعه یک کامپیوتر کوانتومی برای جایگزینی یک کامپیوتر کلاسیک نیستیم. محاسبات کوانتومی به الگوریتم های جدیدی نیاز دارد. ما نمی توانیم برنامه های موجود C ++ را دوباره کامپایل کنیم.

یک تصور غلط بزرگ این است که یک کامپیوتر کوانتومی سریعتر از یک کامپیوتر کلاسیک همه مشکلات را حل می کند. این یک محصول جانبی بیش از حد فن آوری است. این انتظار غیرواقعی در مطالعه محدودیت های آن به ما صدمه می زند و ما را به مسیر اشتباه می رساند. بدتر از آن ، این امر مانع کشف پتانسیل واقعی آن می شود. مشکلات زیادی وجود دارد که محاسبه کوانتومی مقرون به صرفه نیست ، یا به زودی مزیت عملکردی را نشان نمی دهند. رایانه های کوانتومی و رایانه های کلاسیک در کنار هم قرار گرفته و مکمل یکدیگر هستند. الگوریتم های کوانتومی محدودیت هایی دارند. به عنوان مثال ، بعید است که آنها سرعت تصاعدی را برای مشکلات کامل NP ارائه دهند-یک افسانه رایج در محاسبات کوانتومی.

منبع: Lev S. Bishop

خوشبختانه ، برخی از مشکلات پیچیده متعلق به کلاسی به نام BQP (زمان چند جمله ای کوانتومی خطای محدود) است-این احتمال خوب وجود دارد که ما می تواند راه حل را در زمان چند جمله ای پیدا کند ، اما هیچ تضمینی وجود ندارد. Factorization ، مهمترین قسمت در شکستن رمزگذاری RSA ، متعلق به BQP است. بنابراین ، موفقیت محاسبات کوانتومی به احتمال زیاد بستگی به موارد دیگری دارد که به BQP تعلق دارد.

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

QC-کیوبیت ها در محاسبات کوانتومی چیست؟ کیوبیت ها جزء اصلی محاسبات کوانتومی هستند. با برهم نهی ، می توانیم مقدار نمایی از… medium.com

در اینجا رمزگذاری کنیمشاخص کل مجموعه است:

QC - سری محاسبات کوانتومی این مجموعه اصول محاسبات کوانتومی را پوشش می دهد. 2 مقاله اول اصول اولیه و نحوه ساخت آن را پوشش می دهد… medium.com

نحوه برنامه ریزی یک کامپیوتر کوانتومی

نحوه برنامه ریزی یک کامپیوتر کوانتومی

نحوه ساختن کشتی های جنگی از دروازه های کوانتومی NOT

تحقیقات IBM https://www.flickr.com/photos/ibm_research_zurich/16662697764/in/album-72157667479583962/

توجه به این کد 2020: مقاله اکنون بسیار قدیمی است ، اما همه ایده ها هنوز یکسان هستند.

رایانه های کوانتومی نوع جدیدی از رایانه های عجیب هستند. آنها تعداد بی شماری از جهان های موازی را برای اجرای سریعتر برنامه ها می سوزانند و از اصولی استفاده می کنند که حتی اینشتین را گیج کرده است. آنها جعبه های معجزه آسایی جادویی هستند که جعبه های احمقانه ترانزیستورهای شما را در خاک می گذارند. آنها بدون شک موفق می شوند این فناوری جدید را هیجان انگیز جلوه دهند. اما آنها همچنین می توانند محاسبات کوانتومی را مانند یک هنر معمول به نظر برسند که فقط به باهوش ترین دانشمندان سپرده شده است. مطمئناً چیزی نیست که عموم برنامه نویسان به آن توجه داشته باشند!

من فکر نمی کنم این به هیچ وجه درست باشد. و با شرکت هایی مانند IBM و Google که در حال ساخت دستگاه های کوانتومی هستند ، زمان شروع بازی با برنامه نویسی کوانتومی اکنون فرا رسیده است.

در ابتدا نیازی به انجام کارهای فانتزی ندارید. می توانید سفر خود را به برنامه نویسی کوانتومی در همان مکانی آغاز کنید که بسیاری از ما سفر خود را به برنامه نویسی عادی آغاز می کنیم: با ساخت بازی.

نگران نباشید ، داشتن رایانه کوانتومی خود مورد نیاز نخواهد بود. برنامه های کوانتومی ساده را می توان به راحتی در یک رایانه معمولی شبیه سازی کرد. ما همچنین می توانیم به لطف IBM Q Experience مدتی از یک دستگاه کوانتومی واقعی وام بگیریم.

این اولین مورد از سری مقالاتی است که در آن برخی از برنامه های ساده ساخته شده با استفاده از SDK کوانتومی IBM را شرح می دهم. هر یک نسخه ای مستقل از Battleships خواهد بود ، با فرایندهای کوانتومی ساده ای که برای پیاده سازی مکانیک اصلی بازی استفاده می شود.

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

کامپیوتر کوانتومی چیست؟

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

یک رایانه معمولی بر اساس بیت ها ساخته شده است: متغیرهایی که فقط دو مقدار ممکن دارند. ما اغلب آنها را 0 و 1 می نامیم ، اگرچه در زمینه جبر بولی ممکن است آنها را درست و غلط بنامیم. مهم نیست که ما آنها را چه می نامیم. نکته مهم این است که فقط دو حالت وجود دارد.

با بیت ها می توان عملیات ساده بولی را مانند NOT ، AND و OR انجام داد. اینها اجزای اصلی محاسبات هستند. با این کارها می توانیم هر کاری را انجام دهیم. هر متغیر پیچیده تر از یک بیت (مانند int یا float) فقط مجموعه ای از تعداد زیادی بیت است. هرگونه عملیات پیچیده تر از AND یا NOT در واقع بسیاری از آنها به هم چسبیده اند. در ابتدایی ترین حالت ، این یک کامپیوتر معمولی است.

رایانه های کوانتومی بر اساس بیت های کوانتومی یا کیوبیت ها ساخته می شوند. اینها همچنین دارای دو مقدار ممکن هستند که می توان آنها را 0 و 1 نامید. اما قوانین مکانیک کوانتومی امکانات دیگری را نیز فراهم می کند ، که ما آنها را حالتهای برهم نهی می نامیم.

در برخی مواردبدیهی است ، حالات برهم نهی مقادیری هستند که تا حدی بین افراط 0 و 1 وجود دارند. ما می توانیم یک کیوبیت را به صورت یک کره ، با 0 و 1 که روی قطب های مخالف نشسته اند ، تصور کنیم. حالات برهم نهی همه نقاط احتمالی دیگر روی سطح هستند.

اقتباس از https : //commons.wikimedia.org/wiki/File: Bloch_Sphere.svg

علاوه بر 0 و 1 ، این تصویر همچنین چند حالت مهم برهم نهی را نشان می دهد. یکی u3 (0.5*pi ، 0،0) | 0⟩ نامیده می شود. مسلماً نام چندان جذابی نیست ، اما در این مقاله به معنای واقعی آن خواهیم پرداخت.

این طرز فکر در مورد کیوبیت ها آنها را کمی متغیرهای پیوسته به نظر می رساند. ما می توانیم هر نقطه ای را در سطح یک کره (مانند نقطه ψ در تصویر) با استفاده از مختصات قطبی با چند زاویه (θ و φ) نشان دهیم. بنابراین شما را ببخشند که فکر می کنید کیوبیت فقط یک جفت شناور است. به یک معنا ، آنها هستند. اما به معنای دقیق تر ، اینطور نیست.

تفاوت مهم این است که ما هرگز نمی توانیم بیش از یک اطلاعات دوتایی را از کیوبیت استخراج کنیم. قوانین فیزیک خود مانع از این می شود که بفهمیم دقیقاً چه کار می کنند. ما نمی توانیم از یک کیوبیت جزئیات دقیق وضعیت برهم نهی آن را بخواهیم. ما فقط می توانیم آن را مجبور کنیم بین دو نقطه مخالف کره (مانند 0 و 1) یکی را انتخاب کند. اگر چیزی غیر از این دو حالت باشد ، فقط باید به طور تصادفی یکی یا دیگری را تعیین کند.

بنابراین کیوبیت دارای برخی از ویژگیهای یک متغیر پیوسته و برخی از ویژگیهای یک حالت گسسته است. در حقیقت هیچ کدام نیست. این یک متغیر کوانتومی است. در این حالت ، همه کشتی ها فقط یک مربع را اشغال می کنند ، اما برخی از آنها بیشتر از بقیه غرق می شوند. ما یک کشتی خواهیم داشت که می تواند توسط یک بمب غرق شود ، یک کشتی که به دو بمب نیاز دارد و یکی به سه مورد نیاز دارد.

برای شبیه سازی این امر در یک کامپیوتر کوانتومی ، می توانیم از یک کیوبیت برای هر کشتی استفاده کنیم. حالت 0 را می توان با یک کشتی کاملاً سالم و 1 را با یک کشتی تخریب شده شناسایی کرد. حالات برهم نهی با سفر یک کشتی به سمت نابودی مطابقت دارد.

شبیه سازی یک کشتی نابود شده با یک ضربه بسیار آسان است. ما می توانیم آن را در حالت 0 مقداردهی اولیه کنیم ، و در صورت ضربه زدن یک NOT را اعمال کنیم. هنگامی که آن را در حالت 1 پیدا می کنیم ، می دانیم که از بین رفته است.

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

برای این کار از SDK کوانتومی QISKit برای راه اندازی یک برنامه کوانتومی استفاده می کنیم. در اینجا اسکریپتی وجود دارد که یک کشتی را اولیه می کند ، آن را بمباران می کند و سپس بررسی می کند که آیا هنوز شناور است یا نه. c = ClassicalRegister (1) # مقداردهی اولیه یک ثبت با یک بیت معمولی qc = QuantumCircuit (q، c) # ایجاد وبرنامه کوانتومی خالی c [0]) # کیوبیت را اندازه بگیرید

ابتدا این مقدار تمام بیت های مورد نیاز ما را مشخص می کند: هم کوانتومی و هم معمولی. در این مثال ما یک qubit واحد را در یک ثبات به نام q تعریف کرده ایم. ما از این qubit در کد به عنوان q [0] یاد می کنیم. از آنجا که خروجی ها باید دارای اطلاعات طبیعی خوب و خواندنی برای انسان باشند ، ما همچنین یک بیت معمولی را در یک ثبات به نام c تعریف می کنیم. حالتی که می خواهیم با آن شروع کنیم ، نیازی به آمادگی بیشتر نیست.

در مرحله بعد می خواهیم این q [0] = 0 ، یک کشتی کاملاً دست نخورده را گرفته و یک NOT را انجام دهیم. با یک بیت معمولی و یک زبان برنامه نویسی معمولی ، ممکن است این را به صورت q [0] =! q [0] (برای C ++) یا q [0] = نه q [0] (برای پایتون) پیاده سازی کنیم. در QISKit می توان آن را به روش های مختلف انجام داد. ساده ترین کار این است که از عملیات به نام x و y استفاده کنید. در اینجا چند مثال از نحوه استفاده از آنها ، با خطوط معادل C ++ و Python برای مقایسه آورده شده است.

 q [0] =! q [0]؛ \\ A C ++ style NOT 
 q [0] = not q [0] # A style Python NOT 
 qc.x (q [0]) # A QISKit style NOT < /pre> 
 qc.y (q [0]) # یک سبک دیگر QISKit NOT 

تفاوتهایی بین x و y وجود دارد که باید روزی با آنها کنار بیاییم. اما امروز نه.

احتمالاً متوجه شده اید که x و y در قطعه قبلی QISKit ظاهر نمی شوند. در عوض ما u3 (pi ، 0،0) داریم. این روش دیگری برای پیاده سازی NOT است.

 qc.u3 (math.pi، 0،0، q [0]) معادل y اما u3 به طور کلی عملیات پیچیده تری است. این سه آرگومان دارد و با تغییر آنها می توانیم کارهای دیگری انجام دهیم. 

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

اولین استدلال زاویه ای است که بر حسب رادیان بیان می شود. این زاویه ای است که می خواهیم با آن حوزه کیوبیت خود را بچرخانیم. زاویه pi (یا math.pi هنگام اجرا در پایتون) مربوط به 180 درجه است. این بدان معناست که ما کره را کاملاً وارونه می کنیم. 0 به 1 و 1 به 0 حرکت می کند ، به همین دلیل است که این عملیات به عنوان NOT عمل می کند. برای انجام نیمی از NOT ما می توانیم به سادگی از نیمی از این زاویه استفاده کنیم: u3 (0.5*pi ، 0،0). یک NOT دوبار.

# سبک دیگر QISKit NOT
qc.u3 (math.pi/2،0،0 ، q [0])
qc.u3 (math.pi/2،0،0 ، q [0]) 

ما همچنین می توانیم یک سوم نه سه بار ، یا یک چهارم یک NOT را با نصف NOT و سپس انجام دهیم. دو هشتم یک NOT شما ایده را می گیرید.

آخرین خط قطعه QISKit ما

 qc.measure (q [0] ، c [0]) 

در این کیوبیت را اندازه می گیریم ما به q [0] می گوییم که باید تصمیم بگیرد که چه چیزی باشد: 0 یا 1. نتیجه سپس در c [0] ذخیره می شود ، آماده است تا توسط مغزهای غیر کوانتومی ما مورد بررسی قرار گیرد یا توسط کامپیوترهای غیر کوانتومی ما پردازش شود. به سپس مقدار c [0] برابر است باخروجی این محاسبه.

اگر بین راه اندازی اولیه و اندازه گیری کاری انجام ندادیم ...

 q = QuantumRegister (1)
ج = ClassicalRegister (1)
qc = QuantumCircuit (q، c) 
 qc.measure (q [0]، c [0]) 

… نتیجه همیشه باید c [0] = 0. باشد < /p>

اگر ما NOT ...

 q = QuantumRegister (1)
ج = ClassicalRegister (1)
qc = QuantumCircuit (q، c) 
 qc.u3 (math.pi، 0،0، q [0]) 
 qc.measure (q [0]، c [ 0]) 

..نتیجه همیشه باید c [0] = 1 باشد.

اگر ما فقط نصف یک NOT ...

 q = QuantumRegister ( 1)
ج = ClassicalRegister (1)
qc = QuantumCircuit (q، c) 
 qc.u3 (0.5*math.pi، 0،0، q [0]) 
 qc.measure (q [0] ، c [0]) 

… q [0] وقتی اندازه گیری شود بین 0 تا 1 خواهد بود. در واقع این حالت برهم نهی خواهد بود که قبلاً u3 (0.5*pi ، 0،0) | 0⟩ نامیده بودیم. اندازه گیری این که آیا این 0 است یا 1 ، آن را مجبور می کند که به طور تصادفی یکی یا دیگری را با احتمالهای مساوی انتخاب کند. تصادفی اضافی نیز در دستگاه های فعلی به دلیل نویز وجود دارد. اگرچه این در سطح قابل استفاده ای پایین است ، ما هنوز باید وجود آن را در ذهن داشته باشیم. بنابراین گاهی اوقات یک عدد 1 دریافت می کنیم که باید 0 داشته باشیم و برعکس.

به این دلایل ، اجرای یک برنامه کوانتومی بارها معمول است. سپس این فرایند لیستی از تمام خروجی هایی را که در طول این نمونه های زیاد ایجاد شده اند و تعداد دفعاتی که هر کدام اتفاق افتاده است ، باز می گرداند. a NOT برای ساختن بازی روی کامپیوتر کوانتومی.

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

به همین دلیل ، SDK های کوانتومی معمولاً در یک زبان برنامه نویسی استاندارد تعبیه شده اند. QISKit از پایتون استفاده می کند ، بنابراین ما می توانیم از یک برنامه پایتون برای مقابله با هر دو بخش عادی برنامه و ایجاد و اجرای مشاغل برای قسمت کوانتومی استفاده کنیم.

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

برای اجرای برنامه ، به نصب Jupyter و همچنین وابستگی های SDK نیاز دارید. در اینجا می توانید اطلاعات بیشتری کسب کنید.

qiskit-community/qiskit-community-tutorials Permalink GitHub محل زندگی بیش از 50 میلیون توسعه دهنده است که برای میزبانی و مرور کد ، مدیریت پروژه ها و… github.com

اکنون بیایید کد را بررسی کنیم!

در ابتدا ، همه چیز نیاز به اجرای کد در IBM's Quantum Experience باید وارد شود.

 از qiskit import ClassicalRegister، QuantumRegister
از qiskit import QuantumCircuit ، اجرا 

در مرحله بعد باید در API ثبت نام کنیم تا در واقع بتوانیم مشاغل را در دستگاه کوانتومی واقعی اجرا کنیم.

 از واردات qiskit register

Qconfig را وارد کنید
qx_config = {
    "APItoken": Qconfig.APItoken ،
    "url": Qconfig.config ['url']}}

register (qx_config ['APItoken']، qx_config ['url']) 

این به فایل Qconfig اشاره دارد ، که برای راه اندازی به یک حساب در IBM نیاز دارید. نگران نباشید ، رایگان است! برای مشاهده جزئیات به اینجا مراجعه کنید.

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

 device = ask_for_device ()

از qiskit import Aer ، IBMQ
تلاش کردن:
    backend = Aer.get_backend (دستگاه)
جز:
    backend = IBMQ.get_backend (device) 

تابع ask_for_device () به سادگی از پخش کننده می پرسد که از دستگاه واقعی استفاده کند یا نه. در صورت پاسخ y ، دستگاه انتخاب شده ibmq_5_tenerife است: یک پردازنده کوانتومی پنج کیوبیت واقعی در آزمایشگاه های IBM. در صورت پاسخ n ، شبیه ساز به جای آن انتخاب می شود.

نکته مهم دیگری که باید تنظیم شود تعداد دفعات اجرا شدن هر کار است. این به این دلیل است که ما از نمونه های زیادی برای محاسبه آمار در مورد خروجی های احتمالی تصادفی استفاده می کنیم.

 shots = 1024 

هیچ دلیل جادویی برای 1024 وجود ندارد. اگر می توانید آن را تغییر دهید می خواهم.

در ادامه به راه اندازی تخته ها می پردازیم ، هر بازیکن سه مکان را برای قرار دادن سه کشتی انتخاب می کند. پنج موقعیت ممکن در دسترس است که مربوط به پنج کیوبیت در دستگاه ibmqx4 IBM است. من شبکه را اینگونه تجسم می کنم

 4 0
| \ /|
| \ /|
| \ /|
| 2 |
| /\ |
| /\ |
|/\ |
3 1 

اعداد نامهایی هستند که من برای هر موقعیت استفاده می کنم. آنها همچنین نام هایی هستند که IBM استفاده می کند ، بنابراین 2 موقعیت qubit q [2] است ، برای مثال.

انتخابهای انجام شده توسط بازیکنان در shipPos ذخیره می شوند. این یک ورودی برای هر یک از دو بازیکن دارد (بازیکن = 0 برای بازیکن اول ، بازیکن = 1 برای بازیکن دوم) ، و هر یک از سه کشتی که آنها قرار می دهند. shipPos [بازیکن] [کشتی] موقعیت (0 ، 1 ، 2 ، 3 یا 4) را برای کشتی شماره گذاری شده متعلق به بازیکن متعلق به بازیکن دارد.

اکنون زمان حلقه اصلی بازی است. در این قسمت از هر دو بازیکن می پرسیم که در خط حریف خود دوست دارند کجا بمباران کنند. سپس به بمب [بازیکن] [موقعیت] اضافه می شود ، که شمارش می کند چند بار بازیکن در طول بازی موقعیت را بمباران کرده است.

ما اکنون اطلاعات کافی برای راه اندازی برنامه کوانتومی داریم. ما می دانیم که کیوبیت ها قرار است کشتی باشند و کجا را بمباران کنند. بنابراین اکنون وقت آن است که کارهای مربوطه را با QISKit تنظیم کنیم.

در هر دور ما دو برنامه کوانتومی برای اجرا خواهیم داشت: هر کدام شبیه سازی عملکرد در شبکه یک بازیکن. برای نگهداری این برنامه ها از آرایه qc استفاده می کنیم.

 qc = []
برای بازیکن در محدوده (2):
    q = QuantumRegister (5)
    ج = ClassicalRegister (5)
    qc.append (QuantumCircuit (q، c)) 

هر برنامه با یک ثبت پنج بیت کوانتومی و کلاسیک برای پوشش کل شبکه اولیه می شود. برنامه شبکه ای یک پخش کننده معین را می توان با qc [player] قرار داد ، اگرچه توجه داشته باشید که بازیکن 1 در اینجا به عنوان player = 0 و بازیکن 2 به عنوان player = 1 نامیده می شود.

حال فرض کنید ما می خواهید بخش معینی از یک NOT را در یک کیوبیت خاص اعمال کنید. ما این کار را با خط زیر انجام می دهیم

 qc [player] .u3 (frac * math.pi، 0.0، 0.0، q [position]) 

اما frac و position با اعداد واقعی.

با استفاده از این می توانیم اضافه کنیمتمام بمب هایی که بازیکن حریف به سمت این شبکه شلیک می کند. برای شبکه بازیکن ، ما هر سه موقعیتی را که کشتی وجود دارد حلقه می کنیم. سپس یک خط به qc [player] برای هر بمبی که به اینجا ارسال شده است اضافه می کنیم.

قبلاً اشاره کردم که سه کشتی در این بازی همه دارای نقاط قوت متفاوت هستند. اولین موردی که بازیکن قرار می دهد توسط یک بمب غرق می شود ، اما دومی برای از بین بردن دو مورد نیاز دارد و سومی به سه مورد نیاز دارد.

از نظر کیوبیت ، این بدان معناست که بمبی که اولین کشتی را می زند کل NOT را اعمال می کند. بمبی که به کشتی دوم برخورد می کند ، نیمی از NOT ، و بمبی در کشتی سوم یک سوم NOT را اعمال می کند. کسر کسری سپس توسط کشتی مورد اصابت قرار می گیرد. برای این کار ما به سادگی از frac = 1/(کشتی+1) استفاده می کنیم.

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

 برای qubit در محدوده (5) انجام می شود:
    qc [player] t.measure (q [qubit] ، c [qubit]) 

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

 job = execute (qc ، backend ، shots = shots) 

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

پس از ارسال کار ، می توانیم داده ها را استخراج کنیم.

 برای پخش کننده در محدوده (2):
    grid [player] = job.result (). get_counts (qc [player]) 

در اینجا نتایج را به grid کپی می کنم ، با نتایج بمباران کشتی های بازیکنان در grid [player]. < /p>

توجه داشته باشید که فراخوانی به job.result () منتظر می ماند تا کار در واقع متوقف شود. اگر در صف پشت سر دیگران با استفاده از دستگاه هستید ، ممکن است چند دقیقه طول بکشد.

نتایج به صورت دیکشنری در شبکه [پخش کننده] ذخیره می شوند. کلیدها رشته های بیتی هستند و بنابراین چیزی شبیه 110 هستند. راست ترین بیت c [0] است و بنابراین c [0] = 0 در این مثال بیت رشته. با پردازش نتایج می توانیم بفهمیم که چند اجرا از هر نتیجه (0 یا 1) برای هر یک از بیت های معمولی بدست آمده است. خسارت برای کشتی ما ما نمی توانیم 100٪ خسارت ناشی از اثرات سر و صدا (یا آب و هوا ، در صورت تمایل به توضیح در جهان) انتظار داشته باشیم ، بنابراین ما خسارت بیش از 95٪ را به معنای غرق شدن کشتی می شماریم.

بیایید چند خروجی نمونه از فرایند کوانتومی را بررسی کنید. فرض کنید یکی از بازیکنان سومین کشتی خود را در موقعیت 2 قرار داده است. بازیکن دیگر سپس آن را بمباران می کند. نتایج شبیه به چیزی است. کشتی در واقع آسیب هایی دید. به نتایج

 {'00110': 532 ، '00010': 492} 

در اینجاهمه نتایج دارای 1 در شکاف دوم سمت راست (یکی برای موقعیت 1) است. آن کشتی با یک بمب منهدم شد. با این حال ، در موقعیت 2 فقط نیمی آسیب دیده است ، بنابراین نیمی از نتایج برای آن 1 دارد.

این نتایج خوب و تمیز بودند ، بنابراین می توان گفت که آنها روی شبیه ساز انجام شده اند. در دستگاه واقعی می توانید انتظار داشته باشید که برای کشتی هایی که حتی بمباران نشده اند و برای کیوبیت هایی که کشتی نیستند 1 نتیجه بدست آورید.

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

هنگامی که درصد خسارت محاسبه شد ، به بازیکنان ارائه می شود. به عنوان مثال ، اگر فقط کشتی در موقعیت 2 مورد اصابت قرار گرفته باشد و 50٪ آسیب ببیند ، این به صورت

 نشان داده می شود؟ ؟
 | \ /|
 | \ /|
 | \ /|
 | 50٪ |
 | /\ |
 | /\ |
 |/\ |
 ؟ ؟ 

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

ممکن است توجه داشته باشید که بمباران کشتی سوم بازیکنان حدود 25 درصد خسارت وارد می کند. از آنجا که این کشتی یک سوم راه نابودی است ، ممکن است 33 درصد انتظار داشته باشید. دلیل آن مثلثات است. در این مرحله نیازی به پرداختن زیاد به آن نیست.

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

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

در زیر می توانید به کد منبع کامل دسترسی داشته باشید.

QISKit/qiskit-tutorial qiskit -tutorial - مجموعه ای از نوت بوک های Jupyter با استفاده از Qiskitgithub.com

و در اینجا ویدئویی از بازی در حال انجام است.

داستان با نسخه دیگری از Battleships در قسمت 2 ادامه می یابد. < /p> نحوه برنامه ریزی یک کامپیوتر کوانتومی - قسمت 2 کشتی های نبرد با اندازه گیری های کوانتومیmedium.com