Wydaje mi się, że ta odpowiedź opiera się głównie na niezrozumieniu, co to znaczy „symulować” coś.
Mówiąc ogólnie, „symulacja” złożonego systemu oznacza odtworzenie niektórych funkcji takiego systemu za pomocą platformy, którą łatwiej kontrolować (często, ale nie zawsze, klasyczny komputer).
Dlatego pytanie, czy „można symulować komputer kwantowy w komputerze klasycznym” jest nieco niejednoznaczne. Jeśli masz na myśli, że chcesz odtworzyć każdy możliwy aspekt „komputera kwantowego”, to nigdy tak się nie stanie, tak jak nigdy nie będziesz w stanie zasymulować każdego aspektu dowolnego klasycznego systemu (chyba że użyjesz tego samego identycznego system oczywiście).
Z drugiej strony z pewnością można symulować wiele aspektów złożonego urządzenia, takiego jak „komputer kwantowy”. Na przykład można chcieć symulować ewolucję stanu w obwodzie kwantowym. W rzeczywistości może to być niezwykle łatwe! Na przykład, jeśli masz python na swoim komputerze, po prostu uruchom następujące
import numpy as np
identity_2d = np.diag([1, 1])
pauliX_gate = np.array([[0, 1], [1, 0]])
hadamard_gate = np.array([[1, 1], [1, -1]]) / np.sqrt(2)
cnot_gate = np.kron(identity_2d, pauliX_gate)
H1_gate = np.kron(hadamard_gate, identity_2d)
awesome_entangling_gate = np.dot(cnot_gate, H1_gate)
initial_state = np.array([1, 0, 0, 0])
final_state = np.dot(awesome_entangling_gate, initial_state)
print(final_state)
Gratulacje, właśnie „zasymulowałeś” ewolucję separowalnego stanu dwóch kubitów w stan Bell!
Jeśli jednak spróbujesz zrobić to samo z, powiedzmy, 40 kubitami i nietrywialną bramą, nie będziesz w stanie wyciągnąć tego łatwo. Naiwnym powodem jest to, że nawet po prostu zapisuję stann-qubit (nie rzadki) stan, musisz podać ~2)nliczby zespolone, a to bardzo szybko zaczyna zajmować dużo pamięci. Mówię tutaj „naiwnie”, ponieważ w wielu przypadkach mogą istnieć sztuczki, które pozwalają uniknąć tego problemu( 1 ). Dlatego wiele osób pracuje nad próbą znalezienia sprytnych sztuczek do symulacji obwodów kwantowych (i innych rodzajów układów kwantowych) za pomocą klasycznych komputerów i dlatego nie jest to wcale takie proste( 2 ).
Inne odpowiedzi już dotyczyły różnych aspektów tej twardości, a odpowiedzi na inne pytanie już wspominają o wielu dostępnych platformach do symulacji / emulacji różnych aspektów algorytmów kwantowych, więc nie pójdę tam.
(1)
Ciekawym tego przykładem jest problem symulacji urządzenia do pobierania próbek bozonów (nie jest to algorytm kwantowy w sensie stanu ewoluującego przez szereg bramek, ale mimo to jest przykładem nietrywialnego urządzenia kwantowego). BosonSampling to problem z próbkowaniem , w którym zadanie polega na próbkowaniuz określonego rozkładu prawdopodobieństwa, co zostało wykazane (przy prawdopodobnych założeniach), że nie można skutecznie zrobić z klasycznym urządzeniem. Chociaż nigdy nie wykazano, że jest to podstawowy aspekt tej twardości, niewątpliwie nietrudnym problemem związanym z symulacją urządzenia do pobierania próbek bozonów była konieczność obliczenia wykładniczo dużej liczby prawdopodobieństw, z których należy próbkować. Jednak ostatnio wykazano, że rzeczywiście nie trzeba obliczać całego zestawu prawdopodobieństw, aby pobrać z nich próbki ( 1705.00686 i 1706.01260). W zasadzie nie jest to dalekie od symulacji ewolucji wielu kubitów w obwodzie kwantowym bez konieczności przechowywania całego stanu układu w dowolnym punkcie. Jeśli chodzi o bardziej bezpośrednio obwody kwantowe, przykłady niedawnego przełomu w możliwościach symulacji to 1704.01127
i 1710.05867 (również najnowszy, jeszcze nieopublikowany, to 1802.06952 ).
(2)
W rzeczywistości wykazano (a raczej dostarczono mocnych dowodów na to), że nie można skutecznie symulować większości obwodów kwantowych, patrz 1504.07999 .