\chapter{Testes e Resultados}

\epigraph{\emph{``É durante as tempestades que o verdadeiro marinheiro aprende a velejar.''}}
         {Ricardo Jordão Magalhães}

\looseness-1Com a finalidade de validar o SALbot como um robô habilitado para aprendizagem, foram feitos testes com um algoritmo de aprendizagem básico. Estes testes foram realizados num ambiente restrito, onde o robô aprende a escolher o melhor movimento para os vários estados que vai visitando.

Neste capítulo é feita uma abordagem ao ambiente de testes usado e são expostos e analisados os resultados dos testes provenientes da aprendizagem dos SALbot.

\section{Ambiente de testes}

Para testar a aprendizagem dos SALbot, foi construído um ambiente de testes (figura \ref{fig:Test_environment}) onde decorreram os ensaios, dos quais, se extraíram os dados relativos à aprendizagem, examinados na secção de resultados (\ref{seq:Results}). Uma vez que o objectivo principal da aprendizagem consiste no SALbot percorrer um ambiente sem colidir, optou-se por ambiente com a forma de um corredor: com 2 m de comprimento por 0.65 m de largura e com uma altura de 150 mm.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.6\linewidth]{Ambiente_de_testes}\\
  \caption{Ambiente de testes dos SALbot.}\label{fig:Test_environment}
\end{figure}


É possível variar a dimensão do ambiente de testes, colocando uma tábua, transversalmente, ao longo do corredor. Ao variarmos a dimensão do ambiente, permitimos ao SALbot aprender novos estados, pois se o ambiente for sempre muito grande o robô nunca irá aprender a movimentar-se em espaços pequenos e vice-versa. Além de que, se o ambiente for muito grande, o SALbot necessita de mais iterações para aprender todos os estados possíveis, comparativamente a ambientes mais pequenos.

\section{Resultados}
\label{seq:Results}

Uma vez que, o algoritmo de aprendizagem do SALbot tem um parâmetro $\varepsilon = 0.5$ (ver secção \ref{seq:Learning_algorithm}), mesmo que já numa fase avançada de aprendizagem, a probabilidade de o SALbot escolher uma acção aleatória, para um estado que já aprendeu, é de 50\%. Se, por um lado, isso garante que continua a experimentar outras acções para estados já conhecidos, por outro, dificulta a percepção da evolução da aprendizagem do robô.

\begin{figure}[ht]
    \centering
    \subfloat[]{
        \includegraphics[width=0.45\textwidth]{1-4_test}
        \label{fig:1-4_test}}
\hfill
    \subfloat[]{
        \includegraphics[width=0.45\textwidth]{1-2_test}
        \label{fig:1-2_test}}
    \subfloat[]{
        \includegraphics[width=0.45\textwidth]{1-1_test}
        \label{fig:1-1_test}}
    \caption{(a) \nicefrac{1}{4} do ambiente de testes; (b) \nicefrac{1}{2} do ambiente de testes; (c) Ambiente de testes completo.}
    \label{figs:Ambi_testes}
\end{figure}

Assim, optou-se por avaliar a aprendizagem dos SALbot de formas diferentes:
\begin{description}
  \item[i)] Após 500, 1000, 2000 e 5000 iterações (cada iteração corresponde ao SALbot procurar na tabela qual a melhor acção a executar) foram descarregadas as tabelas de aprendizagem para comparação entre os diversos testes realizados;
  \item[ii)] Escolheram-se alguns estados das diferentes tabelas de aprendizagem de um teste onde se compara o comportamento do SALbot com o que seria de esperar da sua aprendizagem para esses estados;
  \item[iii)] Ao longo da aprendizagem, é actualizado um gráfico na interface gráfica no computador remoto, que mostra o número de colisões ao longo das iterações em que o SALbot foi procurar à tabela de aprendizagem a melhor acção aprendida para o estado em que se encontra.
\end{description}


Os sensores de distância por infra-vermelhos laterais foram orientados a $\approx40^{\circ}$ do plano lateral do robô. Uma vez que a maioria das acções são orientadas para a frente, esta configuração permite a detecção de objectos laterais e frontais.

Assim, realizaram-se três testes de aprendizagem distintos: para um ambiente pequeno, em \nicefrac{1}{4} do ambiente total (figura \ref{fig:1-4_test}); para um ambiente médio, em \nicefrac{1}{2} do ambiente total (figura \ref{fig:1-2_test}); e para o ambiente completo (figura \ref{fig:1-1_test}).

\subsection{Teste de aprendizagem para o ambiente pequeno}

Este teste de aprendizagem foi realizado em \nicefrac{1}{4} do ambiente de testes, dos quais foram retiradas as tabelas de aprendizagem após 500, 1000, 2000 e 5000 iterações.

Ao fim de 5000 iterações o SALbot visitou 345 estados diferentes. Entre as 500 e 1000 iterações, foram mantidos os valores de $Q$ para 46 estados e foram aprendidos 52 novos estados. Entre as 1000 e 2000 iterações, 65 estados mantiveram-se iguais e foram visitados 53 novos estados. Por fim, entre as 2000 e 5000 iterações, a tabela manteve-se igual para 67 estados e 100 novos estados foram visitados.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_8800_state}\\
  \caption{Representação do estado 8800 do SALbot.}\label{fig:8800_state_rep}
\end{figure}

O estado 8800, como se pode verificar na figura \ref{fig:8800_state_rep}, corresponde a: nível 3 nos sensores de distância por infra-vermelhos frontal e laterais; nível 0 no sensor de distância traseiro; nível 1 no sensor de distância por ultra-sons frontal; e sem nenhum sensor de contacto do pára-choques activo. Este estado não seria de esperar que fosse visitado, uma vez que existe uma disparidade entre os sensores de distância por infra-vermelhos e ultra-sons frontais. No entanto, isto pode dever-se ao facto de haver reflexão múltipla (\textit{multipath}) do eco, do feixe de ultra-sons.
\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 8800 do teste para \nicefrac{1}{4} do ambiente.}
    \label{tab:1-4_test_8800_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 8800} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $0$ & $0$ & $0$ & $0$ & $-6$ & $0$ \tn
      1000 & $0$ & $0$ & $0$ & $0$ & $-6$ & $9$ \tn
      2000 & $0$ & $0$ & $0$ & $-5$ & $-2$ & $14$ \tn
      5000 & $-10$ & $0$ & $0$ & $-5$ & $-3$ & $15$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Para este estado (8800) é de esperar que a acção de andar para trás (acção 5) seja a que maior recompensa dê ao SALbot, tendo em conta a função de recompensas. Analisando a evolução da tabela de aprendizagem para este estado (tabela \ref{tab:1-4_test_8800_all}), facilmente se verifica que o SALbot aprendeu que a melhor acção que tem de executar, quando se encontra nesse estado, é de facto andar para trás (acção 5). No entanto, é também perceptível que, antes das 500 iterações, o SALbot ainda não tinha visitado este estado um número de vezes suficientes para que testasse todas as acções, e nem mesmo após as 5000 iterações foi possível ao SALbot testar todas as acções. Ainda assim, o SALbot, depois da aprendizagem, tem informação suficiente para evitar a colisão quando se encontra neste estado, informação que antes da aprendizagem não possuia.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_416_state}\\
  \caption{Representação do estado 416 do SALbot.}\label{fig:416_state_rep}
\end{figure}



Outro estado interessante é o 416, que como se pode ver na figura \ref{fig:416_state_rep} corresponde a: nível 0 para os sensores de distância por infra-vermelhos frontal e laterais; nível 2 para o sensor de distância por infra-vermelhos traseiro; nível 2 para o sensor de distância por ultra-sons frontal; e sem nenhum sensor de contacto do pára-choques activo. Neste estado espera-se que o robô escolha a acção de andar para a frente (acção 0).

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 416 do teste para \nicefrac{1}{4} do ambiente.}
    \label{tab:1-4_test_416_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 416} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $7$ & $8$ & $0$ & $0$ & $0$ & $-6$ \tn
      1000 & $7$ & $10$ & $0$ & $0$ & $0$ & $-6$ \tn
      2000 & $13$ & $7$ & $0$ & $5$ & $0$ & $-6$ \tn
      5000 & $13$ & $10$ & $8$ & $5$ & $-3$ & $-2$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Fazendo uma análise à tabela \ref{tab:1-4_test_416_all}, onde estão expostos os valores da tabela de aprendizagem para este estado, após as várias iterações, verifica-se que ao final das 5000 iterações o SALbot aprendeu que a melhor acção que deve escolher é andar para a frente (acção 0) e tinha experimentado todas as acções possíveis. No entanto, esta acção já tinha sido experimentada desde o final das 500 iterações, não sendo, no entanto, a que melhor recompensa oferecia até ao final das 2000 iterações. É também perceptível uma instabilidade da evolução da tabela para a acção de curvar para a direita (acção 1), que aumentou das 500 para as 1000 iterações, diminuindo das 1000 para as 2000 e voltando a aumentar das 2000 para as 5000. Isto pode dever-se ao SALbot, por vezes, colidir nas paredes e outras vezes não, isto é, o estado representativo do SALbot em relação ao ambiente é o mesmo para ambas as situações, mas o estado real não. Outro facto interessante é o aumento do valor de $Q$ para a acção de andar para trás (acção 5) das 2000 para as 5000 iterações, embora permaneça negativo. Neste caso, uma das causas pode ser a diminuição da carga das baterias dos servos, o que implica que estes rodem mais devagar, o que faz com que o SALbot não percorra o espaço todo, que normalmente percorreria, evitando assim a colisão.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_6402_state}\\
  \caption{Representação do estado 6402 do SALbot.}\label{fig:6402_state_rep}
\end{figure}

O outro estado escolhido deste teste para análise é o 6402. Como se pode verificar na figura \ref{fig:6402_state_rep} este estado corresponde a: nível 1 nos sensores de distância por infra-vermelhos e ultra-sons frontais; nível 2 no sensor de distância por infra-vermelhos lateral direito; nível 3 no sensor de distância por infra-vermelhos lateral esquerdo; nível 0 no sensor de distância por infra-vermelhos traseiro; e um ou mais sensores de contacto da parte lateral esquerda do pára-choques activo. Para este estado esperas-se que a acção com maiores recompensas seja andar para trás (acção 5).

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 6402 do teste para \nicefrac{1}{4} do ambiente.}
    \label{tab:1-4_test_6402_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 6402} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $0$ & $-11$ & $-6$ & $-11$ & $0$ & $0$ \tn
      1000 & $0$ & $-11$ & $-6$ & $-11$ & $0$ & $5$ \tn
      2000 & $0$ & $-4$ & $-6$ & $1$ & $0$ & $11$ \tn
      5000 & $-9$ & $-7$ & $-8$ & $-5$ & $-11$ & $11$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

\pagebreak

Analisando a tabela \ref{tab:1-4_test_6402_all}, verifica-se que todas as acções foram experimentadas pelo SALbot após 5000 iterações e que a acção que dá mais recompensas é, como seria de esperar, a acção de andar para trás (acção 5). De facto, esta acção é a única com o valor de $Q$ positivo após as 5000 iterações. Como acontece no caso do estado 416, também neste estado existe uma inconsistência no valor de $Q$ para a acção de curvar para a direita (acção 1), mas o facto mais interessante é a variação do valor da tabela de aprendizagem para a acção de rodar para a direita (acção 3) entre as 1000 e 5000 iterações. Para esta acção, o valor de $Q$ aumentou das 1000 iterações para as 2000, passando de um valor grande negativo para um pequeno positivo, diminuindo após as 5000 iterações, assumindo, de novo, um valor negativo. Isto pode ser explicado da mesma forma que o caso da acção de curvar para a direita (acção 1) do estado 416, sendo que entre as 1000 e 2000 iterações o SALbot executou vária vezes a acção de rodar para direita que resultaram em boas recompensas.

\subsection{Teste de aprendizagem para o ambiente médio}

Este teste foi realizado em \nicefrac{1}{2} do ambiente de testes, do qual se retiraram as tabelas de aprendizagem após 500, 1000, 2000 e 5000 iterações, tal como no teste anterior.

Neste teste o SALbot após 5000 iterações tinha visitado 297 estados diferentes. Das 500 para as 1000 iterações foram visitados 53 estados novos e os valores da tabela de aprendizagem de 34 estados mantiveram-se iguais, das 1000 para as 2000 o SALbot visitou 66 novos estados e manteve igual os valores da tabela de aprendizagem em 55 estados e das 2000 para as 5000 iterações o SALbot aprendeu em 66 novos estados e os valores de $Q$ da tabela de aprendizagem manteve-se inalterado para 51 estados.

Das tabelas de aprendizagem obtidas deste teste escolheram-se três estados para serem analisados: o 592; o 1809; e o 7556;

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_1809_state}\\
  \caption{Representação do estado 1809 do SALbot.}\label{fig:1809_state_rep}
\end{figure}

O estado 1809, representado na figura \ref{fig:1809_state_rep}, corresponde a: nível 1 no sensor de distância por infra-vermelhos frontal; nível 2 no sensor de distância por ultra-sons frontal; nível 3 no sensor de distância por infra-vermelhos lateral esquerdo; nível 0 nos sensores de distância por infra-vermelhos lateral direito e traseiro; e nenhum sensor de contacto do sistema de pára-choques activo. Tendo em conta os valores dos sensores a que corresponde o estado, é de esperar que o SALbot aprenda que a acção que garante maiores recompensas é a acção de andar para trás (acção 5).

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 1809 do teste para \nicefrac{1}{2} do ambiente.}
    \label{tab:1-2_test_1809_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 1809} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $0$ & $0$ & $0$ & $0$ & $0$ & $0$ \tn
      1000 & $0$ & $0$ & $0$ & $0$ & $0$ & $0$ \tn
      2000 & $0$ & $0$ & $-11$ & $0$ & $0$ & $-6$ \tn
      5000 & $-10$ & $-5$ & $-11$ & $-10$ & $-4$ & $-9$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Analisando a evolução da tabela de aprendizagem para este estado (tabela \ref{tab:1-2_test_1809_all}), verifica-se que não só a melhor acção não é a que seria esperada, como também nenhuma acção é boa. Isto é, após 5000 iterações o SALbot experimentou todas as acções possíveis e nenhuma delas garante boas recompensas.
Desta análise também se verifica que este estado foi visitado pela primeira vez entre as 1000 e 2000 iterações. Isto pode dever-se ao facto de o ambiente de testes ser maior do que no teste anterior, o que implica um maior número de iterações para visitar mais vezes um estado.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_7556_state}\\
  \caption{Representação do estado 7556 do SALbot.}\label{fig:7556_state_rep}
\end{figure}

Para o estado 7556 é de esperar que o SALbot aprenda que a acção que garante maiores recompensas seja a acção de andar para trás (acção 5). Este estado, representado na figura \ref{fig:7556_state_rep}, corresponde a: nível 1 nos sensores de distância por infra-vermelhos frontal e lateral esquerdo e por ultra-sons frontal; nível 3 no sensor de distância por infra-vermelhos lateral direito; nível 0 no sensor de distância por infra-vermelhos traseiro; e pelo menos um dos sensores de contacto do lado direito do sistema de pára-choques activo.

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 7556 do teste para \nicefrac{1}{2} do ambiente.}
    \label{tab:1-2_test_7556_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 7556} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $0$ & $0$ & $0$ & $0$ & $-6$ & $4$ \tn
      1000 & $0$ & $0$ & $1$ & $-6$ & $-1$ & $10$ \tn
      2000 & $-11$ & $-5$ & $1$ & $-5$ & $-5$ & $11$ \tn
      5000 & $-10$ & $-2$ & $1$ & $-3$ & $-3$ & $13$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Da análise à evolução da tabela de aprendizagem entre as 500 e 5000 iterações (tabela \ref{tab:1-2_test_7556_all}), verifica-se que ao final das 5000 iterações o SALbot aprendeu que a acção que garante maiores recompensas para este estado é andar para trás (acção 5), como era de esperar, em que o valor de $Q$ para essa acção foi sendo reforçado ao longo das iterações. Além disso, todas as acções foram experimentadas ao final das 2000 iterações. No entanto, existe um resultado curioso, para a acção de rodar para a direita (acção 3), que é o lado da colisão, a partir das 1000 iterações até às 5000 o valor de $Q$ vai aumentando, embora permaneça negativo. Isto significa que existem casos em que o SALbot, estando nesse estado e executando essa acção, adquire boas recompensas, o que não seria de esperar. Porém, isto pode-se dever ao facto de, por exemplo, o SALbot se encontrar perto de um dos cantos do ambiente de testes colidindo na parte traseira da lateral esquerda e de, devido ao estado da bateria dos servos, não rodar os 90$^{\circ}$ completos para a esquerda.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_592_state}\\
  \caption{Representação do estado 592 do SALbot.}\label{fig:592_state_rep}
\end{figure}

O outro estado escolhido deste teste para ser analisado foi o 592, representado na figura \ref{fig:592_state_rep}. Este estado corresponde a: nível 1 nos sensores de distância por infra-vermelhos lateral esquerdo e ultra-sons frontal; nível 0 nos sensores de distância por infra-vermelhos frontal, traseiro e lateral direito; e nenhum sensor de contacto do sistema de pára-choques activo. Para este estado espera-se que o SALbot aprenda que a melhor acção a executar seja andar para a frente (acção 0).

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 592 do teste para \nicefrac{1}{2} do ambiente.}
    \label{tab:1-2_test_592_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 592} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $14$ & $9$ & $-11$ & $11$ & $12$ & $13$ \tn
      1000 & $14$ & $9$ & $-2$ & $12$ & $12$ & $12$ \tn
      2000 & $13$ & $2$ & $-4$ & $9$ & $12$ & $12$ \tn
      5000 & $13$ & $3$ & $-2$ & $9$ & $14$ & $12$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Fazendo uma análise à progressão dos valores da tabela de aprendizagem (tabela \ref{tab:1-2_test_592_all}), de facto, a acção de andar para a frente (acção 0) garante boas recompensas, no entanto, entre as 2000 e as 5000 iterações, esta acção deixou de ser a que maiores recompensas garante ao SALbot, em que a acção dominante passou a ser rodar para a esquerda (acção 4). Outro facto retirado da análise, é que já no final das 500 iterações o SALbot tinha experimentado todas as acções disponíveis neste estado, pelo que se pode concluir que este estado foi vezes visitado muitas vezes neste teste.

\subsection{Teste de aprendizagem para o ambiente completo}

Neste teste, a aprendizagem ocorreu na totalidade do espaço do ambiente de testes.

No final do teste, isto é, após as 5000 iterações o SALbot visitou, pelo menos uma vez, 255 estados diferentes, dos quais 30 novos estados foram visitados entre as 500 e 1000 iterações, 52 entre as 1000 e 2000 iterações e 77 entre as 2000 e 5000 iterações. Os valores da tabela de aprendizagem mantiveram-se iguais para: 30 estados entre as 500 e 1000 iterações; 36 estados entre as 1000 e 2000 iterações; e 40 estados entre as 2000 e 5000 iterações.

Tal como nos testes anteriores, foram escolhidos três estados indicativos para analisar a evolução da tabela de aprendizagem: o 64; o 2368; e o 5921.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_5921_state}\\
  \caption{Representação do estado 5921 do SALbot.}\label{fig:5921_state_rep}
\end{figure}

O estado 5921, representado na figura \ref{fig:5921_state_rep}, corresponde a: nível 1 no sensor de distância por ultra-sons frontal; nível 3 no sensor de distância por infra-vermelho frontal; nível 2 para os sensores de distância por infra-vermelhos laterais direito e esquerdo; nível 0 para o sensor de distância por infra-vermelhos traseiro; e com um dos sensores de contacto da parte frontal do sistema de pára-choques activo. Tal como no estado 8800, também este não seria de esperar que fosse visitado, devido à grande diferença entre níveis dos sensores de distância frontais por ultra-sons e infra-vermelhos. Ainda assim, e uma vez que também existe uma colisão na parte frontal do SALbot, é de esperar que a melhor acção que o robô deve executar perante este estado é andar para trás (acção 5).

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 5921 do teste para a totalidade do ambiente.}
    \label{tab:1-1_test_5921_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 5921} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $-11$ & $-4$ & $-3$ & $-9$ & $-5$ & $14$ \tn
      1000 & $-1$ & $-2$ & $-5$ & $2$ & $-5$ & $15$ \tn
      2000 & $-3$ & $-4$ & $-7$ & $3$ & $-3$ & $11$ \tn
      5000 & $-5$ & $-10$ & $-2$ & $-2$ & $-4$ & $16$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Analisando a tabela \ref{tab:1-1_test_5921_all}, na qual se verifica a evolução da tabela de aprendizagem para o estado em questão, é de fácil percepção que a acção que garante maiores recompensas ao SALbot é a acção de andar para trás (acção 5), como era de esperar. Mas, para além da existência de alguma instabilidade nos valores de $Q$ para algumas acções, na acção de andar para a frente (acção 0) existe um aumento significativo do valor de $Q$ entre as 500 e 1000 iterações, que depois vai diminuindo até às 5000. Este resultado é muito estranho visto que, se já existe uma colisão na parte frontal do robô, se este andasse para a frente (acção 0) deveria continuar a colidir, o que implicaria uma recompensa negativa e consequentemente um valor de $Q$ menor. Isto pode dever-se ao facto de a colisão ser numa das extremidades da parte frontal do sistema de pára-choques, o que é possível tendo em conta a diferença de níveis entre os sensores de distância frontais, e de o robô andando para a frente, uma vez que os servos não iniciam a rotação exactamente ao mesmo tempo e poder have um servo que roda a uma velocidade maior que o outro, saia do estado de colisão. Outra conclusão, retirada da análise feita à evolução da tabela de aprendizagem para este estado, é que todas as acções foram experimentadas pelo menos uma vez ao final de 500 iteração

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_2368_state}\\
  \caption{Representação do estado 2368 do SALbot.}\label{fig:2368_state_rep}
\end{figure}

\pagebreak

O estado 2368, como se pode verificar na figura \ref{fig:2368_state_rep}, corresponde a: nível 1 nos sensores de distância por ultra-sons frontal e infra-vermelhos frontal e lateral direito; nível 0 nos sensores de distância por infra-vermelhos lateral esquerdo e traseiro; e nenhum sensor de contacto do sistema de pára-choques activo. Para este estado, é de esperar que o SALbot aprenda que curvar para a esquerda (acção 2) é a acção que maiores recompensas garante.

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 2368 do teste para a totalidade do ambiente.}
    \label{tab:1-1_test_2368_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 2368} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $10$ & $0$ & $-5$ & $8$ & $11$ & $13$ \tn
      1000 & $6$ & $-9$ & $11$ & $14$ & $12$ & $12$ \tn
      2000 & $12$ & $-4$ & $-4$ & $13$ & $13$ & $13$ \tn
      5000 & $12$ & $-3$ & $1$ & $14$ & $7$ & $13$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Examinando a evolução da tabela de aprendizagem neste estado (tabela \ref{tab:1-1_test_2368_all}), verifica-se que a acção que se esperava ser a que maiores recompensas garantisse ao SALbot é a que possui valores mais instáveis e nunca chega a ser a acção com o maior valor de $Q$ para este estado. Para este estado, após as 5000 iterações, o SALbot aprendeu que a acção que lhe garante uma maior recompensa é a acção de rodar para a direita (acção 3).

\begin{figure}[!h]
  \centering
  \includegraphics[width=.5\linewidth]{SALbot_64_state}\\
  \caption{Representação do estado 64 do SALbot.}\label{fig:64_state_rep}
\end{figure}

\pagebreak

Por último temos os estado 64, que corresponde a: nível 1 nos sensores de distância por infra-vermelho e ultra-sons frontais; nível 0 nos sensores de distância por infra-vermelhos laterais e traseiro; e nenhum sensor de contacto do sistema de pára-choques activo. Para este estado, não existe uma acção que seja esperada como a que maiores recompensas garanta, na verdade qualquer acção é passível de ser a melhor. Quanto muito poder-se-á dizer que andar para a frente (acção 0) não deverá ser a que melhores recompensas garanta ao SALbot.

\begin{table}[!h]
    \begin{center}
    \caption{Evolução da tabela de aprendizagem para o estado 64 do teste para a totalidade do ambiente.}
    \label{tab:1-1_test_64_all}
    \begin{tabular}{|c|*{6}{x{1cm}|}}
      \hline
      \multicolumn{7}{c}{Estado 64} \tnhl
      \hline
      % after \\: \hline or \cline{col1-col2} \cline{col3-col4} ...
      %Iteração\textbackslash Acção  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \backslashbox{Iteração}{Acção}  & 0 & 1 & 2 & 3 & 4 & 5 \tn
      \hline
      500 & $0$ & $-5$ & $-6$ & $0$ & $0$ & $12$ \tn
      1000 & $6$ & $-5$ & $9$ & $0$ & $5$ & $12$ \tn
      2000 & $11$ & $-3$ & $1$ & $10$ & $9$ & $12$ \tn
      5000 & $15$ & $-3$ & $2$ & $12$ & $10$ & $12$ \tn
      \hline
    \end{tabular}
    \end{center}
\end{table}

Fazendo uma análise à evolução dos valores da tabela de aprendizagem para este estado (tabela \ref{tab:1-1_test_64_all}), a acção de andar para trás (acção 5) é a que apresenta o valor de $Q$ mais estável ao longo do teste, tendo sido a melhor acção para ser executada neste estado durante quase todo o teste. No entanto, entre as 2000 e as 5000 iterações o robô aprendeu que a acção que lhe garante uma maior recompensa é a de andar para a frente (acção 0). Mas o facto mais interessante é a grande instabilidade nos valores de $Q$ para a acção de curvar para a esquerda (acção 2), onde, entre as 500 e as 1000 iterações, passou de um valor negativo para um positivo e descendo entre as 1000 e as 2000 iterações para um valor positivo baixo. Em que, mais uma vez, se pode dever ao facto de o estado poder representar diferentes situações da posição do robô em relação ao ambiente que o rodeia.

\subsection{Comparativo entre os diferentes testes de aprendizagem}

Comparando a evolução da aprendizagem dos vários testes realizados (tabela \ref{tab:Test_table_compare}), nota-se que para o teste realizado num ambiente pequeno, foram aprendidos mais estados do que nos restantes testes, bem como se preservaram, em mais estados, os valores da tabela de aprendizagem. Na verdade, é de fácil percepção que à medida que a área do ambiente de testes foi aumentado o SALbot foi visitando menos estados diferentes. Daí que a instabilidade do valores da tabela de aprendizagem aumente com a área do ambiente de testes. Uma vez que visitando menos estados diferentes, o SALbot visita mais vezes os mesmos estados, e devido ao facto de a percepção do robô, por vezes, corresponder a várias situações distintas, é verificada essa instabilidade nos valores de $Q$ da tabela de aprendizagem.

\begin{table}[!h]
    \begin{center}
    \caption{Comparação das tabelas de aprendizagem entre os diferentes testes de aprendizagem.}
    \label{tab:Test_table_compare}
    \begin{tabularx}{\textwidth}{c|*{9}{x{.86cm}|}}
    \cline{2-10}
    & \multicolumn{3}{s|}{Estados visitados durante a etapa} & \multicolumn{3}{s|}{Novos estados desde a etapa anterior} & \multicolumn{3}{s|}{Estados inalterados desde a etapa anterior} \tn \cline{1-10}
    %\multicolumn{1}{|c|}{Iteração\textbackslash Teste} & \nicefrac{1}{4} & \nicefrac{1}{2} & 1 & \nicefrac{1}{4} & \nicefrac{1}{2} & 1 & \nicefrac{1}{4} & \nicefrac{1}{2} & 1 \tn \cline{2-10}
    \multicolumn{1}{|c|}{\backslashbox{Iteração\\(Etapa)}{Teste}} & \nicefrac{1}{4} & \nicefrac{1}{2} & 1 & \nicefrac{1}{4} & \nicefrac{1}{2} & 1 & \nicefrac{1}{4} & \nicefrac{1}{2} & 1 \tn \cline{2-10}
    \hline
    \multicolumn{1}{|c|}{500}  & 140 & 112 & 96 & $-$ & $-$ & $-$ & $-$ & $-$ & $-$  \tn
    \multicolumn{1}{|c|}{1000} & 192 & 165 & 126 & 52 & 53 & 30 & 46 & 34 & 30 \tn
    \multicolumn{1}{|c|}{2000} & 245 & 231 & 178 & 53 & 66 & 52 & 65 & 55 & 36 \tn
    \multicolumn{1}{|c|}{5000} & 345 & 297 & 255 & 100 & 66 & 77 & 67 & 51 & 40 \tn
    \cline{1-10}
    \end{tabularx}
    \end{center}
\end{table}

\pagebreak

Outra análise realizada, para efeitos de comparação entre os diferentes testes realizados, diz respeito aos gráficos que relacionam o número de colisões acumuladas ao longo das iterações (em que o SALbot vai à tabela de aprendizagem procurar a acção que possui o maior valor de $Q$ para o estado em que se encontra). Na figura \ref{fig:graph_test_comp} estão representados os gráficos que mostram a evolução do número de colisões acumuladas ao longo das iterações dos testes efectuados. É de referir que, no teste realizado num ambiente pequeno, os dados entre as 1000 e 2000 iterações relativos ao número de colisões acumuladas perderam-se devido a um problema, alheio à comunicação e ao programa de interface gráfica, originado pelo sistema operativo, impedindo assim de guardar esses dados. Ainda assim, é possível ver a tendência do gráfico.

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Grafico_test_comp}\\
  \caption{Comparação entre os testes dos gráficos do número de colisões ao longo das iterações.}\label{fig:graph_test_comp}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Grafico_test_media_comp}\\
  \caption{Número de colisões em intervalos de 100 iterações para os testes de aprendizagem.}\label{fig:graph_test_media_comp}
\end{figure}
Seria de esperar que à medida que a área do ambiente aumentasse o número de colisões acumuladas diminuísse, no entanto isso só se verifica quando se aumenta de metade da área do ambiente de testes para a sua totalidade. Isto é, entre o teste realizado num ambiente pequeno e o teste realizado num ambiente médio, não existem diferenças significativas na evolução do número de colisões. Isso pode dever-se ao facto de em ambos os testes se visitarem sensivelmente os mesmos estados ambíguos, isto é, os estados em que a percepção do robô pode corresponder a diferentes situações, nos quais o SALbot executando uma acção pode receber diferentes recompensas. De salientar que, quando o SALbot se encontrava nos cantos do ambiente de testes, o número de colisões acumuladas aumentava consideravelmente, como, por exemplo, se pode verificar no gráfico do teste realizado na área total do ambiente de testes, perto das 2400 iterações (mais sensivelmente entre as 2403 e 2420 iterações, entre as quais se registaram 11 colisões).

Apesar dos testes terem sido realizados para poucas iterações (embora cada um destes tenha demorado aproximadamente 5 horas seguidas), é possível verificar uma certa tendência dos gráficos em convergir para um valor máximo, especialmente para o gráfico do último teste. Contudo, essa tendência pode não se verificar uma vez que, devido aos tais estados ambíguos, o SALbot, mesmo após n iterações, ainda continuar a aumentar o número de colisões acumuladas. Isto é, apesar de não ser garantido que o SALbot deixe definitivamente de colidir, o número de colisões vai diminuindo à medida que vai aprendendo.

Na figura \ref{fig:graph_test_media_comp}, é possível ter uma melhor percepção da evolução da aprendizagem nos diversos testes efectuados. Neste gráfico são representadas as colisões em intervalos de 100 iterações (é de relembrar que, no teste efectuado num ambiente pequenos, não existem dados entre as 1000 e 2000 iterações). Para melhor interpretação do gráfico, foram representadas linhas de tendência para cada teste. Assim, analisando as linhas de tendência, verifica-se que o número de colisões tende para um valor próximo de zero à medida que o número de iterações vai aumentando.

\subsection{Resultados em operação no modo autónomo}

Após a realização dos vários testes de aprendizagem, realizaram-se testes de execução do SALbot no modo autónomo para cada ambiente (pequeno, médio e completo). Mais detalhadamente, para cada ambiente, colocou-se o SALbot a executar 1000 acções no modo autónomo, para duas tabelas de aprendizagem distintas: com aprendizagem de 500 iterações; e com aprendizagem de 5000 iterações. Durante estes testes, foram retirados o número de colisões acumuladas ao longo do número de acções.

\pagebreak

Através da visualização dos gráficos, obtidos com os dados retirados destes testes,(figura \ref{fig:graph_autonomo_col_peq}, \ref{fig:graph_autonomo_col_med} e \ref{fig:graph_autonomo_col_comp}) é clara a evolução da aprendizagem do SALbot. Em todos os ambientes, existe uma redução do número de colisões da aprendizagem com 500 iterações para a aprendizagem com 5000 iterações.

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Auto_amb_peq}\\
  \caption{Comparação entre etapas da aprendizagem do número de colisões no modo autónomo no ambiente pequeno.}\label{fig:graph_autonomo_col_peq}
\end{figure}

Comparando os gráficos já referidos, o SALbot, com a tabela de aprendizagem de 500 iterações, colidiu mais vezes no ambiente pequeno do que nos outros ambientes, o que faz sentido, visto que o espaço do ambiente é menor, isto é, existe menos espaço livre para o robô se movimentar. No entanto, o número de colisões, com a tabela de aprendizagem de 5000 iterações, é menor no ambiente pequeno do que nos restantes. Isto deve-se ao facto de, sendo menor a dimensão do ambiente, o SALbot visitar mais e mais vezes os estados possíveis do ambiente.

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Auto_amb_med}\\
  \caption{Comparação entre etapas da aprendizagem do número de colisões no modo autónomo no ambiente médio.}\label{fig:graph_autonomo_col_med}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Auto_amb_comp}\\
  \caption{Comparação entre etapas da aprendizagem do número de colisões no modo autónomo num ambiente completo.}\label{fig:graph_autonomo_col_comp}
\end{figure}

Analisando os gráficos das figuras: \ref{fig:graph_autonomo_col_peq_med}, \ref{fig:graph_autonomo_col_med_med} e \ref{fig:graph_autonomo_col_comp_med}, torna-se mais evidente a evolução da aprendizagem de 500 iterações para 5000 iterações, em qualquer dos ambientes. As linhas de tendência para as aprendizagens de 5000 iterações, além de representarem um número de colisões menor, são mais estáveis (menor declive) do que para as aprendizagens de 500 iterações. Isto é, comparando o número de colisões entre as aprendizagens de 500 e 5000 iterações, o número de colisões diminui e a variação do número de colisões também diminui.

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Auto_peq_media}\\
  \caption{Número de colisões em intervalos de 100 acções para o modo autónomo no ambiente pequeno.}\label{fig:graph_autonomo_col_peq_med}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Auto_med_media}\\
  \caption{Número de colisões em intervalos de 100 acções para o modo autónomo no ambiente médio.}\label{fig:graph_autonomo_col_med_med}
\end{figure}

\begin{figure}[!h]
  \centering
  \includegraphics[width=\linewidth]{Auto_comp_media}\\
  \caption{Número de colisões em intervalos de 100 acções para o modo autónomo no ambiente completo.}\label{fig:graph_autonomo_col_comp_med}
\end{figure} 