\section{Planning}

This section explains the aim of the project, its reach, the existing work it is
based on and an initial planning.

\subsection{Project Stages}

The project will be organized in several stages based on the different
components and needs.

\subsubsection{Game Implementation}

The rules of the game must be implemented, ideally in a way they can be tested
by direct human play. This system will at its bare minimum represent the
Japanese Go rules (area scoring, no superko rule, no suicide moves).

\subsubsection{Engine Implementation}

The key of this project is to create some kind of system able to generate strong
moves based on any given board configuration: this will be such system. It will
implement an existing protocol so it can be used with other compatible tools. It
has to be able to receive game updates and configuration and to output moves for
either player. It should also be modular enough so different algorithms can be
selected and tested against each other as an experimental search for the best of
them.

\subsubsection{Artificial Intelligence Algorithms}

Different algorithms for the engine to use should be implemented and tested. The
results of this development and testing process should be presented as part of
the final version of the project.

\subsection{Logistics}

The project will be developed by Íñigo Gutiérrez Fernández, student of the
Computer Software Engineering Degree at the University of Oviedo, with
supervision from Vicente García Díaz, Associate Professor in the Department of
Computer Science at the University of Oviedo.

The used material consists of a development and testing machine owned by the
student with specifications stated later on the project plan.

\subsection{Work Plan}

The sole developer will be the student, who is currently working as a Junior
Software Engineer on a 35 hour per week schedule and with no university
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}. 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}
		\includegraphics[width=\textwidth]{diagrams/planningWorkPlanGame.png}
		\caption{Initial work plan for implementing the game.
		}\label{fig:planningWorkPlanGame}
	\end{center}
\end{figure}

\begin{figure}[h]
	\begin{center}
		\includegraphics[width=\textwidth]{diagrams/planningWorkPlanEngine.png}
		\caption{Initial work plan for implementing the engine and algorithms.
		}\label{fig:planningWorkPlanEngine}
	\end{center}
\end{figure}

\subsection{Previous Works}

\subsubsection{Existing Engines}

\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}. 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. 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. The logo of the project is shown on
\fref{fig:gnuGoLogo}.

\subsubsection{Existing Standards}

\paragraph{GTP \cite{gtp}}

GTP (\textit{Go Text Protocol}) is a text based protocol for
communication with computer Go programs. It is the protocol used by GNU Go and
the more modern and powerful KataGo. By supporting GTP the engine developed for
this project can be used with existing GUIs and other programs, making it easier
to use it with the tools users are already familiar with.

\paragraph{SGF \cite{sgf}}

SGF (\textit{Smart Go Format} or, in a more general context, \textit{Smart Game
Format}) is a text format widely used for storing records of Go matches which
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. 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. 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. The logo of the project is shown on \fref{fig:kerasLogo}.

\subsection{Technological Infrastructure}

\subsubsection{Programming Language}\label{sec:programmingLanguage}

The resulting product of this project will be one or more pieces of software
able to be run locally on a personal computer. The programming language of
choice is Python \cite{python}, for various reasons:

\begin{itemize}

	\item It has established a reputation on scientific fields and more
		specifically on AI research and development.
	\item Interpreters are available for many platforms, which allows the most
		people possible to access the product.
	\item Although not very deeply, it has been used by the developer student
		during its degree including in AI and game theory contexts.

\end{itemize}

\subsubsection{Interface}

Both the game and the engine will offer a text interface. For the game this
allows for quick human testing. For the engine it is mandated by the protocol,
since GTP is a text based protocol for programs using text interfaces.
Independent programs compatible with this interface can be used as a GUI.

There is also the need of an interface with SGF files so existing games can be
processed by the trainer.

Both the engine and the trainer will need to interface with the files storing
the neural network models.

The systems' interfaces are shown in \fref{fig:interfaces}.

\begin{figure}[h]
	\begin{center}
		\includegraphics[width=\textwidth]{diagrams/interfaces.png}
		\caption{Interfaces of the three components of the project.}
		\label{fig:interfaces}
	\end{center}
\end{figure}
