โปรแกรมควอนตัมแบบง่าย ๆ จะมีลักษณะอย่างไร?


76

ในแง่ของการประกาศชิปโฟโตนิคควอนตัมแบบตั้งโปรแกรมได้ครั้งแรกของโลกฉันสงสัยว่าซอฟต์แวร์สำหรับคอมพิวเตอร์ที่ใช้ควอนตัมพัวพันจะเป็นอย่างไร หนึ่งในโปรแกรมแรก ๆ ที่ฉันเคยเขียนก็คือ

for i = 1 to 10
  print i
next i

ใครสามารถยกตัวอย่างรหัสของความเรียบง่ายที่เทียบเคียงกันได้ซึ่งจะใช้ชิปโฟโตนิคควอนตัม (หรือฮาร์ดแวร์ที่คล้ายกัน) ใน pseudocode หรือภาษาระดับสูง? ฉันมีปัญหาในการกระโดดข้ามแนวคิดจากการเขียนโปรแกรมแบบดั้งเดิมไปจนถึงสิ่งกีดขวาง ฯลฯ


ลิงก์ของคุณเสีย
Suresh Venkat

1
+1 และสำหรับคำถามนี้ ฉันอยากรู้เกี่ยวกับภาษาการเขียนโปรแกรมภายใต้กระบวนทัศน์ที่แตกต่างจากของทัวริงแมชชีนอย่างไรก็ตามเราอาจมาจากการรันโค้ดในคอมพิวเตอร์ควอนตัม
Janoma

คำตอบ:


60

Caveat Emptor:สิ่งต่อไปนี้มีความลำเอียงอย่างมากในการวิจัยของฉันและมุมมองด้าน QC สิ่งนี้ไม่ได้เป็นฉันทามติทั่วไปของสนามและอาจมีการส่งเสริมตนเองบางอย่าง

ปัญหาของการแสดง 'hello world' ของการคำนวณควอนตัมก็คือเรายังคงห่างไกลจากคอมพิวเตอร์ควอนตัมอย่าง Leibnitz หรือ Babbage นั้นมาจากคอมพิวเตอร์ปัจจุบันของคุณ ในขณะที่เรารู้ว่าพวกเขาควรใช้งานในทางทฤษฎี แต่ไม่มีวิธีมาตรฐานในการสร้างคอมพิวเตอร์ควอนตัมทางกายภาพ ผลข้างเคียงของสิ่งนั้นคือไม่มีรูปแบบการเขียนโปรแกรมเดี่ยวของการคำนวณควอนตัม หนังสือเรียนเช่น Nielsen et al. จะแสดงไดอะแกรม 'วงจรควอนตัม' แต่ภาษาเหล่านี้อยู่ห่างจากภาษาการเขียนโปรแกรมอย่างเป็นทางการ: พวกเขาจะได้รับ 'มือโบกมือ' เล็กน้อยในรายละเอียดเช่นการควบคุมแบบดั้งเดิมหรือการจัดการกับผลลัพธ์อินพุต / เอาต์พุต / การวัด

สิ่งที่เหมาะกับฉันที่สุดในการวิจัยของฉันในฐานะนักวิทยาศาสตร์คอมพิวเตอร์การเขียนโปรแกรมภาษาและเพื่อให้ได้ QC ที่ตรงข้ามกับนักวิทยาศาสตร์คอมพิวเตอร์คนอื่น ๆ ก็คือการใช้แบบจำลอง QC ที่ง่ายที่สุดที่ฉันเจอมานั่นทำทุกอย่าง

โปรแกรมคำนวณควอนตัมที่ง่ายที่สุดที่ฉันได้เห็นว่ามีองค์ประกอบที่จำเป็นทั้งหมดคือโปรแกรมสามคำสั่งขนาดเล็กในรูปแบบการเขียนโปรแกรมควอนตัมที่ง่ายที่สุดที่ฉันเคยเจอ ฉันใช้มันเหมือนคุณเป็น 'สวัสดีชาวโลก' เพื่อทำความเข้าใจพื้นฐาน

อนุญาตให้ฉันให้ข้อมูลสรุปแบบย่อที่ง่ายของThe Calculus แคลคูลัสโดย Danos และคณะ 1 ที่อยู่บนพื้นฐานของมันขึ้นอยู่กับคอมพิวเตอร์ควอนตัมทางเดียว2 : qubit จะถูกทำลายเมื่อวัด แต่การวัดจะส่งผลกระทบต่อ qubits อื่น ๆ ทั้งหมดที่เข้าไปพัวพันกับมัน มันมีประโยชน์ทางทฤษฎีและการปฏิบัติมากกว่าคอมพิวเตอร์ควอนตัม 'ตามวงจร' ที่รับรู้โดยชิปโทนิค แต่นั่นคือการอภิปรายที่แตกต่างกัน

พิจารณาคอมพิวเตอร์ควอนตัมที่มีเพียงห้าคำสั่ง: N, E, M, X และ Z "ภาษาแอสเซมบลี" นั้นคล้ายกับคอมพิวเตอร์ทั่วไปของคุณหลังจากดำเนินการหนึ่งคำสั่งมันจะไปยังคำสั่งต่อไปในลำดับ แต่ละคำสั่งใช้ตัวระบุ qubit เป้าหมายเราใช้เพียงตัวเลขที่นี่และข้อโต้แย้งอื่น ๆ

N 2          # create a new quantum bit and identify it as '2'
E 1 2        # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0        # measure qubit '1' with an angle of zero  (angle can be anything in [0,2pi]
             # qubit '1' is destroyed and the result is either True or False
             # operations beyond this point can be dependent on the signal of '1'
X 2 1        # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'

โปรแกรมข้างต้นจึงสร้างอุปกรณ์เสริมเชื่อมต่อกับอินพุตควิบิตวัดอินพุตและขึ้นอยู่กับผลการวัดทำการทำงานบนอุปกรณ์เสริม ผลลัพธ์คือตอนนี้ qubit 2 มีสถานะของ qubit 1 หลังจากการดำเนินการHadamard

ด้านบนเป็นไปตามธรรมชาติในระดับที่ต่ำจนคุณไม่ต้องการเขียนโค้ดด้วยตนเอง ประโยชน์ของแคลคูลัสการวัดคือมันแนะนำ 'pattern' แมโครมาเรียงกันบางชนิดที่ให้คุณเขียนอัลกอริธึมที่ใหญ่กว่าเช่นเดียวกับรูทีนย่อย คุณเริ่มต้นด้วยรูปแบบการเรียนการสอน 1 รายการและขยายรูปแบบที่ใหญ่ขึ้นจากที่นั่น

แทนที่จะเป็นลำดับคำสั่งเหมือนแอสเซมเบลอร์มันเป็นเรื่องธรรมดาที่จะเขียนโปรแกรมลงในรูปของกราฟ:

 input                .........
    \--> ( E ) ---> (M:0)     v
(N) ---> (   ) ------------> (X) ---> output

ที่ลูกศรเต็มเป็นการพึ่งพา qubit และลูกศรประคือการพึ่งพา 'สัญญาณ'

ต่อไปนี้เป็นตัวอย่าง Hadamard เดียวกับที่แสดงในเครื่องมือการเขียนโปรแกรมขนาดเล็กตามที่ฉันจินตนาการว่า 'โปรแกรมเมอร์ควอนตัม' จะใช้

เครื่องมือวัดแคลคูลัส

แก้ไข: (เพิ่มความสัมพันธ์กับคอมพิวเตอร์ 'คลาสสิค') คอมพิวเตอร์คลาสสิคยังคงมีประสิทธิภาพจริงๆในสิ่งที่พวกเขาทำได้ดีที่สุดและด้วยวิสัยทัศน์ก็คือคอมพิวเตอร์ควอนตัมจะถูกใช้ในการโหลดอัลกอริทึมบางตัวคล้ายกับคอมพิวเตอร์ปัจจุบัน GPU ดังที่คุณได้เห็นข้างต้นซีพียูจะควบคุมคอมพิวเตอร์ควอนตัมโดยส่งกระแสคำสั่งและอ่านผลการวัดจากบูลีน 'สัญญาณ' วิธีนี้ทำให้คุณมีการแยกการควบคุมแบบคลาสสิกอย่างเข้มงวดโดย CPU และสถานะควอนตัมและผลกระทบต่อคอมพิวเตอร์ควอนตัม

ตัวอย่างเช่นฉันจะใช้หน่วยประมวลผลร่วมควอนตัมของฉันในการคำนวณบูลีนสุ่มหรือ cointoss คอมพิวเตอร์แบบคลาสสิคนั้นถูกกำหนดไว้แล้วดังนั้นมันจึงกลับมาเป็นตัวเลขสุ่มที่ดี คอมพิวเตอร์ควอนตัมนั้นมีความเป็นไปได้โดยเนื้อแท้ แต่สิ่งที่ฉันต้องทำเพื่อให้ได้ 0 หรือ 1 แบบสุ่มคือการวัดควอบิตที่สมดุลเท่ากัน การสื่อสารระหว่าง CPU และ 'QPU' จะมีลักษณะดังนี้:

 qrand()       N 1; M 1 0;
 ==>  | CPU | ------------> | QPU |  ==> { q1 } ,  []
                 start()
      |     | ------------> |     |  ==> { } , [q1: 0]
                 read(q1)         
      |     | ------------> |     |
                  q1: 0 
 0    |     | <-----------  |     |
 <==

{ ... }หน่วยความจำควอนตัมของ QPU อยู่ที่ไหนที่มี qubits และ[...]เป็นหน่วยความจำแบบคลาสสิก (สัญญาณ) ที่มีบูลีน


  1. Danos และคณะ แคลคูลัสการวัด ฉบับที่ arXiv (2007) quant-PH
  2. Raussendorf และ Briegel คอมพิวเตอร์ควอนตัมทางเดียว จดหมายทบทวนทางกายภาพ (2001) ฉบับที่ 86 (22) pp. 5188-5191

การอภิปรายที่ยอดเยี่ยมของหัวข้อขอบคุณเนื้อ Btw, OP พูดถึง "ฉันมีปัญหาในการกระโดดแนวคิดจากการเขียนโปรแกรมแบบดั้งเดิมไปพัวพัน ฯลฯ " ดังนั้นสิ่งที่ช่วยในการเปลี่ยนแปลงนั้นควรได้รับการต้อนรับ
Kris

คุณพูดถูกฉันดูเหมือนจะพลาดส่วนนั้นไปเพราะความอัปยศ: / การเพิ่มย่อหน้า.
เนื้อวัว

"พิจารณาคอมพิวเตอร์ควอนตัมที่มีเพียงห้าคำสั่ง: N, E, M, X และ Z" ไม่มีคำอธิบายสำหรับการเรียนการสอน Z :(
Fernando Gonzalez Sanchez

Z คล้ายกับ X;) en.wikipedia.org/wiki/Pauli_matricesการดำเนินการ X เปลี่ยนเวกเตอร์ [ab] เป็น [ba] การดำเนินการ Z จะเปลี่ยนเป็น [a -b]
เนื้อ

21

ฉันสมมติว่าlibquantumของ C , ควอนตัม monadsของ Haskell หรือQuantum :: Entanglementของ Perl ทั้งหมดแสดงการคำนวณควอนตัมอย่างซื่อสัตย์ คุณอาจดูตัวอย่างของพวกเขา

โดยทั่วไปคุณอธิบายอัลกอริทึมควอนตัมเป็นอัลกอริทึมแบบดั้งเดิมที่ใช้ชุดของตัวดำเนินการเชิงเส้นกับตำแหน่งซูเปอร์แสดงสถานะของระบบควอนตัมของคุณ บทความในวารสารมักแสดงให้เห็นวงจรที่มีเส้นสำหรับบิตควอนตัม / รีจิสเตอร์และกล่องสำหรับตัวดำเนินการเชิงเส้น

แน่นอนส่วนที่ยากไม่ได้อธิบายอัลกอริทึม แต่เข้าใจว่าทำไมมันถึงทำงานได้เช่นเดียวกับอัลกอริธึมที่น่าจะเป็น ฉันถือว่าอัลกอริธึมของ Groverค่อนข้างเข้าใจได้เสมอ นอกจากนี้คุณยังสามารถอ่านเกี่ยวกับควอนตัมฟูเรียร์ใช้โดยแคระแกร็นของอัลกอริทึม


11

ดูเหมือนว่านี้: ป้อนคำอธิบายรูปภาพที่นี่

คุณก็สามารถเข้าถึงตัวประมวลผลควอนตัมตัวจริงได้เช่นกัน ไปที่นี่และสมัคร: http://www.research.ibm.com/quantum/

นอกจากนี้ยังมีตัวจำลองเพื่อให้คุณสามารถทดสอบโดยไม่ต้องใช้ฮาร์ดแวร์จริงหรือใช้เครดิต (ฟรี) เพื่อเรียกใช้บนฮาร์ดแวร์จริง



3

ฉันคิดว่าคำตอบคือ "เหมือนโปรแกรมคลาสสิคอย่างง่าย"

หากเราพิจารณาแคลคูลัสแลมบ์ดาที่พิมพ์เพียงอย่างเดียวเป็นหัวใจของการเขียนโปรแกรมแบบคลาสสิกเราสามารถใช้ประโยชน์ได้ว่าเป็นทฤษฎีประเภทภายในของหมวดหมู่คาร์ทีเซียนที่ปิดซึ่งทำให้เรามีตัวชี้

nk

ดังนั้นถ้า STLC คือหมวดหมู่ปิดคาร์ทีเซียนประเภท monoidal ปิดสมมาตรคืออะไร? ดีเรารู้ว่าตรรกะภายในของหมวดหมู่ monoidal สมมาตรMILL สิ่งที่เราต้องการคือทฤษฎีชนิดที่สอดคล้องกับ MILL - ทฤษฎีชนิดเชิงเส้น

ก้าวออกจากเรื่องไร้สาระที่เป็นนามธรรมเราจะได้อะไรจากทฤษฎีเชิงเส้นตรง เส้นตรง เราได้รับทรัพยากรเชิงเส้น และนี่คือสิ่งที่เราต้องการ คุณไม่ได้รับอนุญาตให้โคลนบิตควอนตัม คุณไม่ได้รับอนุญาตให้ทำการวัดโดยนัย และลิเนียริตี้หมายความว่าคุณไม่สามารถทำอย่างใดอย่างหนึ่งระหว่างการลดลงได้

มีการทำงานเกี่ยวกับทฤษฎีประเภทเชิงเส้น แต่ไม่ได้ตัน ฉันได้ความคิดบางส่วนจากบทความนี้: ฟิสิกส์, โทโพโลยี, ลอจิกและการคำนวณ: Rosetta Stoneโดย Mike Stay และ John Baez ซึ่งมีรายละเอียดมากกว่าการโบกมือของฉัน


0

ฉันอาจจะไปกับการดำเนินการเคาน์เตอร์ "หารด้วย n เล็ก" ง่าย ๆ เพื่อเริ่มต้นด้วย

ตัวอย่างเช่น: กำหนดแหล่งสัญญาณ 10GHz สร้างเอาต์พุต 5GHz (แต่ตัวเลขเหล่านี้เป็นแบบสุ่มและมีจุดประสงค์เพื่อแสดงแนวคิดเท่านั้น)

สิ่งนี้ช่วยให้เราเพิกเฉยต่อปัญหาต่างๆเช่นพื้นที่จัดเก็บข้อมูลและสถาปัตยกรรม Von Neumann และช่วยให้เรามุ่งเน้นไปที่องค์ประกอบที่ทำสิ่งที่เข้าใจได้จริงหรือไม่

เป้าหมายต่อไปก็คือการสร้างเพลงเล็ก ๆ ของ "small n" (แต่ฉันจะฟัง pushback จากนักวิจัยของฉันด้วย - หากพวกเขารู้สึกว่าเป้าหมายเล็ก ๆ อื่น ๆ จะมีผลในทันทีฉันอยากจะเข้าใจ สิ่งที่พวกเขาบอกฉัน)

เป้าหมายระยะยาวจะรวมถึงกลไกในการปั๊มข้อมูลเข้าและออกจากระบบและเก็บข้อมูลนั้นไว้นานพอที่จะใช้

(มันอาจจะคุ้มค่าที่จะจำได้ว่าโปรแกรมคอมพิวเตอร์ยุคแรก ๆ นั้น "เดินสาย" ทุกอย่างมันเป็นเพียงหลังจากประสบการณ์ที่กว้างขวางกับระบบเหล่านั้นที่เราสามารถใช้โปรแกรมที่เก็บไว้ได้)


-6

ฉันคิดว่าการเขียนโปรแกรมคอมพิวเตอร์ควอนตัมก็ควรจะเห็นจากมุมมองที่แตกต่างกันว่าการเขียนโปรแกรมเชิงวัตถุปกติ

QC มีความสามารถของสมองในการคิดและตัดสินใจเช่นเดียวกัน ความสามารถในการคิดหมายถึงมีพลังของการขุดข้อมูลซึ่งเป็นแหล่งข้อมูลที่จะเป็นทางเลือกที่เป็นไปได้และตัดสินใจว่าจะเลือกแหล่งใดจากรัฐที่เป็นไปได้ทั้งหมด

ซอฟต์แวร์ ณ จุดนี้จะต้องได้รับการออกแบบสถาปัตยกรรมในลักษณะที่ qubits แสดงแหล่งข้อมูลที่สามารถขุดข้อมูลและเชื่อมโยงกับกลุ่มข้อมูลอื่น ๆ

QC ควรมี data-miner ที่ประมวลผลการอ่านข้อมูล, เชื่อมโยงตัวเลือกที่แตกต่างกันเข้าด้วยกันกลุ่มของแหล่งข้อมูลซึ่งข้อมูล rapresent, อ่านสถานะที่เป็นไปได้ทั้งหมด

นั่นคือวิธีที่สมองของเราทำงาน QC นั้นสามารถเข้าใจและปฏิบัติตามกฎหมายของ Quantum Mechanic ซึ่งหมายความว่าคุณให้ปัญหาและ QC แสดงวิธีแก้ปัญหาที่เป็นไปได้ทั้งหมดให้คุณ

นั่นเป็นวิธีที่มีประสิทธิภาพเป็น QC คุณเห็นด้วย?

https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf นี่เป็นจุดเริ่มต้นจากนั้นสร้าง dataminer เพื่อสร้างอุปกรณ์ควอนตัมที่มีประตู ฯลฯ ผู้อ่านที่เชื่อมต่อกับ dataminer เพื่ออ่านและ ให้ข้อเสนอแนะ ข้อมูลโฮสต์ส่วนประกอบควอนตัมของ Datasource และขอบเขตของความรู้ที่ซึ่งตัวตรวจสอบข้อมูลทำหน้าที่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.