1 Ekim 2017 Pazar

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


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. 5. bölüm kuantum programlama da son bölümdü. Umarım sizlere faydalı olur.

Bir kuantum bilgisayarı nasıl programlanır? Aşağıdaki kod QASM satırlarını oluşturur.


measure q[0] -> c[0];
measure q[1] -> c[1];
measure q[2] -> c[2];
measure q[3] -> c[3];
measure q[4] -> c[4];

Şimdi, gridScript olarak saklanan eksiksiz bir QASM dosyasına sahibiz. Çalıştırma zamanı.

# set the APIToken and API url
Q_program.set_api(Qconfig.APItoken, Qconfig.config["url"])
# compile and run the QASM
Q_program.execute(["gridScript"], device, shots, wait=2, timeout=60)

Bize cihaz üzerinde çalıştırmak için oyuncu sorulduğunda bu durumda cihaz ve çekim daha önce tanımlanmıştı. Çalışmalarınızın ilerleme durumunu her bekleme saniye güncelleyeceksiniz ve zaman aşımı saniye bile geçerse vazgeçin.

Burada, sonuçlar için bir dakikadan fazla beklemek istemediğinizi varsayıyorum. Ancak aslında kuantum cihazında oynamak istiyorsanız, bunu uzatmanız gerekebilir. Kuantum bilgisayarlar hızlı olabilir. Ancak muhtemelen sizinkinden önce çalıştırılacak bazı işleri olacaktır.

İşlere başladıktan sonra verileri çıkarabiliriz.

grid[player] = Q_program.get_counts("gridScript")

Burada oyuncuların gemilerinin grid'de [oyuncu] bombalanmasıyla sonuçlarını ızgaraya kopyaladık. 

Sonuç olarak grid [oyuncu] bir sözlük olarak saklanır. Anahtarlar bit dizeleridir ve bu yüzden 110 gibi görünürler. Bu bit dizisindeki en sağdaki bit c [0] ve bu nedenle c [0] = 0'dır. Sonuçları işleyerek, normal bitlerin her biri için her sonucu (0 veya 1) kaç kez çalıştırdığımızı hesaplayabiliriz.

Bir kubit'in 1 olarak ölçüldüğü zamanların fraksiyonunu, gemimizin zarar yüzdesi olarak yorumladık. Gürültünün etkileri nedeniyle (veya bir evrene açıklama isterseniz hava durumu nedeniyle% 100 hasar bekleyemeyiz), bu nedenle geminin battığı anlamına gelen % 95'ten daha fazla hasarı sayıyoruz.

Kuantum işleminden elde edilen bazı çıktıları inceleyelim. Bir oyuncu üçüncü gemisini 2. konuma getirdiğini varsayalım. Diğer oyuncu daha sonra bomba atar. Sonuçlar nasıl bir şey olacaktır. 

{'00000': 734, '00100': 290}

Burada 1024 atıştan 290'u 1 numaralı pozisyonda 2 puan buldu. Bu geminin gerçekten bir miktar zarar gördüğünü gösterdi.

Başka bir örnek: bir oyuncu ilk gemi pozisyon 1'e, ikinci turu 2'de olursa diğer oyuncu daha sonra ilk turda 1 ve ikinci turda 2 numaralı pozisyona bomba atarsa  sonuç ne olur.

{'00110': 532, '00010': 492}

Burada tüm sonuçların sağında ikinci yarıda (konum 1 için olan) 1 bulunur. O gemi tek bir bombayla yok edildi. Yine de 2. pozisyonda olan kişinin gemisinin yarısı hasar gördü. Fakat sonuçların yarısında sonuçların 1 olması gerekir.

Bu örnek sonuçları güzel ve temiz, simülatör üzerinde yapıldığını söyleyebiliriz. Gerçek cihazda, bombalanmamış olan gemiler için ve gemi olmayan kubitler için birkaç sonuç bulmayı umabiliriz.

QASM dosyasını kuantum çipinde (veya simülatörde) yürütürken bir hata oluşursa, çıktı aşağıdakileri içerecektir.

{'status': 'Error'}

Bu durumda biz sonuçları denemek ve işlemek istemiyoruz. Bu yüzden bu olduysa çalışması için bir koşullu açıklama yaptık.

if ( ( 'Error' in grid[0].values() ) or ( 'Error' in grid[1].values() ) ):
   print("\nThe process timed out. Try this round again.\n")

Bu açıklamanın else kısmında sonuçların tüm işlenişinin yanı sıra oyunculara gemilerine ne olduğunu anlatmaya çalışılır.

Bit dizelerinin işlenmesi, kuantum hesaplamaya özgü bir şey değildir. Bu yüzden nasıl yapılacağını söylemeyeceğim. Saldırı kodları ile ilgili yöntemle ilgileniyorsanız, aşağıda yazılı olan github'taki kodda bulacaksınız.

Hasar yüzdeleri hesaplandıktan sonra, oyunculara gösterilir. Örneğin, yalnızca 2. konumdaki gemi vurulduysa ve % 50 hasar görürse bu şekilde gösterilir.


Oyun, bir oyuncu tüm gemilerini kaybedinceye kadar bomba istemekte ve senaryoyu yürütmeye devam etmektedir. Aksi halde bu noktada diğer oyuncu kazanır.

Üçüncü bir oyuncunun bombalamasının yaklaşık % 25 oranında bir hasar gördüğünü düşünün. Bu gemi tahrip yolunun üçte biri olduğundan,% 33'lük bir bekleyiş olabilir. Sebebi trigonometredir. Bu noktada üzerinde fazla durmaya hiç gerek yok.

Tüm senaryonun her seferinde tekrar çalıştırıldığına dikkat etmek önemlidir. Dönüşler arasındaki süre yalnızca yaklaşık olarak olabilir. Ancak bu kubit için neredeyse bir sonsuzluk. 0.02 Kelvin'lik bir sıcaklıkta bile, bilgi bir sonraki dönüş öncesinde çoktan yanmış olacaktır. Ayrıca bilgiyi elde etme gereği sistemdeki tüm güzel kuantumlanmayı da rahatsız edecektir. Bu sebeplerden ötürü, insan etkileşimine ihtiyaç duyan herhangi bir işlemin her yeni girdi için sıfırdan yeniden çalıştırılması gereken kuantum parçalara ihtiyaç duyar.

Bir kuantum bilgisayarda çalışan savaş gemileri. Bir kuantum bilgisayarın ya da Battleship'in en kıymetli versiyonunun en kıymetli kullanımını değil. Ama bu ikisini birleştirmek eğlencenin yarısı değil midir?

Bir kuantum bilgisayarı nasıl programlanır? makalemizin sonuna geldik. Umarım sizlere faydalı olmuştur. Yeni yazacağım makaleleri de takip etmeyi unutmayın. 

Tam kaynak kodu Github sitesinden buradan erişebilirsiniz.

Makalede geçen Battleship oyunun da kaynak kodlarına buradan erişebilirsiniz.

Not: Bu, SDK'nın biraz eski bir sürümünü temel alır.

Ayrıca Microsoft Visual Studio'ya ve Microsoft'un Kuantum ile ilgili çıkaracağı yeni kuantum araçları hakkında bilgi ve uyarı almak istiyorsanız buradan kaydolabilirsiniz.

Bir kuantum bilgisayarı nasıl programlanır? makalesinin örnek kodları Github'ta ve bu makale ile ilgili Battleship oyunu ve kodlarının videoları ise buradan izleyebilirsiniz.

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


Hiç yorum yok:

Yorum Gönder