Aracılığıyla paylaş


Kuantum programlama diline giriş Q#

Q# , kuantum algoritmaları geliştirmeye ve çalıştırmaya yönelik üst düzey, açık kaynak bir programlama dilidir. Q# Quantum Geliştirme Seti'ne (QDK) dahil edilir. Daha fazla bilgi için bkz . Quantum Development Kit'i ayarlama.

Kuantum programlama dili Q# olarak aşağıdaki dil, derleyici ve çalışma zamanı gereksinimlerini karşılar:

  • Donanımdan bağımsız: Kuantum algoritmalarındaki kubitler belirli bir kuantum donanımına veya düzenine bağlı değildir. Derleyici Q# ve çalışma zamanı, program kubitlerinden fiziksel kubitlere eşlemeyi işler.
  • Kuantum ve klasik bilişimi tümleştirir: Evrensel bir kuantum bilgisayarda klasik ve kuantum hesaplamaları gerçekleştirebilme özelliği temel öneme sahiptir.
  • Fizik yasalarına saygı gösterir:Q# ve kuantum algoritmaları kuantum fiziğinin kurallarına uyar. Örneğin, içinde kubit durumunu doğrudan kopyalayamaz veya bu duruma Q#erişemezsiniz.

Programın Q# yapısı

Kuantum programları yazmaya başlamadan önce, bunların yapısını ve bileşenlerini anlamak önemlidir. Süper pozisyon durumu oluşturan aşağıdaki Q# programı göz önünde bulundurun:

namespace Superposition {
    @EntryPoint()
    operation MeasureOneQubit() : Result {
        // Allocate a qubit. By default, it's in the 0 state.  
        use q = Qubit();  
        // Apply the Hadamard operation, H, to the state.
        // It now has a 50% chance of being measured as 0 or 1.
        H(q);      
        // Measure the qubit in the Z-basis.
        let result = M(q);
        // Reset the qubit before releasing it.
        Reset(q);
        // Return the result of the measurement.
        return result;
    }
}

Açıklamalarına ()//Superposition göre, program önce bir kubit ayırır, kubiti süper konuma yerleştirmek için bir işlem uygular, kubit durumunu ölçer, kubiti sıfırlar ve son olarak sonucu döndürür. Şimdi bu programı bileşenlerine ayıralım.

Kullanıcı ad alanları

Q# programlar isteğe bağlı olarak aşağıdakiler gibi kullanıcı tanımlı bir ad alanıyla başlayabilir:

namespace Superposition {
    // Your code goes here.
}

Ad alanları ilgili işlevleri düzenlemenize yardımcı olabilir. Her Q# programda yalnızca bir olabilir namespace. Bir ad alanı belirtilmezse, Q# derleyici ad alanı olarak dosya adını kullanır. Örneğin, Superposition program şöyle yazılabilir:

@EntryPoint()
operation MeasureOneQubit() : Result {
    // Allocate a qubit. By default, it's in the 0 state.  
    use q = Qubit();  
    // Apply the Hadamard operation, H, to the state.
    // It now has a 50% chance of being measured as 0 or 1.
    H(q);      
    // Measure the qubit in the Z-basis.
    let result = M(q);
    // Reset the qubit before releasing it.
    Reset(q);
    // Return the result of the measurement.
    return result;
}

Standart kitaplık, Q# kuantum programlarında kullanabileceğiniz işlevleri ve işlemleri içeren önceden tanımlanmış ad alanlarına sahiptir. Daha fazla bilgi için bkz . Yerleşik ad alanları.

Giriş noktaları

Varsayılan olarak, Q# derleyici varsa programda herhangi bir yerde bulunabilen bir programı işlemden Main() yürütmeye başlar. İsteğe bağlı olarak, yürütme noktası olarak programdaki herhangi bir işlemi belirtmek için özniteliğini kullanabilirsiniz @EntryPoint() .

Programda Superposition , daha açıklayıcı MeasureOneQubit() işlem programın giriş noktasıdır.

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...

Ancak, işlem @EntryPoint()olarak yeniden adlandırılarak MeasureOneQubit() program özniteliği olmadan Main() da yazılabilir:

// The Q# compiler automatically detects the Main() operation as the entry point. 

operation Main() : Result {
    // Allocate a qubit. By default, it's in the 0 state.  
    use q = Qubit();  
    // Apply the Hadamard operation, H, to the state.
    // It now has a 50% chance of being measured as 0 or 1.
    H(q);      
    // Measure the qubit in the Z-basis.
    let result = M(q);
    // Reset the qubit before releasing it.
    Reset(q);
    // Return the result of the measurement.
    return result;
}

Türler

Q# Bool ve Stringkuantum bilişimine özgü türler sağlar. Örneğin, Result türü bir kubit ölçümünün sonucunu temsil eder ve iki değerden birine sahip olabilir: Zero veya One.

Programda Superposition , MeasureOneQubit() işlem, işlemin dönüş türüne karşılık gelen bir Result tür M döndürür. Ölçüm sonucu, deyimi kullanılarak tanımlanan yeni bir değişkende let depolanır:

// The operation definition returns a Result type.
operation MeasureOneQubit() : Result {
    ...
    // Measure the qubit in the Z-basis, returning a Result type.
    let result = M(q);
    ...

Q# ayrıca aralıkları, dizileri ve tanımlama kümelerini tanımlayan türler de sağlar. Kendi özel türlerinizi bile tanımlayabilirsiniz.

Qubitleri ayırma

içinde Q#kubitleri anahtar sözcüğünü use kullanarak ayırırsınız. Kubitler her zaman durumunda $\ket{0}$ ayrılır.

Program Superposition tek bir kubit tanımlar:

// Allocate a qubit.
use q = Qubit();

Ayrıca birden çok kubit ayırabilir ve her birine dizini aracılığıyla erişebilirsiniz:

use qubits = Qubit[2]; // Allocate two qubits.
H(qubits[0]); // Apply H to the first qubit.
X(qubits[1]); // Apply X to the second qubit.

Daha fazla bilgi için bkz . Use deyimi.

Kuantum işlemleri

Kubiti ayırdıktan sonra, çağrılabilir olarak da bilinen işlemlere ve işlevlere geçirebilirsiniz. İşlemler , bir Q# programın temel yapı taşlarıdır. İşlem Q# , kuantum alt yordamı veya kubit yazmacı durumunu değiştiren kuantum işlemleri içeren çağrılabilir bir yordamdır.

Bir Q# işlemi tanımlamak için işlem için bir ad, girişleri ve çıkışı belirtirsiniz. Programda Superposition , MeasureOneQubit() işlem temelde programın tamamıdır. Parametre almaz ve bir Result tür döndürür:

operation MeasureOneQubit() : Result {
    ...
}

Burada parametre almama ve dönüş değeri beklememe gibi temel bir örnek verilmiştir. Değer Unit , diğer dillerdeki ile NULL eşdeğerdir:

operation SayHelloQ() : Unit {
    Message("Hello quantum world!");
}

Standart Q# kitaplık, programdaki Hadamard işlemi Hgibi kuantum programlarında Superposition kullanabileceğiniz işlemler de sağlar. Z tabanında bir kubit verildikten sonra, H kubiti eşit bir süper pozisyona yerleştirir ve burada veya Zeroolarak One ölçülmesi %50 şansa sahiptir.

Kubitleri ölçme

Birçok kuantum ölçümü türü olsa da Pauli Q# ölçümleri olarak da bilinen tek kubitlerdeki yansıtıcı ölçümlere odaklanır.

içindeQ#, Measure işlem belirtilen Pauli temelinde bir veya daha fazla kubit ölçer; bu, , PauliXveya PauliYolabilirPauliZ. Measureveya Resulttüründe bir Zero döndürürOne.

Hesaplama temelinde $bir ölçü uygulamak için \lbrace\ket{0},\ket{1}\rbrace$, Pauli Z tabanında kubit ölçen işlemi de kullanabilirsiniz M . Bu, ile Meşdeğer hale getirirMeasure([PauliZ], [qubit]).

Program Superposition şu M işlemi kullanır:

// Measure the qubit in the Z-basis.
let result = M(q);

Kubitleri sıfırlama

içindeQ#, kubitler serbest bırakıldığında durumunda olmalıdır$\ket{0}$. Reset Program sonunda serbest bırakmadan önce her kubiti $\ket{0}$ duruma sıfırlamak için işlemini kullanın. Kubitin sıfırlanmaması çalışma zamanı hatasına neden olur.

// Reset a qubit.
Reset(q);

Yerleşik ad alanları

Standart Q# kitaplık, kuantum programlarında kullanabileceğiniz işlevleri ve işlemleri içeren yerleşik ad alanlarına sahiptir. Örneğin ad alanı, Microsoft.Quantum.Intrinsic sonuçları ölçmek ve programın herhangi bir yerinde kullanıcı iletilerini görüntülemek gibi M yaygın olarak kullanılan işlemleri ve Message işlevleri içerir.

bir işlevi veya işlemi çağırmak için, tam ad alanını belirtebilir veya bir import deyimi kullanabilirsiniz. Bu, bu ad alanı için tüm işlevleri ve işlemleri kullanılabilir hale getirir ve kodunuzu daha okunabilir hale getirir. Aşağıdaki örnekler aynı işlemi çağırır:

Microsoft.Quantum.Intrinsic.Message("Hello quantum world!");
// imports all functions and operations from the Microsoft.Quantum.Intrinsic namespace.
import Microsoft.Quantum.Intrinsic.*;
Message("Hello quantum world!");

// imports just the `Message` function from the Microsoft.Quantum.Intrinsic namespace.
import Microsoft.Quantum.Intrinsic.Message;
Message("Hello quantum world!");
// namespaces in the standard library may be imported using `Std` instead of `Microsoft.Quantum`. 
import Std.Intrinsic.*;
Message("Hello quantum world!");

Programın Superposition tam ad alanlarına sahip herhangi bir import deyimi veya çağrısı yoktur. Bunun nedeni, geliştirme ortamının Q# yaygın olarak kullanılan işlevleri ve işlemleri içeren ve Microsoft.Quantum.Coread alanlarını Microsoft.Quantum.Intrinsic otomatik olarak yüklemesidir.

Programı iyileştirmek için işlemini kullanarak Microsoft.Quantum.Measurement ad alanından MResetZ yararlanabilirsinizSuperposition. MResetZ aşağıdaki örnekte olduğu gibi ölçüm ve sıfırlama işlemlerini tek bir adımda birleştirir:

// Import the namespace for the MResetZ operation.
import Microsoft.Quantum.Measurement.*;

@EntryPoint()
operation MeasureOneQubit() : Result {
    // Allocate a qubit. By default, it's in the 0 state.      
    use q = Qubit();  
    // Apply the Hadamard operation, H, to the state.
    // It now has a 50% chance of being measured as 0 or 1. 
    H(q);   
    // Measure and reset the qubit, and then return the result value.
    return MResetZ(q);
}

ve Azure Quantum ile Q# kuantum programları geliştirme

Q# ve Azure Quantum, kuantum programları geliştirmek ve çalıştırmak için güçlü bir birleşimdir. ve Azure Quantum ile Q# kuantum programları yazabilir, davranışlarının simülasyonunu yapabilir, kaynak gereksinimlerini tahmin edebilir ve bunları gerçek kuantum donanımında çalıştırabilirsiniz. Bu tümleştirme, kuantum bilişiminin potansiyelini keşfetmenize ve karmaşık sorunlara yönelik yenilikçi çözümler geliştirmenize olanak tanır. İster yeni başlayan ister deneyimli bir kuantum geliştiricisi olun ve Azure Quantum, Q# kuantum bilişiminin gücünden faydalanmak için ihtiyacınız olan araçları ve kaynakları sağlar.

Aşağıdaki diyagramda, bir kuantum programının ve Azure Quantum ile Q# geliştirdiğiniz zaman hangi aşamalardan geçtiği gösterilmektedir. Programınız geliştirme ortamıyla başlar ve işin gerçek kuantum donanımına gönderilmesiyle biter.

Kuantum programlama geliştirme iş akışını gösteren diyagram.

Şimdi diyagramdaki adımları ayıralım.

Geliştirme ortamınızı seçin

Kuantum programlarınızı tercih ettiğiniz geliştirme ortamında çalıştırın. Azure Quantum web sitesindeki çevrimiçi kod düzenleyicisini, Azure portalındaki Azure Quantum çalışma alanınızda barındırılan Jupyter Not Defterlerini veya Visual Studio Code ile yerel bir geliştirme ortamını kullanabilirsiniz. Daha fazla bilgi için bkzQ# çalıştırmanın farklı yolları.

Kuantum programınızı yazma

Kuantum Geliştirme Seti'ni (QDK) kullanarak içinde Q# kuantum programları yazabilirsiniz. Başlamak için bkz . Hızlı Başlangıç: İlk Q# programınızı oluşturma.

Q#Ayrıca QDK, Qiskit ve Cirq gibi kuantum bilişimi için diğer diller için destek sunar.

Python ile tümleştirme

Çeşitli IDE'lerde kendi başına veya Python ile birlikte kullanabilirsiniz Q# . Örneğin, işlemleri çağırmak Q# için Python konak programıyla bir proje kullanabilirsinizQ#. Ayrıca Jupyter Notebooks'ta Python ile tümleştirebilirsiniz Q# . Daha fazla bilgi için bkzQ# çalıştırmanın farklı yolları.

%%qsharp komutu

Varsayılan olarak, Q# Jupyter Notebooks'taki programlar Python paketini kullanır ipykernel . Not defteri hücresine kod eklemek Q# için Python paketiyle %%qsharp birlikte etkinleştirilen komutunu ve ardından kodunuzu qsharp kullanınQ#.

kullanırken %%qsharpaşağıdakileri göz önünde bulundurun:

  • 'yi etkinleştirmek import qsharpiçin önce komutunu çalıştırmanız %%qsharp gerekir.
  • %%qsharp kapsamları, göründüğü not defteri hücresinin kapsamlarıdır ve hücre türünü Python'dan olarak Q#değiştirir.
  • Python deyimini önüne veya arkasına %%qsharpkoyamazsınız.
  • Q# aşağıdaki %%qsharp kod söz dizimine uymalıdır Q# . Örneğin, açıklamaları belirtmek ve // kod satırlarını sonlandırmak için yerine # kullanın;.

Not

Azure portalındaki Azure not defterleri ve qsharp Python paketlerinin azure-quantum en son sürümlerini içerir, bu nedenle hiçbir şey yüklemeniz gerekmez. Daha fazla bilgi için bkz . Kullanmaya başlama Q# ve Azure Quantum not defterleri.

Kaynak tahmini

Gerçek kuantum donanımında çalıştırmadan önce, programınızın mevcut donanımda çalıştırılıp çalıştırılamayacağını ve kaç kaynak tüketebileceğini belirlemeniz gerekir.

Azure Quantum Kaynak Tahmin Aracı, mimari kararları değerlendirmenize, kubit teknolojilerini karşılaştırmanıza ve belirli bir kuantum algoritmasını yürütmek için gereken kaynakları belirlemenize olanak tanır. Önceden tanımlanmış hataya dayanıklı protokoller arasından seçim yapabilir ve temel alınan fiziksel kubit modelinin varsayımlarını belirtebilirsiniz.

Daha fazla bilgi için bkz . İlk kaynak tahmininizi çalıştırma.

Not

Azure Quantum Resources Estimator ücretsizdir ve Azure hesabı gerektirmez.

Programınızı simülasyonda çalıştırma

Bir kuantum programını derleyip çalıştırdığınızda QDK, kuantum simülatörünün bir örneğini oluşturur ve kodu buna geçirir Q# . Simülatör, Q# kodunu kullanarak kubitler (kuantum parçacıklarının simülasyonları) oluşturur ve bu kubitlerin durumlarını değiştirmek için dönüştürme işlemleri uygular. Ardından simülatördeki kuantum işlemlerinin sonuçları programa döndürülür. Q# kodunu simülatörde yalıtmak, algoritmaların kuantum fiziği yasalarını izlemesini ve kuantum bilgisayarlarda doğru şekilde çalışmasını sağlar.

Programınızı gerçek kuantum donanımına gönderme

Tercih ettiğiniz geliştirme ortamı aracılığıyla hem yerel hem de çevrimiçi olarak programlarınızı Q# (iş olarak da bilinir) Azure Quantum'a gönderebilirsiniz. Daha fazla bilgi için bkzQ# gönderme. Ayrıca Qiskit ve Cirq dillerinde yazılmış kuantum devrelerini çalıştırabilir ve gönderebilirsiniz.

Azure Quantum, bugün sektör liderleri tarafından sunulan en ilgi çekici ve çeşitli kuantum donanımlarından bazılarını sunar. Desteklenen donanım sağlayıcılarının geçerli listesi için bkz. Kuantum bilgi işlem sağlayıcıları.

Not

Bulut tabanlı Quantinuum Öykünücüsü hedefi Azure hesabı olmadan kullanılabilir. Azure Quantum sağlayıcılarının geri kalanına iş göndermek için bir Azure hesabına ve kuantum çalışma alanına ihtiyacınız vardır. Kuantum çalışma alanınız yoksa bkz . Azure Quantum çalışma alanı oluşturma.

Aşağıdaki diyagramda, işinizi gönderdikten sonra temel iş akışı gösterilmektedir:

Azure Quantum'a bir iş gönderildikten sonra iş akışını gösteren diyagram.