From e74f404f9cb5f0d5752178ab8baf4055c0a10f84 Mon Sep 17 00:00:00 2001 From: InigoGutierrez Date: Wed, 26 Oct 2022 20:43:34 +0200 Subject: Adding examples of protocols. --- .gitignore | 2 + doc/tex/biber.bib | 146 ++++++++++++++++++++++++--------------------- doc/tex/imago.tex | 8 +-- doc/tex/implementation.tex | 2 +- doc/tex/planning.tex | 78 +++++++++++++++++++++--- doc/tex/results.tex | 4 +- doc/tex/systemDesign.tex | 4 +- 7 files changed, 157 insertions(+), 87 deletions(-) diff --git a/.gitignore b/.gitignore index 0a4eeda..1fd18b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ *.sgf # images +img/ *.png *.jpg +*.svg *.xcf # doc diff --git a/doc/tex/biber.bib b/doc/tex/biber.bib index d0a714e..324c0ad 100644 --- a/doc/tex/biber.bib +++ b/doc/tex/biber.bib @@ -7,27 +7,35 @@ } @online{gtp, - author = {Gunnar Farnebäck}, - title = {GTP --- Go Text Protocol}, - date = {2002}, - urldate = {2021}, - url = {https://www.lysator.liu.se/~gunnar/gtp} + author = {Gunnar Farnebäck}, + title = {GTP --- Go Text Protocol}, + date = {2002}, + urldate = {2021}, + url = {https://www.lysator.liu.se/~gunnar/gtp} } @online{sgf, - author = {Arno Hollosi}, - title = {SGF File Format FF[4]}, - date = {2021}, - urldate = {2022}, - url = {https://www.red-bean.com/sgf} + author = {Arno Hollosi}, + title = {SGF File Format FF[4]}, + date = {2021}, + urldate = {2022}, + url = {https://www.red-bean.com/sgf} +} + +@online{alphaGo, + author = {DeepMind}, + title = {AlphaGo}, + date = {2022}, + urldate = {2022}, + url = {https://www.deepmind.com/research/highlighted-research/alphago} } @online{katago, - author = {David J Wu ("lightvector")}, - title = {KataGo}, - date = {2021}, - urldate = {2021}, - url = {https://github.com/lightvector/KataGo} + author = {David J Wu ("lightvector")}, + title = {KataGo}, + date = {2021}, + urldate = {2021}, + url = {https://github.com/lightvector/KataGo} } @online{gnugo, @@ -39,17 +47,17 @@ } @online{sabaki, - author = {Yichuan Shen}, - title = {Sabaki --- An elegant Go board and SGF editor for a more civilized age.}, - date = {2019}, - urldate = {2021}, - url = {https://sabaki.yichuanshen.de} + author = {Yichuan Shen}, + title = {Sabaki --- An elegant Go board and SGF editor for a more civilized age.}, + date = {2019}, + urldate = {2021}, + url = {https://sabaki.yichuanshen.de} } @online{keras, - title = {Keras: the Python deep learning API}, - urldate = {2022}, - url = {https://keras.io} + title = {Keras: the Python deep learning API}, + urldate = {2022}, + url = {https://keras.io} } @online{sl_go, @@ -68,89 +76,89 @@ } @online{python_unittest, - title = {unittest --- Unit testing framework}, - urldate = {2021}, - url = {https://docs.python.org/3/library/unittest.html} + title = {unittest --- Unit testing framework}, + urldate = {2021}, + url = {https://docs.python.org/3/library/unittest.html} } @online{python_coverage, - title = {Coverage.py}, - urldate = {2021}, - url = {https://coverage.readthedocs.io} + title = {Coverage.py}, + urldate = {2021}, + url = {https://coverage.readthedocs.io} } @online{matplotlib_heatmaps, - title = {Creating annotated heatmaps — Matplotlib 3.5.2 documentation}, - urldate = {2022}, - url = {https://matplotlib.org/stable/gallery/images_contours_and_fields/image_annotated_heatmap.html} + title = {Creating annotated heatmaps — Matplotlib 3.5.2 documentation}, + urldate = {2022}, + url = {https://matplotlib.org/stable/gallery/images_contours_and_fields/image_annotated_heatmap.html} } @online{python, - title = {Welcome to Python.org}, - urldate = {2022}, - url = {https://www.python.org} + title = {Welcome to Python.org}, + urldate = {2022}, + url = {https://www.python.org} } @online{numpy, - title = {NumPy}, - urldate = {2022}, - url = {https://numpy.org} + title = {NumPy}, + urldate = {2022}, + url = {https://numpy.org} } @online{matplotlib, - title = {Matplotlib — Visualization with Python}, - urldate = {2022}, - url = {https://matplotlib.org} + title = {Matplotlib — Visualization with Python}, + urldate = {2022}, + url = {https://matplotlib.org} } @online{ply, - title = {PLY (Python Lex-Yacc)}, - urldate = {2022}, - url = {http://www.dabeaz.com/ply} + title = {PLY (Python Lex-Yacc)}, + urldate = {2022}, + url = {http://www.dabeaz.com/ply} } @online{vim, - title = {welcome home : vim online}, - urldate = {2022}, - url = {https://www.vim.org} + title = {welcome home : vim online}, + urldate = {2022}, + url = {https://www.vim.org} } @online{neovim, - title = {Home - Neovim}, - urldate = {2022}, - url = {http://neovim.io} + title = {Home - Neovim}, + urldate = {2022}, + url = {http://neovim.io} } @online{latex, - title = {LaTeX - A document preparation system}, - urldate = {2022}, - url = {https://www.latex-project.org} + title = {LaTeX - A document preparation system}, + urldate = {2022}, + url = {https://www.latex-project.org} } @online{puml, - title = {Open-source tool that uses simple textual descriptions to draw beautiful UML diagrams.}, - urldate = {2022}, - url = {https://plantuml.com} + title = {Open-source tool that uses simple textual descriptions to draw beautiful UML diagrams.}, + urldate = {2022}, + url = {https://plantuml.com} } @online{sl_sword, - title = {9x9 Tengen Openings at Sensei's Library}, - urldate = {2022}, - url = {https://senseis.xmp.net/?9x9TengenOpenings} + title = {9x9 Tengen Openings at Sensei's Library}, + urldate = {2022}, + url = {https://senseis.xmp.net/?9x9TengenOpenings} } @online{ogsLifeAndDeath, - author = {sunspark}, - title = {Cho Chikun's Encyclopedia of Life and Death - Elementary: 1 / 900}, - date = {2016}, - urldate = {2022}, - url = {https://online-go.com/puzzle/2824} + author = {sunspark}, + title = {Cho Chikun's Encyclopedia of Life and Death - Elementary: 1 / 900}, + date = {2016}, + urldate = {2022}, + url = {https://online-go.com/puzzle/2824} } @online{fsf_free, - author = {Free Software Foundation}, - title = {What is Free Software? - GNU Project - Free Software Foundation}, - date = {2022}, - urldate = {2022}, - url = {https://www.gnu.org/philosophy/free-sw.html} + author = {Free Software Foundation}, + title = {What is Free Software? - GNU Project - Free Software Foundation}, + date = {2022}, + urldate = {2022}, + url = {https://www.gnu.org/philosophy/free-sw.html} } diff --git a/doc/tex/imago.tex b/doc/tex/imago.tex index d80c19a..fbf0291 100644 --- a/doc/tex/imago.tex +++ b/doc/tex/imago.tex @@ -31,12 +31,12 @@ \newcommand{\program}{Imago} \newcommand{\fref}[1]{Fig.~\ref{#1}} -\newcommand{\flist}[1]{Listing~\ref{#1}} +\newcommand{\lref}[1]{Listing~\ref{#1}} %\newcommand{\uurl}[1]{\underline{\url{#1}}} \newcommand{\acronim}[2] { - \iftoggle{#1} + \iftoggle{#1} {#1} {#1 (#2)\toggletrue{#1}} } @@ -172,8 +172,8 @@ inclusion to use this template is included here. \input{tex/implementation.tex} \clearpage -\input{tex/results.tex} -\clearpage +%\input{tex/results.tex} +%\clearpage \input{tex/conclusions.tex} \clearpage diff --git a/doc/tex/implementation.tex b/doc/tex/implementation.tex index 24a231c..ffb2802 100644 --- a/doc/tex/implementation.tex +++ b/doc/tex/implementation.tex @@ -113,7 +113,7 @@ updates them if they already exist but their source files are newer than them. It has been used to generate this text from \LaTeX{} and PlantUML source files. The contents of the Makefile with which this document has been compiled are -shown in \flist{code:makefile}. +shown in \lref{code:makefile}. \begin{listing}[h] \inputminted{make}{Makefile} diff --git a/doc/tex/planning.tex b/doc/tex/planning.tex index 269645a..1450e8a 100644 --- a/doc/tex/planning.tex +++ b/doc/tex/planning.tex @@ -48,7 +48,9 @@ responsibilities other than this project. Taking this into account, a sensible initial assumption is that he will be able to work 3 hours a day, Monday to Friday. Gantt diagrams for the planned working schedule are shown as \fref{fig:planningWorkPlanGame} and -\fref{fig:planningWorkPlanEngine}. +\fref{fig:planningWorkPlanEngine}. This planning predicts 6 months of +development, from November 2020 to April 2021. With the planned schedule of 3 +hours a day on weekdays this amounts to 375 hours. \begin{figure}[h] \begin{center} @@ -70,30 +72,61 @@ Friday. Gantt diagrams for the planned working schedule are shown as \subsubsection{Existing Engines} -\paragraph{AlphaGo} +\begin{figure}[h] + \begin{center} + \includegraphics[width=0.5\textwidth]{img/Alphago_logo_Reversed.jpg} + \caption{AlphaGo logo. By Google DeepMind - Google DeepMind AlphaGo + Logo, Public Domain, + https://commons.wikimedia.org/w/index.php?curid=47169369 + }\label{fig:alphaGoLogo} + \end{center} +\end{figure} + +\paragraph{AlphaGo \cite{alphaGo}} A Go play and analysis engine developed by DeepMind Technologies, a company owned by Google. It revolutionized the world of Go in 2015 and 2016 when it respectively became the first AI to win against a professional Go player and then won against Lee Sedol, a Korean player of the highest professional rank and one of the strongest players in the world at the time. Its source code is -closed, but a paper written by the team has been -published on Nature \cite{natureAlphaGo2016}. +closed, but a paper written by the team has been published on Nature +\cite{natureAlphaGo2016}. The logo of the project is shown on +\fref{fig:alphaGoLogo}. The unprecedented success of AlphaGo served as inspiration for many AI projects, including this one. +\begin{figure}[h] + \begin{center} + \includegraphics[width=0.5\textwidth]{img/katago.png} + \caption{KataGo logo. + https://katagotraining.org/static/images/katago.png + }\label{fig:kataGoLogo} + \end{center} +\end{figure} + \paragraph{KataGo \cite{katago}} An open source project based on the AlphaGo paper that also achieved superhuman strength of play. The availability of its implementation and documentation -presents a great resource for this project. +presents a great resource for this project. The logo of the project is shown on +\fref{fig:kataGoLogo}. + +\begin{figure}[h] + \begin{center} + \includegraphics[width=0.5\textwidth]{img/gnuGoLogo.jpg} + \caption{GnuGo logo. + https://www.gnu.org/software/gnugo/logo-36.jpg + }\label{fig:gnuGoLogo} + \end{center} +\end{figure} \paragraph{GnuGo \cite{gnugo}} A software capable of playing Go part of the GNU project. Although not a strong engine anymore, it is interesting for historic reasons as the free software -engine for which the GTP protocol was first defined. +engine for which the GTP protocol was first defined. The logo of the project is shown on +\fref{fig:gnuGoLogo}. \subsubsection{Existing Standards} @@ -113,19 +146,46 @@ allows for variants, comments and other metadata. It was devised for Go but it supports other games with similar turn-based structure. Many popular playing tools use it. By supporting SGF vast existing collections of games, such as those played on online Go servers, can be used to train the decision algorithms -based on neural networks. +based on neural networks. An example of a SGF file can be seen on +\lref{lst:sgfExample}. + +\begin{listing}[h] + \inputminted[breakafter=\]]{text}{listings/sgfExample.sgf} + \caption{SGF example. Describes a tsumego (Go problem) setup and two + variants, one commented as "Correct" and other commented as "Incorrect".} + \label{lst:sgfExample} +\end{listing} + +\begin{figure}[h] + \begin{center} + \includegraphics[width=0.5\textwidth]{img/sabaki.jpg} + \caption{Sabaki screenshot. + https://sabaki.yichuanshen.de/img/screenshot.png + }\label{fig:sabaki} + \end{center} +\end{figure} \subsubsection{Sabaki \cite{sabaki}} Sabaki is a Go board software compatible with GTP engines. It can serve as a GUI for the engine developed in this project and as an example of the advantages of -following a standardized protocol. +following a standardized protocol. Part of its graphical interface is shown on +\fref{fig:sabaki}. + +\begin{figure}[h] + \begin{center} + \includegraphics[width=0.5\textwidth]{img/kerasLogo.jpg} + \caption{Keras logo. + https://keras.io/img/logo.png + }\label{fig:kerasLogo} + \end{center} +\end{figure} \subsubsection{Keras \cite{keras}} Keras is a deep learning API for Python allowing for the high-level definition of neural networks. This permits easily testing and comparing different network -layouts. +layouts. The logo of the project is shown on \fref{fig:kerasLogo}. \subsection{Technological Infrastructure} diff --git a/doc/tex/results.tex b/doc/tex/results.tex index 3cd682f..e37c0b2 100644 --- a/doc/tex/results.tex +++ b/doc/tex/results.tex @@ -134,8 +134,8 @@ as with batches of 10 games an epoch of training could be completed in one minute, in three minutes batches of 20 games, and in up to an hour with batches of 100 games. -The outputs from this training process can be seen on \flist{code:denseTraining} -and \flist{code:convTraining} for the dense network and the convolutional +The outputs from this training process can be seen on \lref{code:denseTraining} +and \lref{code:convTraining} for the dense network and the convolutional network respectively. \begin{listing}[h] diff --git a/doc/tex/systemDesign.tex b/doc/tex/systemDesign.tex index 7975276..f54032f 100644 --- a/doc/tex/systemDesign.tex +++ b/doc/tex/systemDesign.tex @@ -224,7 +224,7 @@ been selected so each node can have as input each of the vertices of the board. A flatten layer acts then to make the output one-dimensional, and a final dense layer provides the vector containing the likelihood of each possible move. -The design of this network is shown in \flist{code:denseModel} and +The design of this network is shown in \lref{code:denseModel} and \fref{fig:denseNN} as provided by Keras' summary and plot\_model functions respectively. @@ -249,7 +249,7 @@ of being trained to recognize patterns on the board. A flatten layer acts then to make the output one-dimensional, and a final dense layer provides the vector containing the likelihood of each possible move. -The design of this network is shown in \flist{code:convModel} and +The design of this network is shown in \lref{code:convModel} and \fref{fig:convNN} as provided by Keras' summary and plot\_model functions respectively. -- cgit v1.2.1