量子計算機怎么編程,量子計算機編程(一)——QPU編程

今天要給大家介紹的是這本書《Programming Quantum Computers —— Essential Algorithms and Code Samples》,主要講如何在量子計算機上編程,又示例的代碼可以跑 https://oreilly-qc.github.io./ ,這本書的理解方向是純粹計算機的,連矩陣都很少涉及,一個量子計算機就像是協處理器一樣,很像我們現在的GPU。

這本書一共分為三個部分,我也將分成三篇文章來寫。

單量子比特

這本書中對于量子的表達方式如下circle notation:

e632caa2c3b9fb53c3eb40017dc9b4fd.png

aeb5f68f12dc0e2f4d3e7df1a1d5669a.png

藍色圈的面積就是這個量子態測量后是這個狀態的概率,中間的藍色短線代表他們的相位,因為全局相位也觀察不出來,所以一般$|0\rangle$就是朝上的。對于一個量子比特來說,重要的也就這兩個,magnitude和relative phase(可能因為重要的是概率大小,所以他其實沒有提amplitude其實是一個復數)。

b7d2ecab0202a06f3dfff62f6c2e33f5.png

這兩個態實際上是等價的。

電路圖呢,一般長這樣

884d0203087f11fad47d8813d6af32ce.png

這個電路圖對應的代碼如下:(這個例子都可以在上面那個網站上跑起來)

qc.reset(1); // allocate one qubit

qc.write(0); // write the value zero

qc.had(); // place it into superposition of 0 and 1

var result = qc.read(); // read the result as a digital bit

第一步就是申請一個qubit,就像你要給變量分配空間一樣。

第二步寫0,其實寫0很容易,你可以直接測量,要么0,要么1,如果結果是1的話,再做一個not操作就好;當然,你要是嫌麻煩,對于一個qubit,長時間的靜置他,他也會變成0,畢竟還是基態比較穩定。

第三步就是進行一個H門的操作

第四步讀,其實就是測量了

常見的作用于單量子比特操作的表達方式:

68a231bbc711eda2186dc090294075a8.png

5bdd7de22bb1da4f8859e868529d4d09.png

其中值得一提的是PHASE相位操作,phase操作只作用在 $|1\rangle$ 上,因為他的效果是改變相對相位,如果大家都改變就沒有什么用了。可能有同學聽說過繞X軸旋轉和繞Y軸旋轉,這些都是針對Bloch球的表達方式,與這里的circle notation的方式不要弄混了。

一個操作也可能是其他幾個操作的組合,比如:

28017fe9154a54964ec93d0e20547cd0.png

如果我們可以把not變成H+180°旋轉+H,那么我們也可以把中間的180°旋轉變成兩個90°的旋轉,中間再加上兩個H,因為$HH=I$,他們可以相互抵消,這樣我們還可以得到RNOT:

4c9f415f01965f542ed73be52d6aa72c.png

**COPY:**這是一個需要注意的操作,因為量子程序里沒有復制,這也保障了量子傳輸的信息不會被竊聽, 因為你要竊聽,你就需要去讀,一讀就是測量,而量子比特一測量就是坍縮。由于量子不能復制,所以,上述所有操作都是在原有的那個比特上操作的,所以操作就會被發現。

一個簡單例子:

72b8d5e60ef114b12d44906820f6d3c1.png

對于這里例子來說, $A_1$ 和 $A_2$ 是對qubit Hadmard門操作后測量得到的隨機值,因為這個是真隨機,所以就不會被竊聽者提前知道或者預估,那么當我傳輸這個被我用紅色圈出來的比特的時候,spy并不知道這個比特是否執行了H門和not操作,那他就只能猜了,25%的概率,圖里面所示就是他猜有執行了,然后他再按照他的猜測如法炮制一個qubit繼續傳遞,當B收了這個bit后,B也隨機一個數據$B_2$,看是否執行H門,然后測量。這個時候消息也都收到了,測量也都測量好了,那么把 $A_2$的信息發過來也和竊聽沒有關系了,如果 $B_2$ $A_2$ 的結果一樣,那么測量結果應該一樣,如果不一樣,那么一定被竊聽了。

這樣的成功概率有多少呢? $B_2$ $A_2$ 一樣的概率0.5,在這種情況下spy被發現的概率0.25。看起來不是很高,但是如果我們有一百個比特先檢測一下這條線路,不被發現的概率將會降到百萬分之一。

qc.reset(3);//申請三個qubit

qc.discard();

var a = qint.new(1, 'alice'); //給其中一個變量命名為a,但是畫出來的電路圖中顯示alice

var fiber = qint.new(1, 'fiber');

var b = qint.new(1, 'bob');

function random_bit(q) {//對一個初始化為0的比特,進行H操作,然后測量,測量結果是隨機的

q.write(0);

q.had();

return q.read();

}

// Generate two random bits

qc.label('get two random bits');

var send_had = random_bit(a);//得到是否執行H門的隨機值

var send_value = random_bit(a);//得到是否not的隨機值

qc.label('');

// Prepare Alice's qubit

a.write(0);//a重新賦值為0,所以前面取隨機值的操作也可以在a上進行

qc.label('set value');

qc.nop();

if (send_value)

a.not();

qc.nop();

qc.label('');

qc.nop();

qc.label('apply had');

qc.nop();

if (send_had)

a.had();

qc.nop();

qc.label('');

// Send the qubit!

fiber.exchange(a);

// Activate the spy

var spy_is_present = true;

if (spy_is_present)

{

var spy_had = 1;

qc.nop();

qc.label('spy');

if (spy_had)

fiber.had();

stolen_data = fiber.read();

fiber.write(0);

if (stolen_data)

fiber.not();

if (spy_had)

fiber.had();

qc.label('');

qc.nop();

}

// Receive the qubit!

var recv_had = random_bit(b);

fiber.exchange(b);

qc.label('apply had');

qc.nop();

if (recv_had)

b.had();

qc.nop();

qc.label('');

qc.nop();

qc.label('read value');

qc.nop();

recv_val = b.read();

qc.nop();

qc.label('');

qc.nop();

// Now Alice emails Bob to tell

// him her had setting and value.

// If the had setting matches and the

// value does not, there's a spy!

if (send_had == recv_had)

if (send_value != recv_val)

qc.print('Caught a spy!\n');

多量子比特

4816cb9d6f7d11b54747b241a3957372.png

多量子比特的表示方法和單量子比特沒有什么區別,下面的數字就是把他們從01的二進制換算成了我們熟悉的十進制。0x是十六進制的表示方法,最上面的是地位,正好可以not操作表示了出來,0就是000,1就是001,2就是010……以此類推

真要說和單量子比特的區別,那主要是兩方面,一個是糾纏;另一個就是受控操作。

糾纏

糾纏好說,兩個糾纏的量子比特就是其中一個的測量結果會影響另一個。

受控操作

受控操作就是說有兩類比特,一個是用來控制的,另一個是被控制的。

比如大家耳熟能詳的CNOT,當控制比特是1的時候,就翻轉被控制的比特,如果控制比特是0的時候,那就不做操作。還有CCNOT門,又叫做toffli門,有兩個控制比特,只有當他們都為1的時候才翻轉。

現在要介紹一個前面沒有提過的CPHASE受控相位門,和CNOT相似,同樣是當控制比特為1的時候才進行,但是正如前面我們提過,PHASE操作只操作在1上,也就是說,如果這個操作被執行其實只有一種情況,那就是$|11\rangle$ 。

在前面我們表示過一個旋轉180°的相位操作可以表示成一個 H+NOT+H figure 2-14

那么現在受控相位操作擁有了三種表示方法:

b7f377f779c19893b93868ef85fa6115.png

當控制比特為0的時候,CNOT就不會發生,兩個H又正好抵消了。

phase kickback

在這之所以說這么多的受控相位操作是因為這里面有個一很有趣的小技巧 QPU Trick: Phase Kickback 來看下面這個電路圖

78146738018bf3c368f93626e6fa97e1.png

這個電路圖很容易理解,一種理解方式就是把register 1當作控制比特,register 2 當作受控比特,兩個H門使得register 1變成了等可能的四種情況 $\frac{1}{2}|00\rangle+\frac{1}{2}|01\rangle+\frac{1}{2}|10\rangle+\frac{1}{2}|11\rangle$ 。

現在來看看結果:

d458c9ce52185b8aeb145c576d4fd24d.png

因為register 2并不是疊加態,所以沒有相對相位,而絕對相位又測不出來,所以他可以說是沒有變的,改變了的,反而是register 1 , $|3\rangle$ 轉了135°是因為兩個都為1,45°和90°都轉了。作為一個受控操作,控制比特反而變了,而受控比特沒有改變。

swap

受控操作當然也能連在一起,得到一些有用的結果,比如三個CNOT操作,他就可以交換兩條線路。

ac693ada589321b2f910e5b6fde2fb28.png

這個的證明是一件很容易的事情,你可以取一個任意態推一邊,專門把這個提出來說一遍是因為這個還能做一件有趣的事情,那就是驗證兩個比特是否相等。我們需要用到的是CSWAP,即當控制比特為1時才交換。

cc786ea29b938bb7ef0de29822da5e7a.png

當我們的output比特經過H門后,他就變成了等概率的 $|0\rangle$ 和 $|1\rangle$ 經過一個CSWAP,為1情況下的input1和input2就會交換,也就是說他們原來x概率的ab就變成了x概率的ba了,這樣的問題出在哪?

如果概率還是原來的分布,那么在經過一個H門output等待率的 $|0\rangle$ 和 $|1\rangle$ 又會化簡成 $|0\rangle$ ,各種各樣的 $|1\rangle$ 的概率會相互抵消掉,那么在經歷一個NOT操作就一定會得到1。

那,如果這兩個數據不一樣,就一定得不到1嗎?不一定,只是他有概率不是1,而一旦有概率不是1,那只要多檢測幾次就一定能檢測出來,就像上面那個竊聽一樣,明明只有四分之一的概率,但僅需要一百次,測不出來的可能性就降到了百萬分之一。

受控操作當然不止這些,但是很多受控操作都可以分解成CNOT加上一些相位操作,我們可以自己構造自己需要的操作。

遠距離操控隨機

這里的遠距離操控不是指我能扣確定他是什么,如果我能確定,那就不是隨機了,而是說,我把兩個比特弄成糾纏,當我一個測出來是0的時候,另一個以x%的概率得到0,至于我測出來是不是0看天意,對面測出來是不是0,也看天意,其中唯一能確定的,就只有這個x了。

這個例子是書上例子3-6 https://oreilly-qc.github.io/?p=3-6 方法很簡單,就是我H門操作后,我旋轉45°的角度,這樣再來一個H門,因為相位變了,符號對不上,所以回不去了,就有了關聯。

更強大的一點的應用是——量子隱形傳態,量子隱形傳態 Quantum Teleportation 提過了,就不在累述。

原文出處:https://www.cnblogs.com/zmzzzz/p/12323743.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533434.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533434.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533434.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python支付寶自動轉賬_python實現支付寶轉賬接口

python實現支付寶轉賬接口發布時間:2020-09-14 03:23:42來源:腳本之家閱讀:128由于工作需要使用python開發一個自動轉賬接口,記錄一下開發過程。首先需要在螞蟻金服上申請開通開發者賬戶,有了開發者賬戶就可以使用沙箱…

計算機配置動態硬盤,如何把硬盤的類型從動態變成基本?

將動態磁盤轉換為基本磁盤基本磁盤和動態磁盤是Windows系統下兩種基本的硬盤配置類型。大部分的個人計算機使用的是基本磁盤,這樣能讓磁盤管理變得簡單。高級用戶和IT管理員使用的可能就是動態磁盤以便改善多磁盤計算機的性能。基本磁盤使用主分區,擴展分…

unity 紋理壓縮格式‘_紋理優化:讓你的紋理也“瘦”下來

在上一期《紋理優化:不僅僅是一張圖片那么簡單》中,我們針對紋理相關的優化,挑選了部分知識點分析。無論是大家在開發時的疏忽,還是對相關知識點的理解不足,這些問題的積累最終都會反映到項目的性能表現上。為此&#…

2020中級計算機工程師,2020年上半年中級網絡工程師報考詳解

原標題:2020年上半年中級網絡工程師報考詳解軟考全稱叫做“全國計算機技術與軟件專業技術資格(水平)考試”已經開展了十多年了,所受到的歡迎程度也是越來越高,據統計累計參加軟考的人數已超300萬人,同時每年以21萬人的速度持續增加…

華科計算機復試ccf成績,新鮮速遞!剛擬錄取華科學妹總結的復試攻略,快看

原標題:新鮮速遞!剛擬錄取華科學妹總結的復試攻略,快看今天給大家分享一位19考研學妹的面試經驗,她報考華中科技大學,已擬錄取!復試已落幕,在火車上收到擬錄取通知后,感覺自己就像一…

php負載均衡原理_負載均衡的原理(通俗理解)

簡單的來說,假設,你在放洗腳水,并且,當前你只有一洗腳盆。那么,你的洗腳水不管有多少,你最多就能裝一個洗腳盆的這個就是,單服務器應用場景,你的流量就是洗腳水,然后&…

存儲器是計算機的記憶裝置,存儲器(Memory)

存儲器(Memory)存儲器是計算機的記憶裝置。它的功能是存放原始數據、中間數據、運算結果和處理問題的程序。存儲器通常是按地址進行存取數據和程序的。它由許多存儲單元組成,每個單元存放一個若干二進制的數據代碼。為了區分不同的存儲單元,把存儲單元按…

光影mod_MOD墨設設計丨天海之間的烏托之城

WWW.DINZD.COM“人當詩意地棲居”——海德格爾銀湖灣最后一塊稀缺資源,陸止于此,海始于斯。也許會在地圖上迷失,但是卻如仙境般存在,靜謐而神圣,神秘而平和。城市展館 空靈圣潔,隱市秘境天空之盡&#xff0…

計算機繪圖中特征建模的概念,2016年電大 -機械cadcam計算機輔助設計制造習題集.doc...

2016年電大 -機械cadcam計算機輔助設計制造習題集機械CAD/CAM技術習題集青島科技大學CAD中心復習大綱概述掌握CAD、CAE、CAM、CAPP及CAD/CAM系統集成的含義了解硬件組成及分類,掌握聯機系統的聯網方式了解CAD/CAM硬件及軟件的組成了解CAD/CAM系統的功能和任務熟練掌…

逆向查找_「函數說12」數據逆向查找很復雜?match+index讓你輕松搞定

EXCEL進階課堂 函數說 持續更新,這是第12篇教程。歡迎各位小伙伴轉發、點贊、討論,更歡迎私信獲取練習素材,刻意練習才能學有收獲。第12講:如何輕松的實現數據逆向查找——matchindex01 問題引入前面給大家介紹vlookup函數后&…

計算機輔助審計的特點是,淺談新環境下計算機輔助審計的特點和應用_1

淺談新環境下計算機輔助審計的特點和應用_1 (7頁)本資源提供全文預覽,點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧,查找使用更方便哦!24.90 積分從本學科出發,應著重選對國民經濟具有一定實用價值和理論意義的課題。課題具有先…

規培手冊填寫模板_9年老資料員經驗分享,181套資料員模板+302頁工作手冊,成為優秀資料員還能提高工作效率,限時分享...

一個工程項目中,資料員是不可缺少的,資料員主要負責工程的資料收集、編制和整理等工作內容。一個優秀的資料員價值千金,如何才能成為一個優秀的資料員?今天帶來的是在工程中9年資料員的老工編制的資料員工作模板,還有3…

云服務器重裝系統后卡頓,云服務器Windows重裝系統須知

我們Windows2003/2008/2012中文和英文版本可供安裝,安裝需注意:1.Windows2003安裝后,請通過VNC登錄系統設置密碼,默認密碼為空,否則將無法遠程登錄!2.Windows2008/2012系統安裝后,請嘗試使用您設…

dict下如何取值_年薪百萬之路--第十七天 裝飾器(下)和迭代器

一 有參裝飾器>帶有參數的函數裝飾器為被裝飾對象添加認證功能的裝飾器,實現的基本形式如下def deco(func):def wrapper(*args,**kwargs):編寫基于文件的認證,認證通過則執行resfunc(*args,**kwargs),并返回resreturn wrapper如果想提供多種不同的認證方式以供選…

英雄聯盟掉線怎么不顯示重新連接服務器,Win7旗艦版系統玩英雄聯盟掉線總是顯示正在嘗試重新連接如何解決...

英雄聯盟這款游戲想必大家都非常熟悉吧,然而在玩的過程中總是會碰到一些情況,比如有不少win7旗艦版系統用戶在玩英雄聯盟的時候,遇到掉線了,總是顯示正在嘗試重新連接,該怎么辦呢,本文就給大家講解一下Win7…

cobaltstrike擴展_Malwarebytes:使用可變C2下發Cobalt Strike的APT攻擊

6月中旬,Malwarebytes Labs的研究人員發現了一個偽裝成簡歷的惡意Word文檔,該文檔使用模板注入來刪除.Net Loader。研究人員認為這是與APT攻擊有關的多階段攻擊的第一部分。在最后階段,威脅行動者使用了Cobalt Strike’s Malleable C2功能來下…

c mvc ajax 返回下拉框,SpringMVC之ajax+select下拉框交互常用方式

Insert title here//ajaxselect三種常用交互方式window.οnlοadfunction(){test();}function test(){alert("執行");var start 0;var size100;var headNo "111111";$.ajax({type : "post",url : "/ssm_pms/admin_group/list", //此…

浙江大學計算機保研條件_【如何將保研成功率提至100%】來自取得浙大等五所頂尖院校保研資格學長的干貨分享(聯系導師章節已更)...

一、前言寫在開頭:白駒過隙,距離2020年9月28日保研系統確認擬錄取已經過去了四個半月了,期間多次有想要寫下從了解,到準備,到參與,到錄取的整個保研過程,同時分享一些自己踩過的雷,總…

怎么把BAK文件放入服務器中,BAK格式的備份文件如何導入審計軟件

首先:電腦上得安裝有SQL數據庫,并開啟;一般來說,只有以SQLSEVER數據庫存儲的都可以用數據庫軟件,對備份文進行取數;1)在審計系統里面導入bak,必須滿足前提條件:自己電腦上安裝有sqls…

貝殼如何docker安裝openwrt_OpenWrt 中 使用 Docker 安裝可道云出錯。

Nginx 和 PHP 鏡像:[email protected]:~# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEphp 7.2-fpm 2f2db309f0ae 2 weeks ago 365MBnginx latest 274c632b9f13 2 weeks ago 125MB容器代碼docker run --name myphp-fpm -v /opt/nginx/www:/www -d php:7.2-fp…