Ana Sayfa Kuantum Bilişim Kuantum Fiziği ve Programlama Üzerine: Qutip ve Julia

Kuantum Fiziği ve Programlama Üzerine: Qutip ve Julia

830
180

Söz konusu bilgisayar kullanarak kuantum fiziği problemlerinin çözümleri ve simülasyonları olduğu zaman tek bir dilin (veya yazılımın) diğer tüm dillere (veya yazılımlara) üstün olduğunu söyleyemeyiz. Programlar ve yazılımlar hakkında detaylara girmeden önce sizlerle hesaplamalı fizik (ing: computational physics) ve kuantum teknolojilerinin geliştirilmesinde önemli bir yere sahip olan bazı kuantum fiziği problemleri hakkında konuşmak istiyorum.

Üniversite eğitiminiz süresince gördüğünüz hemen hemen tüm fizik formülleri ideal durumlar üzerine geliştirilmiştir. Günümüzde her ne kadar ideal durumlara yaklaşmak için güçlü yöntemlerimiz olsa da, gerçek bir fiziksel sistem ise genelde ideal durumdan oldukça uzaktır. Evrenin işleyişi ile ilgili bilimsel gerçeklere ulaşmak için tasarlanan deney düzeneklerinin maliyetleri milyarlarca doları bulabiliyor. Deneysel düzeneğin de ötesinde araştırmacılar tarafından harcanan zamana ve emeğe paha biçmek mümkün değil. Bu nedenle fizik deneyleri ile teorik modeller arasında güçlü bağlantılar kurulması gerekiyor bu da bizi hesaplamalı fiziğe getiriyor. Hesaplamalı fiziği teorik fiziğin bir altdalı olduğunu kabul eden fizikçiler olsa da ben kendi adıma hesaplamalı fiziğin, teorik ve deneysel fizik arasında bir köprü görevi gören başlı başına bir fizik dalı düşünüyorum.

Aşağıda gördüğünüz figürleri Landau, Páez, ve Bordeianu’un Computational Physics kitabından aldım. Soldaki figürde CP yani hesaplamalı fiziğin disiplinler arası yapısı gösteriliyor. (bir tutam bilgisayar bilimi, 2 su bardağı matematiksel metot ve 1 tepeleme yemek kaşığı fizik). Sağ tarafta ise bilimsel bir gerçeğe ulaşmak için teorik model, deneysel data ve simülasyon arasındaki uyumun önemi gösterilmiş.

Computational Physics, 3rd edition. Rubin H. Landau, Manuel J. Páez, Cristian C. Bordeianu.

Yazıyı daha fazla uzatmadan ufak ufak asıl konumuza gelelim: Yeni başlayanlar için kuantum fiziği simülasyonları. Öncelikle fizikle az da olsa içli dışlı olmuş herkesin mutlaka bildiği bir tane kuantum mekaniksel problem tanımlayalım: “kuantum harmonik salınıcı (KHS) (quantum harmonic oscillator)”.

KHS’yi duvarları parabol gibi olan bir kutu içinde parçacık problemi gibi de düşünebilirsiniz. Klasik harmonik salınıcında da olduğu gibi potansiyelimiz yine V=1/kx². Bu durumda Hamiltonyeni (H=E_k + V) ve Schrödinger denklemini de şu şekilde yazabiliriz.

Burda detaylarına girmeyecek olsam da Schrödinger denklemi bir özdeğer (eigenvalue) problemidir ve analitik olarak çözülürse kuantum harmonik salınıcı için genel çözümü şu şekilde bulunur.

n=0,1,2… kuantum sayıları, alpha= m*omega/hbar, H_n ise n. derecedecen hermit polinomları ve E_n ise izin verilen enerji düzeyleridir. Parametreleri yerlerine koyarak bu sonucu çizdirdiğimizde aşağıda gördüğümüz grafiği elde ederiz.

Wikipedia

Kuantum harmonik salınıcı problemi diğer kuantum mekaniği problemlerine göre analitik olarak çözmesi görece kolay bir problem olmasına rağmen bir lisans öğrencisinin baştan sonra çözmesi için uzun saatlerini harcaması gerekebiliyor. Özellikle ileri düzey kuantum mekaniksel problemlerde -çok parçacıklı sistemler, N seviyeli sistemler, kuantum optik gibi- nümerik çözümlere mecbur durumdayız. Analitik çözümlerin aksine bu problemlerin bilgisayarlar aracılığıyla nümerik olarak çözülmesi için biraz kod, işlem gücü yüksek bilgisayarlar ve zaman yeterlidir.

Mesela “Particle in Harmonic Trap” problemine yazının ilerisinde değineceğim Julia programlama dilini kullanarak, aşağıda gördüğünüz kodlarla sonuca ulaşabilirsiniz.

using QuantumOptics
basis = PositionBasis(-2, 2, 200)
x = position(basis)
p = momentum(basis)
H = p^2/4 + 2*DenseOperator(x^2)
energies, states = eigenstates((H+dagger(H))/2, 5)using PyPlot
xpoints = samplepoints(basis)
plot(xpoints, 2*xpoints.^2)
fill_between(xpoints, 0., 2*xpoints.^2, alpha=0.5)
for i=1:length(states)
    plot(xpoints, abs2.(states[i].data).*40 .+ energies[i])
end
xlabel("Position")
ylabel("Energy")
tight_layout()
savefig("particle.svg")
https://qojulia.org/

Bilgisayarlar aracılığıyla bilimsel problem çözme paradigmasını şu şekilde bir yol izliyor.

Problem → Teori/Model → Algoritma → Görselleştirme

Bir problemin nümerik olarak çözümü için bir çok farklı farklı programlama dili hatta yazılım kullanılabilir. Bu dillerden ve yazılımlardan bazıları sahip oldukları avantajlardan ötürü fizikçiler arasında yaygın bir hale gelmiş ve geniş kullanım alanlarına sahip olmuştur ama tüm diller ve yazılımlar tüm fizik dalları için aynı oranda avantajlı değildir. Parçacık fizikçilerinin bir dilden beklentileri ile kuantum optik çalışan fizikçilerin beklentileri farklı olabilir. Hatta aynı alt disiplin içerisinde bile çözülmeye çalışılan probleme göre beklentiler değişebiliyor. Yine de tüm fizikçilerin bazı ortak beklentileri olduğunu söyleyebilirim, bunlar; verimli kaynak tüketimi, zengin kütüphane ve yüksek hızda performanstır.

İşte tam bu noktada sizlere Qutip ve Julia’dan ayrı ayrı bahsetmek istiyorum. QUTIP, Quantum Toolbox in Python cümlesinin kısaltmasıdır. (Türkçe: Python için Kuantum Alet Çantası). QUTIP, open quantum systems olarak bilinen çevresiyle etkileşen açık kuantum sistemlerinin dinamik özelliklerinin simülasyonlarını yapabilmek üzerine tasarlanmış açık kaynaklı bir yazılımdır. İsminden de anlaşıldığı gibi Python üzerinden çalışan bir sistemdir. Python dilinin sahip olduğu devasa kütüphane olanaklarını da düşündüğünüzde; QUTIP ve Python birlikteliği çok güçlü bir sistem oluşturuyor.

QUTIP’in diğer bir avantajı da açık kaynaklı bir sistem olduğu için aylık-yıllık kullanım ücretleri söz konusu değildir, hatta sizler de kodları özgürce düzenleyip, geliştirip sisteme katkı sağlayabilirsiniz.

Daha önce Python kullanmadınız ve Qutip’i nasıl kurabileceğinizi merak ediyorsanız, endişelenmeyin. Qutip’in resmi internet sitesine ( https://qutip.org/ ) giderek tüm kurulum detaylarına ve çok çeşitli örneklerin detaylı anlatımlarına ulaşabilirsiniz. Qutip teorik, hesaplamalı, deneysel farketmez tüm fizikçiler tarafından çok sık kullanılan bir yazılımdır.

Qutip’i kullanırken genelde Jupyter notebook kullanılsa da Pycharm ve VSCode gibi farklı platformların da mevcut olduğunu unutmayın. Ben şahsen VSCode içerisinde Jupyter notebook kullanıyorum, tavsiye ederim.

Bu yazıyı hazırlarken ki motivasyonum aslında Julia programlama diliydi. Kendisi son yıllarda çok sıkı bir ivmelenme yakaladı. Julia’yı daha önce duymuş olsam da, aktif olarak kullanmaya son 4–5 ay içerisinde başladım(Zeki Seskir sağolsun) ve o kadar etkilendim ki çevremdeki hemen hemen herkesi Julia’ya bir şans vermeleri için ikna ettim.

Julia 2009 senesinde Jeff Bezanson, Stefan Karpinski, Viral B. Shah, ve Alan Edelman tarafından MIT’de geliştirilmeye başlandı ve 14 Şubat 2012 senesinde julia.org üzerinden yayınladıkları bir blog yazısıyla tanıtıldı. (https://julialang.org/blog/2012/02/why-we-created-julia/)

Geliştiriciler, yazdıkları ilk blog yazısında Julia’yı oluşturma fikrinin ardında yatan sebebi şu şekilde açıklamışlar:

We want a language that’s open source, with a liberal license. We want the speed of C with the dynamism of Ruby. We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab. We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell. Something that is dirt simple to learn, yet keeps the most serious hackers happy. We want it interactive and we want it compiled.

Bu sözleri Türkçe ve kısaca özetlemek gerekirse: açık kaynaklı, C dili kadar hızlı ama Ruby kadar dinamik, Matematiksel notasyon açısından Matlab gibi ama Python gibi de geniş yelpazeye sahip bir dil. Bu istek başta Cem Yılmaz’ın da dediği gibi “yerçekimsiz ortamda çiley yiyeyim ama muz gibi olsun” tadında görünse de, geçen 9 yılın ardından açıkça söyleyebiliriz ki “harbiden de yapmışlar. olmuş bu.”

Qutip’e benzer şekilde Julia’yı kurmak çok basit(hatta belki daha da basit)julia.org adresinden Windows/Linux/Macos için kurulum dosyasını indirebilirsiniz.

Julia’yı kurduktan sonra karşınıza Julia terminali çıkacaktır. Buraya 2+3 yazıp Enter tuşuna basarsanız 5 çıktığını göreceksiniz. Bu julia’ın başarıyla kurulduğu anlamına gelir.

Julia yine Qutip’e benzer bir şekilde genelde Jupyter Notebook üzerinden kullanılıyor. Julia’yı Jupyter Notebook ile kullanmak için yapmanız gereken şey çok basit.

Julia terminalini açıp sadece 2 satır kod yazmanız yeterli.

using PkgPkg.add("IJulia")

Jupyter Notebook’a sahip değilseniz onu kurmak için Anaconda sistemini kurmanız gerekli. Buradaki linkten çok basit bir şekilde kurabilirsiniz. (https://www.anaconda.com/download/)

Julia genel programlama amacıyla tasarlandığı için tüm kütüphanenizi kendiniz oluşturabileceğiniz gibi internette güzel kütüphaneler de bulabilirsiniz. Bunlardan bir tanesi Innsbruck Universite’sinden Helmut Ritsch ve ekibi tarafından geliştirilen Quantum Optics Julia paketidir. https://qojulia.org/

QuantumOptics.jl , Qutip’e benzer şekilde açık kuantum sistemlerinin simülasyonları için tasarlanmış bir sistemdir ve yine sadece 3 satır kod ile yükleyebilirsiniz. Terminali açın ve sadece şu kodları yazın.

using Pkg
Pkg.add("QuantumOptics")
Pkg.add("PyPlot")

Tahmin ediyorum ki paket yüklemenin nasıl çalıştığını anladınız. using Pkg yazdıktan sonra istediğiniz paketi eklemek için Pkg.add(“…..”) yazmanız yeterli. Julia, Jupyter notebook ve QuantumOptics.jl’yı yükledikten sonra artık kuantum simülasyonları yapmaya hazırız.

1-Anaconda Navigator uygulamasını açtığınızda karşınıza farklı farklı uygulamalar çıkacak, burdan jupyter notebook’u seçiyoruz.

2-Jupyter Notebook web tarayıcısında çalışacaktır, ilk defa görüyorsanız şaşırabilirsiniz ama endişe etmeyin. Burda bilgisayarınızdaki klasörlerinizi göreceksiniz. ilk olarak kalabalık oluşturmamak adına istediğiniz yerde bir Julia klasörü oluşturmanızı tavsiye ederim. Ben belgeler klasörümün içinde Julia diye bir klasör oluşturdum.

3-Sağ üst taraftaki New butonuna basıp oradan Julia’yı seçiyoruz. Gördüğünüz gibi Python yani Qutip’le çalışmak için de yapmanız gerekenler buraya kadar aynı.

4-Evet sonunda kod yazıp istediğimiz simülasyonu yapmaya hazırız. Ekranda gördüğünüz kutucuğa istediğiniz kodu yazıp run tuşuna bastığınız zaman o satırdaki kod çalışıp aşağıda yeni ve boş bir satır oluşturacaktır. QuantumOptics.jl ile çalışmak için öncelikle “ using QuantumOptics “ yazmanız gerekiyor.

Aşağıdaki linkten QuantumOptics.jl’nın nasıl kullanıldığını adım adım anlatan kullanım rehberini bulabilirsiniz.

https://docs.qojulia.org/tutorial/

Bu rehber İngilizce olmasına rağmen sadece kodlara bakarak bile neyin ne olduğunu anlayabilirsiniz. Mesela “Gaussian wave packet running into a potential barrier” örneğine bakarsak:

Örnekte verilen kodu çalıştırdığımız zaman şöyle bi sonuç elde ederiz. Sizler de örneklere bakarak, değiştirerek ve kendi eklemelerinizi yaparak kısa bir sürede kendinizi geliştirebilirsiniz.

Link: https://docs.qojulia.org/examples/particle-into-barrier/#Gaussian-wave-packet-running-into-a-potential-barrier

Umarım bu yazıyı okuyan bir kaç genç fizikçi adayını programlama üzerine daha çok çalışmaya ikna edebilmişimdir.

Referanslar

  • qutip.org
  • julia.org
  • Computational Physics, 3rd edition. Rubin H. Landau, Manuel J. Páez, Cristian C. Bordeianu.

Yusuf Karli
Institute of Experimental Physics
Universität Innsbruck

QTurkey’in etkinliklerinden ve kuantum teknolojileri alanındaki gelişmelerden haberdar olmak için aramıza katılabilirsiniz: Üye Olmak İçin Tıklayınız

Bu içeriği paylaş
Önceki İçerikKuantum Teknolojilerinde Neler Oluyor? (Temmuz 2021)
Sonraki İçerikIBM ve Tokyo Üniversitesi, Japonya’nın En Güçlü Kuantum Bilgisayarını Tanıttı
Avatar
QTurkey, Türkiye’deki kuantum teknolojileriyle ilgili faaliyetler için bir iletişim ve işbirliği ağıdır. “Kuantum Programlamaya Giriş” çalıştayları düzenliyor, ilgili konulardaki ilgili öğrenciler için çalışma grupları ve toplantılar organize ediyoruz ve ülke düzeyinde kuantum meraklıları için bir buluşma alanı oluşturabilme amacıyla hareket ediyoruz.

Yoruma kapalı.