<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\subtitle{Artificial Intelligence}
\date{Monday, 21 May 2018}

\tikzset{
	treenode/.style = {align=center, inner sep=0pt, text centered,
		font=\sffamily},
	arn_n/.style = {treenode, circle, white, font=\sffamily\bfseries, draw=black,
		fill=black, text width=1.5em},% arbre rouge noir, noeud noir
	arn_r/.style = {treenode, circle, red, draw=red, 
		text width=1.5em, very thick},% arbre rouge noir, noeud rouge
	arn_x/.style = {treenode, rectangle, draw=black,
		minimum width=0.5em, minimum height=0.5em},% arbre rouge noir, nil	
	box/.style = {draw, align=center, text centered, rectangle, draw=black, minimum height=1.25cm, minimum width=2cm}
}

\DeclareMathOperator*{\argmax}{arg\,max}


\begin{document}
	
	\begin{frame}
	\titlepage
	\end{frame}

	\begin{frame}{Artificial Intelligence}
		\begin{itemize}
			\item Production Rule Agents
			\item Monte-Carlo Tree Search
			\item Genetic Algorithms
			\item Neural Networks
		\end{itemize}
	\end{frame}

\begin{frame}[fragile]{Production Rule Agents}
\begin{minted}[breaklines,tabsize=2,fontsize=\footnotesize]{Java}
@FunctionalInterface
public interface Rule
{

default boolean canFire(int playerID, GameState state)
{
return execute(playerID, state) != null;
}		
Action execute(int playerID, GameState state);	
}
\end{minted}
\end{frame}
\begin{frame}{Production Rule Agents}
	\begin{tikzpicture}[]
		\node[state,initial] (0) {\tiny Pop next rule};
		\node[state] (1) [above right=of 0] {\tiny Check if fires};
		\node[state,accepting] (1y) [above =of 1]{\tiny Return action};
		\node[state] (2) [below right=of 1] {\tiny Rule Remaining};
		\node[state, accepting] (3) [right= of 2] {\tiny Return null};
		\path[-&gt;]
		(0) edge [bend left] node [ above] {} (1)
		(1) edge node [left] {\tiny Yes} (1y)
		(1) edge [bend left] node [ below] {\tiny No} (2)
		(2) edge [bend left] node [ below] {\tiny Yes} (0)
		(2) edge [bend left] node [ below] {\tiny No} (3);
	\end{tikzpicture}	
\end{frame}
\begin{frame}{Production Rule Agents}
	\begin{center}
		\includegraphics[scale=0.175]{hanabiBuilder}
	\end{center}

	\begin{block}{Exercise}
		\href{http://hanabi.fosslab.uk/builder.html}{Try it out!} 
		
		\note{
			Do live demo - 
			First Agent
			\begin{enumerate}
				\item Play If Certain
				\item Tell Randomly
				\item Discard Randomly
			\end{enumerate}
		Second Agent
		\begin{enumerate}
			\item Play Probably Safe Card: 0.8
			\item Tell Randomly
			\item Discard Randomly
		\end{enumerate}
	
		Place Discard at top of order and run. Order of rules important
	}
	\end{block}
\end{frame}


\begin{frame}[fragile]{Monte-Carlo Tree Search}
	\begin{center}
	\begin{tikzpicture}[-&gt;,&gt;=stealth',level/.style={sibling distance = 5cm/#1,
		level distance = 1.5cm},scale=1,every node/.style={transform shape}] 
	\node [arn_n] {0}
	child{ 
		node [arn_r] (c1) {0}
		child{ node [arn_n] (c) {0} edge from parent node[above left] {Tell 1}}
		child{ node [arn_n] (d) {1} edge from parent node[above right] {Play 1}}     
		edge from parent node[above left] {Tell 1}                     
	}
	child{ node [arn_r] {0}
		child{ node [arn_n] (a) {0} edge from parent node[above left] {Tell 1}}
		child{ node [arn_n] (b) {1} edge from parent node [above right] {Play 1}
		}
		edge from parent node [above right]{Discard 1}
	}
	;
	\path (a) -- (b) node [midway] {$\cdots$};
	\path (c) -- (d) node [midway] {$\cdots$};
	\end{tikzpicture}
	\end{center}
\end{frame}

\begin{frame}{Monte-Carlo Tree Search}
	\begin{itemize}
		\item Selection
		\begin{itemize}
			\item $\argmax_i f(i) = \frac{w_i}{n_i} + c\sqrt{\frac{\ln N_i}{n_i}} $
		\end{itemize}
		\item Expansion
		\item Simulation
		\item Back-propagation
	\end{itemize}
\end{frame}

\begin{frame}{Genetic Algorithms}

	\begin{tikzpicture}
		\node[box](init) at (-1, 0){Initial \\ Population};
		\node[box](decode) at (2, 0){Decode \\ Population};
		\node[box](fitness) at (5, 0){Calculate \\ Fitness};
		\node[box](selection) at (8, 0){Selection};
		\node[box](cross) at (8, -2.5){Crossover};
		\node[box](mutate) at (8, -5){Mutation};
		\node[box](newPop) at (2, -5){New Population};
		
		\path[-&gt;]
		(init) edge [] node [] {} (decode)
		(decode) edge [] node [] {} (fitness)
		(fitness) edge [] node [] {} (selection)
		(selection) edge [] node [] {} (cross)
		(cross) edge [] node [] {} (mutate)
		(mutate) edge [] node [] {} (newPop)
		(newPop) edge [] node [] {} (decode)
		;
	\end{tikzpicture}
\end{frame}

\end{document}
</pre></body></html>