Ile kuantum devresi diyagramlarını görselleştirme Q#
Kuantum devresi diyagramları, kuantum işlemlerinin görsel bir gösterimidir. Kubitlerin, kendilerine uygulanan geçitler ve ölçümler de dahil olmak üzere kuantum programı aracılığıyla akışını gösterirler.
Bu makalede, Visual Studio Code ve Jupyter Notebook'ları kullanarak kuantum devre diyagramlarıyla kuantum algoritmalarını görsel olarak temsil etmeyi öğreneceksiniz.
Kuantum devresi diyagramı kuralları hakkında daha fazla bilgi için bkz . Kuantum devreleri kuralları.
Önkoşullar
Kuantum devrelerini görselleştirmek için Visual Studio Code kullanmak istiyorsanız şunları yapmanız gerekir:
- Visual Studio Code'nin en son sürümü veya Web'de VS Code'un açılması.
- Azure Quantum Development Kit uzantısının en son sürümü.
Visual Studio Code ile kuantum devreleri
Visual Studio Code'da programların kuantum devrelerini Q# görselleştirmek için bu adımları izleyin. Kuantum devresi diyagramı kuralları hakkında daha fazla bilgi için bkz . Kuantum devreleri kuralları.
Bir Q# program için devre diyagramlarını görüntüleme
Q# bir dosyayı Visual Studio Code açın veya kuantum örneklerinden birini yükleyin.
Programın kuantum devresini Q# görselleştirmek için Görünüm -> Komut Paleti'ni seçin ve "devre" yazın. Bu seçenek : Bağlantı hattını göster seçeneğini ortaya çıkarmalıdırQ#. Ayrıca, aşağıdaki
@EntryPoint()
komut listesinden Devre'ye tıklayabilirsiniz.Devre, devre penceresinde görüntülenir Q# . Örneğin, aşağıdaki bağlantı hattı bir kubiti bir süper pozisyona yerleştiren ve ardından ölçen bir işleme karşılık gelir. Devre diyagramı, |0⟩ durumuna başlatıldığı bir kubit yazmaç gösterir. Ardından kubite bir Hadamard kapısı ( H) uygulanır ve ardından ölçüm simgesiyle temsil edilen bir ölçüm işlemi uygulanır.
İşlemler için devre diyagramlarını görüntüleme
Kuantum devresini tek Q# bir işlem için görselleştirebilirsiniz. Bunu yapmak için işlem bildiriminin üzerinde görünen kod merceğindeki Devre düğmesine tıklayın.
Hata ayıklama sırasında devre diyagramlarını görüntüleme
Bir Q#programda hata ayıklarken, kuantum devresini programın geçerli durumuna göre görselleştirebilirsiniz.
Aşağıdaki
@EntryPoint()
kod merceği komutları listesinden Hata Ayıkla düğmesine tıklayın.Sol taraftaki Çalıştır ve hata ayıklama görünümünde, programda ilerlerken devreyi göstermek için Değişkenler bölmesinin altındaki Kuantum Devresi bölümünü genişletin.
Program çalıştırılırken bağlantı hattı güncelleştirmesini görmek için kodda adım adım ilerleyebilir ve çeşitli noktalarda kesme noktaları ayarlayabilirsiniz.
Geçerli kuantum devresi Devre panelinde gösterilirQ#. Bu devre diyagramı simülatörün geçerli durumunu, yani geçerli yürütme noktasına kadar uygulanan kapıları temsil eder.
Jupyter Notebooks ile kuantum devreleri
Jupyter Notebooks'ta, paketini kullanarak qsharp-widgets
kuantum devrelerini görselleştirebilirsiniz. Bu paket, kuantum devresi diyagramını SVG görüntüsü olarak işleyen bir pencere öğesi sağlar.
Visual Studio Code'da Komut paleti Görüntüle'yi > seçin ve İçerik Oluşturucu: Yeni Jupyter Notebook'yi seçin.
Not defterinin ilk hücresinde aşağıdaki kodu çalıştırarak modülü içeri aktarınQ#.
import qsharp
Yeni bir hücre ekleyin ve kodu girin Q# . Örneğin, aşağıdaki kod bir Bell State hazırlar.
%%qsharp // Prepare a Bell State. use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]);
işlevini kullanarak
dump_circuit()
programın geçerli durumuna göre bir kuantum devresi görüntüleyebilirsiniz. Örneğin, devre diyagramı |0⟩ durumuna başlatılan iki kubit yazmaç gösterir. Ardından, ilk kubite bir Hadamard kapısı ( H) uygulanır. Bundan sonra, denetim olarak ilk kubit kullanılarak bir CNOT kapısı uygulanır; bu nokta olarak gösterilir ve ikinci kubit targetde X olarak gösterilir.qsharp.dump_circuit()
q_0 ── H ──── ● ── q_1 ───────── X ──
Paketini kullanarak
qsharp-widgets
kuantum devrelerini SVG görüntüsü olarak görselleştirebilirsiniz. Bu durumda, CNOT kapısı iki kubiti bağlayan bir çizgi olarak temsil edilir ve denetim kubiti üzerinde bir nokta ve kubit üzerinde target bir kesişim çizilir. Daha fazla bilgi için bkz . Kuantum devreleri kuralları.from qsharp_widgets import Circuit Circuit(qsharp.dump_circuit())
Giriş ifadesi için devre diyagramlarını görüntüleme
Giriş ifadesini çağırıp qsharp.circuit()
bağımsız değişken olarak geçirerek giriş ifadesi içeren herhangi bir program için devre diyagramı oluşturabilirsiniz.
Örneğin, yeni bir hücre ekleyin ve GHZ durumunu hazırlayan aşağıdaki kodu kopyalayın.
%%qsharp open Microsoft.Quantum.Diagnostics; open Microsoft.Quantum.Measurement; operation GHZSample(n: Int) : Result[] { use qs = Qubit[n]; H(qs[0]); ApplyToEach(CNOT(qs[0], _), qs[1...]); let results = MeasureEachZ(qs); ResetAll(qs); return results; }
Yeni bir hücre ekleyin ve bağlantı hattını görselleştirmek için aşağıdaki kodu çalıştırın. Örneğin, 3 kubitli bir GHZ durumu hazırlayın.
Circuit(qsharp.circuit("GHZSample(3)"))
Kubitli işlemler için devre diyagramlarını görüntüleme
Kubitleri veya kubit dizilerini alan herhangi bir işlem için devre diyagramları oluşturabilirsiniz. Diyagramda giriş kubiti kadar kablo ve işlem içinde ayrılan ek kubitler gösterilir. İşlem bir kubit (Qubit[])
dizisi aldığında, bağlantı hattı dizisini 2 kubitin bir yazmaç olarak gösterir.
Yeni bir hücre ekleyin ve aşağıdaki örneği kopyalayın. Bu kod bir kedi durumu hazırlar.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }
Yeni bir hücre ekleyin ve işlemin devresini
PrepareCatState
görselleştirmek için aşağıdaki kodu çalıştırın.Circuit(qsharp.circuit(operation="PrepareCatState"))
Devre diyagramlarını etkileyen koşullar
Kuantum devrelerini görselleştirirken, aşağıdaki koşullar devre diyagramının görselleştirmesini etkileyebilir.
Dinamik devreler
Devre diyagramları, bir Q# program içindeki tüm klasik mantık yürütülerek ve ayrılmış kubitleri veya uygulanan geçitleri izleyerek oluşturulur. Döngüler ve koşullular yalnızca klasik değerlerle ilgilendikleri sürece desteklenir.
Ancak, döngüler ve kubit ölçüm sonuçlarını kullanan koşullu ifadeler içeren programlar, devre diyagramıyla temsil etmek için daha karmaşıktır. Örneğin, aşağıdakine benzer bir ifade
if (M(q) == One) {
X(q)
}
geçitleri bir ölçüm sonucu üzerinde koşullu olduğundan, basit bir devre diyagramı ile temsil edilemez. Böyle bir devreye dinamik devre adı verilir.
Devre diyagramları, programı kuantum simülatöründe çalıştırarak ve uygulandıkça geçitleri izleyerek dinamik devreler için oluşturulabilir. Bu, simülasyon yapılırken kubitler ve geçitler izlendiğinden izleme modu olarak adlandırılır.
İzlenen devrelerin dezavantajı, tek bir simülasyon için yalnızca ölçüm sonucunu ve sonuçta elde edilen kapı uygulamalarını yakalamasıdır. Yukarıdaki örnekte ölçüm sonucu ise Zero
, diyagramda geçidi görmezsiniz X
. Simülasyonun başka bir çalıştırması biraz farklı bir devre gösterebilir.
Hedef profil
Şu anda seçili target olan profil, devre diyagramlarının nasıl oluşturulduğunu etkiler. Hedef profiller, donanımın özelliklerini target ve kuantum programına uygulanan kısıtlamaları belirtmek için kullanılır.
target Profil Sınırsız olarak ayarlandığında, devre diyagramları programda Q# çağrılan kuantum işlemlerini gösterir. target Profil QIR tabanına ayarlandığında devre diyagramları, program bu target profille Azure Quantum'a gönderilirse donanımda çalıştırılacak kuantum işlemlerini gösterir.
Not
VS Code'da profil seçmek target için Görünüm -> Komut Paleti'ne gidin ve şunu yazın Q#: Azure Quantum QIR target profilini ayarlayın. Açılan listeden veya
QIR Base Profile
seçebilirsinizUnrestricted
.Python'da profil seçmek target için veya
qsharp.init(target_profile=qsharp.TargetProfile.Base)
yazınqsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
.
Özellikle, elde edilen bağlantı hattının donanımın özellikleriyle uyumlu olmasını sağlayacak kapı ayrıştırmaları target uygulanır. Bunlar, kod oluşturma ve Azure Quantum'a gönderme sırasında uygulanan ayrıştırmalarla aynıdır.
Örneğin, bir kubiti ve kubit dizisini ölçen aşağıdaki Q# programı göz önünde bulundurun.
namespace Sample { open Microsoft.Quantum.Measurement; @EntryPoint() operation Main() : (Result, Result[]) { // The `M` operation performs a measurement of a single qubit in the // computational basis, also known as the Pauli Z basis. use q = Qubit(); let result = M(q); Reset(q); // The `MeasureEachZ` operation measures each qubit in an array in the // computational basis and returns an array of `Result` values. use qs = Qubit[2]; let results = MeasureEachZ(qs); return (result, results); } }
target Profil Kısıtlanmamış olarak ayarlandığında, bağlantı hattında görüntülenen geçitler, programda çağrılan kuantum işlemlerine Q# tam olarak karşılık gelir.
target Profil QIR tabanı olduğunda bağlantı hattı farklı görünür. Temel Profil targets ölçümden sonra kubitin yeniden kullanılmasına izin vermediğinden, ölçüm artık dolanık kubit üzerinde gerçekleştirilir.
Reset
İşlem Temel Profilde desteklenen bir geçit olmadığından bırakılır. Sonuçta elde edilen bağlantı hattı, bu program bu profille Azure Quantum'a gönderilirse donanımda çalıştırılacak bağlantı hattıyla target eşleşir.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin