Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego Piotr Rybak, Magda Saramak Abstrakt: Komputery kwantowe, poza byciem szalenie interesującym konceptem, są szansą na szybsze znajdowanie rozwiązań wielu problemów. Niestety jedyne co udało się zrobić na polu algorytmiki kwantowej, to wymyślenie wielu modyfikacji dwóch od dawna znanych algorytmów - Shora i Grovera. Skomplikowany i mało intuicyjny model teoretyczny nie ułatwia konstruowania nowych algorytmów, dlatego też próbuje się znajdować je innymi metodami. Jedną z nich jest automatyczne odkrywanie algorytmów kwantowych za pomocą programowania genetycznego. Komputer kwantowy Splątanie Komputer, którego zasada działania nie może zostać wyjaśniona bez użycia formalizmu mechaniki kwantowej. Wykorzystuje on zjawiska opisywane przez jej formalizm do obliczeń. Wyniki Nie zawsze można rozłożyć stan układu na iloczyny tensorowe pojedynczych kubitów. Wynika to z braku niezależności kubitów. Przykładowo, stanu układu x nie można rozłożyć na iloczyn tensorowy stanów pojedynczych kubitów: 1 √ 2 Problemy techniczne Ideę komputera kwantowego zaproponował Richard Feynman. Niestety idea sprzed kilkudziesięciu lat nadal nie została wprowadzona w życie. Problemy techniczne na jakie natykamy się próbując konstruować komputer kwantowy wciąż stanowią dużą przeszkodę. Badania jednak trwają, działają już komputery kwantowe złożone z kilku kubitów, oparte na pułapkach jonowych. Planuje się też testy budowy komputera kwantowego w oparciu o kropki kwantowe. Budowane komputery, choć sprawne, mają wciąż niewielkie możliwości. Problemy techniczne przy budowie komputera kwantowego wynikają z jego natury. Operacje jakie są wykonywane w komputerze kwantowym są możliwe tylko w ściśle kontrolowanych warunkach. Fizyczny system kwantowego komputera musi być całkowicie odizolowany od otoczenia. Jak wiemy z mechaniki kwantowej - obserwacja ma wpływ na stan układu i o ile w komputerach, do których jesteśmy przyzwyczajeni, nie ma to specjalnego znaczenia, to dla komputera kwantowego jest to poważnym problemem. Komputer kwantowy to układ obiektów atomowej skali, które mają dwa graniczne, rozróżnialne dla nas stany (uznajemy je za bitowe 0 oraz 1). Do budowy komputera kwantowego nie nadają się obiekty większe - ich złożoność uniemożliwiałaby kontrolowanie układu. Komputer kwantowy „niszczą” zderzające się z układem cząsteczki powietrza, zmiany temperatury, wszystko to, co ma choćby marginalny wpływ na układ. 0 x= = ? ⊗ ? 0 √1 2 Algorytm Deutsch’a Mamy daną jedno wejściową bramkę „czarną skrzynkę”, którą możemy wywołać tylko raz i której postaci nie znamy. Chcemy wiedzieć czy ta bramka dla dowolnych wejść daje ten sam wynik, czy różne wyniki. Klasyczne rozwiązanie problemu wymaga oczywiście dwóch odwołań do „skrzynki”. Algorytm którego szukamy ma potrafić to zrobić w jednym odwołaniu (jest to znany algorytm, pierwszy w którym pokazano przewagę algorytmów kwantowych). Kubity układu znajdującego się w stanie x są splątane - ich stany zależą od siebie nawzajem. Bramki kubitowe Operacje na kubitach są wykonywane za pomocą bramek kubitowych. Bramkę kubitową reprezentuje się za pomocą macierzy unitarnych. Dla pojedynczego kubitu macierz ma rozmiar 2 × 2 a dla układu kubitów 2n × 2n gdzie n to liczba kubitów w układzie. Przykładowymi bramkami działającymi na pojedynczy kubit są: ! 1 1 √ √ 0 1 2 2 N OT = H = 1 ... 1 √ −√ 1 0 2 2 Wynikiem działania bramki X na układ kubitów w stanie S jest iloczyn: S · X . Algorytm kwantowy Algorytm kwantowy można zapisać jako ciąg bramek. Przykłądowy zapis algorytmu Deutsch’a wygląda następująco: < N, 1 >< H, 0 >< H, 1 >< F, 0, 1 >< H, 0 > Algorytm Grover’a Daną mamy „czarną skrzynkę” o której wiemy, że dla jednego wejścia (wielokubitowego) zwraca jedynkę, a dla reszty zero. Możemy traktować ten problem jako problem wyszukiwania w bazie danych z jednym elementem pasującym do kryteriów wyszukiwania. Znany jest kwantowy algorytm rozwiązujący ten problem o dowolnej p liczbie kubitów z dużym prawdopodobieństwem w czasie (n). W procesie ewolucyjnym skupiono się na problemie z dwoma wejściami (czterema elementami w bazie danych), który wymaga tylko jednego odwołania do czarnej skrzynki. Bit a kubit W klasycznym komputerze podstawową jednostką informacji jest bit, mogący przebywać w dwóch stanach: 0 lub 1. Podstawową jednostką informacji komputera kwantowego jest kubit. Może się on znajdować nie tylko w jednym z dwóch podstawowych stanów, oznaczanych tak samo jak w przypadku bitów - 0 i 1, ale również w superpozycji tych stanów. Dowolny bit czy kubit można zapisać w postaci wektora o dwóch współrzędnych. Bit może występować w dwóch stanach: 0 1 b0 = lub b1 = 1 0 natomiast kubit może wystąpić w kontinuum stanów pośrednich pomiędzy stanem b0 a b1, jeśli tylko moduły kwadratów obu współrzędnych wektorowej postaci kubitu sumują się do jedynki. I tak kubit może się znajdować np. w stanie: ! ! 1 3 √ qH = 2 − √12 lub qi = 5 4i 5 lub ... Moduł kwadratu pierwszej współrzędnej wektora odpowiada prawdopodobieństwu uzyskania 0 przy pomiarze wartości dowolnego kubitu, natomiast moduł kwadratu drugiej współrzędnej - prawdopodobieństwu uzyskania 1. Układ kubitów Wektor stanu dla układu wielokubitowego określa się za pomocą iloczynu tensorowego. Operacja ta jest bardzo istotna dla teoretycznego modelu komputera kwantowego. Dla dwóch kubitów v i w wektor stanu układu v ⊗ w wygląda następująco: α·γ α γ α · δ v= w= v⊗w = β δ β · γ β·δ Podobnie określamy stan dla układu dowolnej liczby kubitów. Otrzymujemy więc dla n kubitów zestaw 2n liczb, określających stan rejestru kubitów. http://www.knf.ifd.uni.wroc.pl Algorytmy ewolucyjne Algorytmy ewolucyjne zostały zaproponowane w 1975 roku przez Johna Hollanda. Pomysł czerpie z mechanizmu przyrodniczej ewolucji i przekazywania genów potomstwu. Algorytm ewolucyjny jest iteracyjny. W każdej iteracji z istniejącej populacji rodziców tworzona jest, przy pomocy operatorów reprodukcji, populacja potomków. Z nowej populacji najlepsi osobnicy wybierani są jako następni rodzice. Wśród operatorów reprodukcji wyróżniamy mutację i krzyżowanie. W wyniku mutacji z jednego rodzica powstaje nowy potomek, w wyniku krzyżowania - z dwóch. Idea algorytmów ewolucyjnych opiera się na założeniu, że z dwóch dobrych rodziców możemy uzyskać przy pomocy pewnych operacji lepszego potomka. Tak więc jeśli chcemy wykorzystać algorytm ewolucyjny do odkrywania nowych algorytmów kwantowych, musimy założyć, że z dwóch prawie dobrych programów (działających prawie tak, jak tego oczekujemy) możemy uzyskać program działający lepiej. Programowanie genetyczne Programowaniem genetycznym nazywamy algorytm ewolucyjnym, w którym zamiast wektorów binarnych występują programy, a operatory reprodukcji są do nich przystosowane. Mutacja: Dodanie bramki, usunięcie bramki, zmiana argumentu bramki, odwrócenie kolejności wykorzystania bramek, . . . Krzyżowanie: Cięcie osobników, wymiana operacji na poszczególnych kubitach, . . . Dalsze kroki W całej tematyce istnieje wiele kwestii wymagających badań: • Sprawdzenie skuteczności różnych operatorów. • Ewolucja ogólnego algorytmu (względem liczby kubitów). • Ewolucja większych algorytmów. • Przyspieszenie symulacji. • Testy minimalizacji różnych funkcji. • Poprawa algorytmów utworzonych metodami teoretycznymi. • ... Literatura Automatic Quantum Computer Programming. A Genetic Programming Approach, Lee Spector, Springer (2004) A review of procedures to evolve quantum algorithms Adrian Gepp, Phil Stocks, Genetic Programming And Evolvable Machines (Volume 10, Number 2, 2009) Quantum Computation Lectures John Watrous, University of Calgary, 2006 Quantum Computer Science. An introduction. David Mermin, Cambridge University Press, 2007 http://www.wfa.uni.wroc.pl