1 Ekim 2017 Pazar

Bir kuantum bilgisayarı nasıl programlanır? - 4

Bir kuantum bilgisayarı nasıl programlanır? Gibi çoğu soruların cevaplarını bu bilgisayarın çalışma prensibini ve kodlarını sizlere sunmaya devam ediyorum.

Bir kuantum bilgisayarı nasıl programlanır? Oyuncuların seçeneklerini elde etmenin temel olarak nasıl yapılır.

position = getpass.getpass(“Player “ + str(player+1) + “, choose a 
position for ship “ + str(ship+1) + “ (0, 1, 2, 3 or 4)\n” )
shipPos[player][ship] = position

Yukarıda, "Oyuncu oyuncu, gemi için bir konum seç + 1 yazıyor (0, 0, 1, 2, 3 veya 4)" ve bir giriş sormaktadır. Diğer oyuncu görmek için GETPASS kullanarak, giriş ekranında görünmeyecektir. İlk gemi, kodda gemi = 0 olarak adlandırılır, ancak çoğu insan 1'den indekslediğinden, oyuncu ile konuşurken 'gemi 1' olarak anılır.

Bu iki çizgi, gerekli tüm değerleri çıkarmak için oyuncuların ve gemilerin üzerinde birkaç döngüye yerleştirilmiştir. Aslında gerçek kodda birbirlerinin yanında değiller. Aralarında oyuncunun geçerli bir girdi sağladığından emin olmanız gereken bazı şeyler var. Bunu uygulamanın senin yolun benimkinden daha iyi olacağından, bu yüzden ayrıntılarla sizi sıkmayacağım.

Şimdi ana oyun döngüsü zamanı. Burada, her iki oyuncuya rakibin gemisini bomba ile vurmak istediklerini soracağız. Bu daha sonra bomba [oyuncu] [konum] içine eklenir ki bu oyuncu oyun boyunca kaç kez oyuncuyu bombaladığını sayar. 

position = input("Choose a position to bomb (0, 1, 2, 3 or 4)\n")
bomb[player][position] = bomb[player][position] + 1

İşlemi kuantum yongasında yürütmek için yeterli bilgiye sahibiz. Hangi kubitin hangi gemi olacağını ve nerede bomba vuracağını biliyoruz. Şimdi, karşılık gelen QASM dosyasını oluşturmanın zamanı geldi.

Dosyayı doğrudan yazdıysak şimdi başlayacağız.

OPENQASM 2.0;
include "qelib1.inc";
qreg q[5];
creg c[5];

Bu, ihtiyacımız olan kuantum ve normal bitleri beyan eder. Her birini, hepsini kullanmayacağımız halde, beş tanesini ilan ediyoruz. Beş kubit'i kullanmak, 5 qubit'lerin aslında çip üzerinde olduğunu bildiğimizin bir yansımasıdır ve her gemiyi gerçek bir fiziksel kubit ile tanımlamamızı sağlar. Beş normal bitleri kullanarak şu anda IBM'in ucunda bulunan bir hatayı önlemek için yapabileceği bir şeydir.

Doğrudan QASM dosyasını yazmak yerine, Python'ı bizim için yazması için alacağız. Dolayısıyla yukarıdaki önsöz yerine, aynı özellikleri taşıyan bir sözlük tanımlıyoruz.

Q_SPECS = {
        "circuits": [{
            "name": "gridScript",
            "quantum_registers": [{
                "name": "q",
                "size": 5
            }],
            "classical_registers": [{
                "name": "c",
                "size": 5
            }]}],
}

Burada dosya gridScript olarak adlandırıldı. Çünkü bir oyuncunun ızgarasında bombaların etkilerini hesaplayacak.

Spesifikasyonları belirledikten sonra, devre oluşturup onu manipüle etmeye başlayabiliriz.

# create the program with these specs
Q_program = QuantumProgram(specs=Q_SPECS) 
# get the circuit by name
gridScript = Q_program.get_circuit("gridScript")

Burada "gridScript", teknik özelliklerde devre olarak adlandırdığımız şeydir ve gridScript, işlemleri eklediğimizi olduğu gibi ifade eder. Bu iki şey için genel olarak farklı isimler kullanmış olabilirdik. Ama yapmadık.

Kuantum ve klasik bitler üzerinde işlemler eklemek için onlara kodda nasıl başvurduğumuzu tanımlamamız gerekir.

# get the quantum register by name
q = Q_program.get_quantum_registers("q")
# get the classical register by name
c = Q_program.get_classical_registers("c")

Şimdi, belli bir kubit'e belirli bir NOT oranını uygulamak istediğimizi varsayalım.  Bu  aşağıdaki satırı gridScript'e eklemek istiyoruz.

u3( frac * pi,0,0) q[ position ];

Frac ve pozisyon gerçek rakamlarla değiştirilir.  Bunu Python'daki şu satırla yapıyoruz.

gridScript.u3(frac * math.pi, 0.0, 0.0, q[position])

Bunu kullanarak rakip oyuncunun diğer oyuncuya ateşlediği tüm bombaları ekleyebiliriz. Oyuncunun ızgarası için üç mevkide loop yapıyoruz, bir gemi vardı. Daha sonra, burada gönderilen her bomba için gridScript'e bir satır ekliyoruz.

Daha önce bahsetmiştim. Bu oyundaki üç geminin hepsinin farklı gücü olacaktır. Oyuncu tarafından yerleştirilen ilk gemi tek bir bomba tarafından batırılacak, ancak ikincisinin tahrip edilmesi için ikiye, üçünün de üçüne ihtiyacı olacak.

Kubit olarak, bu, ilk gemi isabet eden bir bombanın bir bütün NOT uygulanması anlamına gelir. İkinci gemiye çarpan bir bomba yarısı NOT, bir tanesi de üçüncü gemide bir NOT geçerliliğini korur. Frac fraksiyonu daha sonra hangi gemi vurulduğuna göre belirlenir.  Bunun için sadece frac = 1 / (gemi + 1) kullanıyoruz.

Bombalama bittikten sonra, olanları görmenin zamanı geldi. Bunun için ölçüm komutlarını eklemeliyiz. Kayıttaki her kubit ölçülür ve sonuçlar ilgili normal bite kopyalanır.

for qubit in range(5):
            gridScript.measure(q[qubit], c[qubit])

Bir sonraki makale Kuantum Bilgisayar Programlama ile ilgili son makale olacak. Son makalede de bazı örnek kodları paylaşacağım. Ayrıca son makalede konu ile ilgili github üzerinde bulunan proje kodlarını size sunacağım.

Daha önceki Bir kuantum bilgisayarı nasıl programlanır? - 3. bölümü için tıklayın.

Hiç yorum yok:

Yorum Gönder