Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
👉 Microsoft Quantum platformu hakkında daha fazla bilgi edinin
Q#, Microsoft tarafından kuantum programları yazmak için geliştirilen üst düzey, bir açık kaynak programlama dilidir. Q# Microsoft Quantum Geliştirme Seti'ne (QDK) dahil edilir. Daha fazla bilgi için bkz. Microsoft Quantum Geliştirme Seti'ni ayarlama.
Kuantum programlama dili olarak Q# dil, derleyici ve çalışma zamanı için aşağıdaki gereksinimleri karşılar:
- Donanımdan bağımsız: Kuantum algoritmalarındaki kubitler belirli bir kuantum donanımına veya düzenine bağlı değildir. Q# derleyicisi ve çalışma zamanı, program kubitlerinden fiziksel kubitlere eşlemeyi işler ve aynı kodun farklı kuantum işlemcilerinde çalışmasına olanak tanır.
- Kuantum ve klasik bilgi işlemin tümleştirilmesi:Q#, evrensel kuantum bilişimi için temel olan kuantum ve klasik hesaplamaların tümleştirilmesine olanak tanır.
- Qubit yönetimi:Q#; süper pozisyon durumları oluşturma, kubitleri dolanık duruma getirme ve kuantum ölçümleri gerçekleştirme gibi kubitleri yönetmek için yerleşik işlemler ve işlevler sağlar.
- Fizik kurallarına saygı gösterin:Q# ve kuantum algoritmaları kuantum fiziği kurallarına uymalıdır. Örneğin, Q# içinde kubit durumunu doğrudan kopyalayamaz veya bu duruma erişemezsiniz.
Q#kaynakları hakkında daha fazla bilgi için Neden Q#gerekiyor? blog gönderisine bakın..
Programın Q# yapısı
Q# programları yazmaya başlamadan önce, bunların yapısını ve bileşenlerini anlamak önemlidir. Aşağıdaki Q# programı, Superposition adlı süperpozisyon durumu oluşturan bir programdır, 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 ()//Q# 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 Q# programını bileşenlerine ayıralım.
Kullanıcı ad alanları
Q# programlar isteğe bağlı olarak kullanıcı tanımlı bir ad alanıyla başlayabilir, örneğin:
namespace Superposition {
// Your code goes here.
}
Ad alanları ilgili işlevleri düzenlemenize yardımcı olabilir. Ad alanları programlarda Q# isteğe bağlıdır, yani ad alanı tanımlamadan bir program yazabilirsiniz.
Örneğin, örnekteki Superposition program aşağıdaki gibi bir ad alanı olmadan da 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;
}
Not
Her Q# programda yalnızca bir namespace olabilir. Ad alanı belirtmezseniz, Q# derleyicisi ad alanı olarak dosya adını kullanır.
Giriş noktaları
Her Q# programının başlangıç noktası olan bir giriş noktası mutlaka bulunmalıdır. Varsayılan olarak, Q# derleyici, mevcutsa programda herhangi bir yerde bulunabilen işlem Main() konumundan programı 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() .
Örneğin, Superposition programında MeasureOneQubit() işlemi, işlem tanımından önce yer alan @EntryPoint() özniteliğine sahip olduğundan, programın giriş noktasıdır.
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
Ancak, @EntryPoint() işlemi MeasureOneQubit()olarak yeniden adlandırılarak program Main() özniteliği olmadan 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
Türler, bir programın çalışabileceği verileri tanımladığından herhangi bir programlama dilinde gereklidir.
Q#, Int, Double, Boolve Stringgibi çoğu dil için ortak olan yerleşik türleri ile aralıkları, dizileri ve tuple'ları tanımlayan türleri sağlar.
Q# ayrıca kuantum bilişimine özgü türler de sağlar. Örneğin, Result türü kubit ölçümünün sonucunu temsil eder ve iki değere sahip olabilir: Zero veya One.
Programda Superposition işlemi, MeasureOneQubit() içinde, Result işleminin dönüş türüne karşılık gelen bir M tür 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);
...
}
Kuantuma özgü bir türün başka bir örneği, kuantum bitini temsil eden Qubit türüdür.
Q# kendi özel türlerinizi tanımlamanıza da olanak tanır. Daha fazla bilgi için bkz. Tür bildirimleri.
Qubitleri ayırma
Q#içinde, use anahtar sözcüğünü ve Qubit türünü kullanarak kubitleri ayırırsınız. Kubitler her zaman $\ket{0}$ durumunda tahsis edilir.
Örneğin, Superposition program tek bir kubit tanımlar ve değişkeninde qdepolar:
// 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.
Kuantum işlemleri
Kubiti ayırdıktan sonra işlemlere ve fonksiyonlara geçirebilirsiniz. İşlemler, bir Q# programının temel yapı taşlarıdır. Q# işlemi, kuantum işlemleri içeren ve kubit yazmacının durumunu değiştiren bir kuantum alt rutin veya çağrılabilir bir rutindir.
Bir Q# işlemi tanımlamak için işlem için bir ad, girişleri ve çıkışı belirtirsiniz. Programda Superposition işlemi MeasureOneQubit() parametre almaz ve bir Result türünü döndürür.
operation MeasureOneQubit() : Result {
...
}
Burada parametre almama ve dönüş değeri beklememe gibi temel bir örnek verilmiştir. Diğer dillerde Unit ile eşdeğer olan NULL değeridir.
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
Standart Q# kütüphane, H programındaki Hadamard operatörü, Superposition gibi kuantum programlarında kullanabileceğiniz operatörler sağlar. Z-basisinde bir kubit verildiğinde, H kubiti %50 olasılıkla Zero veya One olarak ölçülme ihtimaliyle süperpozisyona yerleştirir.
Kubitleri ölçme
Birçok kuantum ölçümü türü olsa da, Q# tekil kubitler üzerinde, Pauli ölçümleri olarak da bilinen yansıtmalı ölçümlere odaklanır.
içinde Q#, Measure işlemi belirtilen Pauli temelinde bir veya daha fazla kubiti ölçer; bu, PauliX, PauliY veya PauliZ olabilir.
Measure, Result veya Zero türünde bir One döndürür.
Hesaplama temelinde $\lbrace\ket{0},\ket{1}\rbrace$ bir ölçüm gerçekleştirmek için, kubiti Pauli Z tabanında ölçen M operasyonunu da kullanabilirsiniz. Bu, M'yi Measure([PauliZ], [qubit]) ile eşdeğer hale getirir.
Örneğin, Superposition program şu M işlemi kullanır:
// Measure the qubit in the Z-basis.
let result = M(q);
Kubitleri sıfırlama
Reset durumuna sıfırlayabilirsiniz. Kubitin sıfırlanmaması çalışma zamanı hatasına neden olur.
// Reset a qubit.
Reset(q);
Standart kitaplık 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ı, Std.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:
Std.Intrinsic.Message("Hello quantum world!");
// imports all functions and operations from the Std.Intrinsic namespace.
import Std.Intrinsic.*;
Message("Hello quantum world!");
// imports just the `Message` function from the Std.Intrinsic namespace.
import Std.Intrinsic.Message;
Message("Hello quantum world!");
Not
Programın Superposition tam ad alanlarına sahip herhangi bir import deyimi veya çağrısı yoktur. Bunun nedeni, geliştirme ortamının yaygın olarak kullanılan işlevler ve işlemleri içeren iki ad alanını, Q# ile Std.Core ve Std.Intrinsic, otomatik olarak yüklemesidir.
Std.Measurement ad alanından yararlanarak MResetZ programını optimize etmek için Superposition işlemini kullanabilirsiniz.
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 Std.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);
}
Q# ve Azure Quantum ile kuantum programları geliştirmeyi öğrenin
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.
Ş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. Visual Studio Code ile yerel bir geliştirme ortamı olan Microsoft Quantum web sitesindeki çevrimiçi kod düzenleyicisini kullanabilir veya Jupyter Notebooks'ta Python koduyla kodu birleştirebilirsiniz Q# . Daha fazla bilgi için Q# kısmına bakın.
Kuantum programınızı yazma
Q# içinde kuantum programları yazabilirsiniz QDK kullanarak. 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, Python konak programıyla Q# proje kullanarak Q# işlemleri çağırabilir veya Python'u Jupyter Notebooks'ta Q# ile entegre edebilirsiniz. Daha fazla bilgi için bkz. Q# ve Pythonentegrasyonu.
%%qsharp komutu
Varsayılan olarak, Q# Jupyter Notebooks'taki programlar Python paketini kullanır ipykernel . Not defteri hücresine kod eklemek için, Q# komutunu, %%qsharp Python paketiyle etkinleştirdikten sonra, qsharp kodunuzu kullanın.
kullanırken %%qsharpaşağıdakileri göz önünde bulundurun:
- Öncelikle
from qdk import qsharpkomutunu çalıştırarak%%qsharp'yi etkinleştirmeniz gerekir. -
%%qsharpgöründüğü not defteri hücresine kapsamlanır ve hücre türünü Python'dan Q# olarak değiştirir. - Python deyimini önüne veya arkasına
%%qsharpkoyamazsınız. -
Q# kodu takip eden
%%qsharpQ# söz dizimine uymalıdır. Örneğin, açıklamaları belirtmek ve//kod satırlarını sonlandırmak için yerine#kullanın;.
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.
Microsoft 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 İlk kaynak tahmininizi çalıştırın'a bakın.
Not
Microsoft Quantum kaynak tahmin aracı ü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
Programınızı simülasyonda test ettikten sonra gerçek kuantum donanımında çalıştırabilirsiniz. Azure Quantum'da bir kuantum programı çalıştırdığınızda, bir görevioluşturur ve çalıştırırsınız. Azure Quantum sağlayıcıları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 Azure Quantum çalışma alanı oluşturma kısmına bakın.
Azure Quantum, 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ı.
İşinizi gönderdikten sonra Azure Quantum iş zamanlaması, yürütme ve izleme dahil olmak üzere iş yaşam döngüsünü yönetir. Azure Quantum portalında işinizin durumunu izleyebilir ve sonuçları görüntüleyebilirsiniz.
İlgili içerik
- Programları çalıştırmanın Q# farklı yolları
- Microsoft Quantum Geliştirme Seti'ni ayarlama
- Hızlı Başlangıç: İlk Q# programınızı oluşturma
👉 Microsoft Quantum platformu hakkında daha fazla bilgi edinin