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 kullanıcı tanımlı bir ad alanıyla başlar, örneğin:

namespace Superposition {
    // Your code goes here.
}

Ad alanları ilgili işlevleri düzenlemenize yardımcı olur. Her Q# programda yalnızca bir olabilir namespace.

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ı

özniteliği derleyiciye @EntryPoint() Q# programı yürütmeye nereden başlayacağını bildirir. Birden çok işlev ve işlem içeren bir programda, herhangi birinin önüne yerleştirerek @EntryPoint() programın orada başlatılmasını sağlayabilir ve sırayla devam edebilirsiniz.

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

Türler

Q#, , DoubleBoolve gibi Intçoğu dil için ortak olan yerleşik türler 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 Oneolarak Zero ö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, , PauliYveya PauliZolabilirPauliX. Measureveya Onetüründe bir Result döndürürZero.

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 Measure([PauliZ], [qubit])eşdeğer hale getirirM.

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 open 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!");
open Microsoft.Quantum.Intrinsic;
Message("Hello quantum world!");

Programın Superposition tam ad alanlarına sahip herhangi bir open 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.Intrinsicad alanlarını Microsoft.Quantum.Core otomatik olarak yüklemesidir.

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

namespace Superposition {
    // Open the namespace for the MResetZ operation.
    open 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 bkz. Programları çalıştırmanın Q# 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 bkz. Programları çalıştırmanın Q# 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 Q# kullanın%%qsharp.

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

  • 'yi etkinleştirmek %%qsharpiçin önce komutunu çalıştırmanız import 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 azure-quantum Python paketlerinin qsharp 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 bkz. İşleri göndermeQ#. 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 H Serisi Ö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.