diff --git a/performance/plot_scaling_qbits_linear.py b/performance/plot_scaling_qbits_linear.py index f9f06f4..6fa6200 100644 --- a/performance/plot_scaling_qbits_linear.py +++ b/performance/plot_scaling_qbits_linear.py @@ -3,6 +3,9 @@ import matplotlib import numpy as np import json +matplotlib.rc('font', **{'family': 'serif', 'serif': ['Computer Modern']}) +matplotlib.rc('text', usetex=True) + matplotlib.rcParams.update({'errorbar.capsize': 2}) results_naive = np.genfromtxt("qbit_scaling_naive.csv") diff --git a/performance/plot_scaling_qbits_log.py b/performance/plot_scaling_qbits_log.py index 26c1f5e..44b0e42 100644 --- a/performance/plot_scaling_qbits_log.py +++ b/performance/plot_scaling_qbits_log.py @@ -3,6 +3,9 @@ import matplotlib import numpy as np import json +matplotlib.rc('font', **{'family': 'serif', 'serif': ['Computer Modern']}) +matplotlib.rc('text', usetex=True) + matplotlib.rcParams.update({'errorbar.capsize': 2}) results_naive = np.genfromtxt("qbit_scaling_naive.csv") diff --git a/performance/regimes/plot_scaling_circuits_50qbit_linear.py b/performance/regimes/plot_scaling_circuits_50qbit_linear.py index f327f91..e39f18e 100644 --- a/performance/regimes/plot_scaling_circuits_50qbit_linear.py +++ b/performance/regimes/plot_scaling_circuits_50qbit_linear.py @@ -4,6 +4,8 @@ import matplotlib.pyplot as plt import numpy as np import json +matplotlib.rc('font', **{'family': 'serif', 'serif': ['Computer Modern']}) +matplotlib.rc('text', usetex=True) matplotlib.rcParams.update({'errorbar.capsize': 2}) results_graph0 = np.genfromtxt("circuit_scaling_graph1.csv") diff --git a/performance/regimes/plot_scaling_circuits_linear.py b/performance/regimes/plot_scaling_circuits_linear.py index d111440..2ee5e1c 100644 --- a/performance/regimes/plot_scaling_circuits_linear.py +++ b/performance/regimes/plot_scaling_circuits_linear.py @@ -4,6 +4,8 @@ import matplotlib.pyplot as plt import numpy as np import json +matplotlib.rc('font', **{'family': 'serif', 'serif': ['Computer Modern']}) +matplotlib.rc('text', usetex=True) matplotlib.rcParams.update({'errorbar.capsize': 2}) results_graph0 = np.genfromtxt("circuit_scaling_graph0.csv") diff --git a/performance/regimes/plot_scaling_circuits_measurements_linear.py b/performance/regimes/plot_scaling_circuits_measurements_linear.py index fbc62f7..00e024c 100644 --- a/performance/regimes/plot_scaling_circuits_measurements_linear.py +++ b/performance/regimes/plot_scaling_circuits_measurements_linear.py @@ -4,6 +4,8 @@ import matplotlib.pyplot as plt import numpy as np import json +matplotlib.rc('font', **{'family': 'serif', 'serif': ['Computer Modern']}) +matplotlib.rc('text', usetex=True) matplotlib.rcParams.update({'errorbar.capsize': 2}) results_graph0 = np.genfromtxt("circuit_scaling_graph0_measurements.csv") diff --git a/performance/regimes/scaling_circuits_50qbit_linear.png b/performance/regimes/scaling_circuits_50qbit_linear.png index 75c1344..ff99574 100644 Binary files a/performance/regimes/scaling_circuits_50qbit_linear.png and b/performance/regimes/scaling_circuits_50qbit_linear.png differ diff --git a/performance/regimes/scaling_circuits_linear.png b/performance/regimes/scaling_circuits_linear.png index 5c0e34e..3f9a116 100644 Binary files a/performance/regimes/scaling_circuits_linear.png and b/performance/regimes/scaling_circuits_linear.png differ diff --git a/performance/regimes/scaling_circuits_measurements_linear.png b/performance/regimes/scaling_circuits_measurements_linear.png index f71fd27..e30f4e4 100644 Binary files a/performance/regimes/scaling_circuits_measurements_linear.png and b/performance/regimes/scaling_circuits_measurements_linear.png differ diff --git a/performance/scaling_qbits_linear.png b/performance/scaling_qbits_linear.png index 00dcbcf..b0efd94 100644 Binary files a/performance/scaling_qbits_linear.png and b/performance/scaling_qbits_linear.png differ diff --git a/thesis/chapters/introduction.tex b/thesis/chapters/introduction.tex index 84c0b74..299d64b 100644 --- a/thesis/chapters/introduction.tex +++ b/thesis/chapters/introduction.tex @@ -6,26 +6,26 @@ many companies and institutions working on building and using quantum computers \cite{ibmq}\cite{intelqc}\cite{microsoftqc}\cite{dwavesys}\cite{lrzqc}\cite{heise25_18}. One important topic in this research is quantum error correction \cite{nielsen_chuang_2010}\cite{gottesman2009}\cite{gottesman1997}\cite{shor1995} -that will allow the execution of arbitrarily long quantum circuits \cite{nielsen_chuang_2010}. One -important class of quantum error correction strategies are stabilizer codes +that will allow the execution of arbitrarily long quantum circuits \cite{nielsen_chuang_2010}. +A notable class of quantum error correction strategies are stabilizer codes \cite{gottesman2009}\cite{gottesman1997} that can be simulated exponentially faster than general quantum circuits \cite{gottesman_aaronson2008}\cite{CHP}\cite{andersbriegel2005}. +Being able to simulate large stabilizer states is particularly interesting for +exploring quantum error correction strategies as fault tolerant quantum computing +requires several layers of encoding - so called concatenated codes \cite{nielsen_chuang_2010} - +that use many physical qbits organized in several layers to encode one logical qbit. + One particularly efficient way to simulate stabilizer states is the graphical representation \cite{andersbriegel2005} that has been studied extensively in the context of both quantum error correction and quantum information theory \cite{schlingenmann2001}\cite{dahlberg_ea2019}\cite{vandennest_ea2004}\cite{hein_eisert_briegel2008}. This paper describes the development of a quantum computing simulator using both the usual dense state vector representation for a general state -and a graphical representation for stabilizer states. After giving some introduction -to quantum computing some basic properties of stabilizer states and their +and a graphical representation for stabilizer states. After giving an introduction +to quantum computing, some basic properties of stabilizer states and their dynamics are elucidated. Using this the graphical representation is introduced -and some operations on the graphical states are explained. Following is +and notable operations on the graphical states are explained. Following is a chapter describing the implementation of these techniques and some performance analysis. - -Being able to simulate large stabilizer states is particularly interesting for -exploring quantum error correction strategies as fault tolerant quantum computing -requires several layers of encoding - so called concatenated codes \cite{nielsen_chuang_2010} - -that require many physical qbits to encode one logical qbit. diff --git a/thesis/chapters/quantum_computing.tex b/thesis/chapters/quantum_computing.tex index 803cc23..9a4107f 100644 --- a/thesis/chapters/quantum_computing.tex +++ b/thesis/chapters/quantum_computing.tex @@ -214,6 +214,8 @@ As mentioned in \ref{ref:many_qbits} one can approximate an arbitrary $n$-qbit gate $U$ as a product of some single-qbit gates and either $CX$ or $CZ$. Writing (possibly huge) products of matrices is quite unpractical and unreadable. To address this problem quantum circuits have been introduced. +The quantum circuits introduced here follow the conventions from +\cite{nielsen_chuang_2010}. These represent the qbits as a horizontal line and a gate acting on a qbit is a box with a name on the respective line. Quantum circuits are read from left to right. This means that a gate $U_i = Z_i X_i H_i$ has the @@ -244,6 +246,15 @@ Several qbits can be abbreviated by writing a slash on the qbit line: } \] +Measurements are denoted using a special "gate", the classical result +is written as double lines: + +\[ +\Qcircuit @C=1em @R=.7em { +& \gate{H} & \gate{X} & \qw & \meter & \cw \\ +} +\] + \section{Quantum Algorithms} \label{ref:quantum_algorithms} diff --git a/thesis/cover.png b/thesis/cover.png index 00dcbcf..b0efd94 100644 Binary files a/thesis/cover.png and b/thesis/cover.png differ diff --git a/thesis/main.tex b/thesis/main.tex index d7b7cf8..820e2a2 100644 --- a/thesis/main.tex +++ b/thesis/main.tex @@ -1,4 +1,4 @@ -\documentclass[a4paper,12pt,numbers=noenddot]{scrreprt} +\documentclass[a4paper,12pt,numbers=noenddot,egregdoesnotlikesansseriftitles]{scrreprt} \usepackage[utf8]{inputenc} \usepackage{graphicx} \usepackage{amssymb, amsthm} @@ -52,18 +52,18 @@ Supervised by Prof. Dr. Christoph Lehner} {\LARGE University of Regensburg\par} {\Large Institute I - Theoretical Physics\par} - \vspace{1cm} + \vspace{0.7cm} {\Large Bachelor Thesis\par} - \vspace{1cm} + \vspace{0.7cm} {\huge\bfseries An Efficient Quantum Computing Simulator using a Graphical Description for Many-Qbit Systems \par} - \vspace{1cm} + \vspace{0.7cm} {\Large\itshape Daniel Knüttel\par} \includegraphics[width=\textwidth]{cover.png} \vfill {\Large\itshape Supervised by \par - Dr. Christoph Lehner} + Prof. Dr. Christoph Lehner} \vfill {\large 10.04.2020} \end{titlepage} @@ -82,6 +82,9 @@ Supervised by Prof. Dr. Christoph Lehner} \include{chapters/appendix} \end{appendices} +\newpage +\listoffigures + \bibliographystyle{unsrt} \bibliography{main}{}