private string Walk()
    {
        while (_learningState != QualityLearningState.Trained)
        {
        }
        _environmentMaze.SetAllStateToUncharted();
        int currentState = startState;

        _environmentMaze.GoToState(currentState, _learningState);
        string printString = currentState + "->";

        while (currentState != goalState)
        {
            int next = MaxAction(_qMatrix[currentState]);
            printString += next + "->";
            currentState = next;
            _environmentMaze.GoToState(currentState, _learningState);
        }
        printString += "done";
        Debug.Log(printString);
        return(printString);
    }
 private int[][] CreateEnvironmentMaze(int numberOfStates)
 {
     int[][] environmentMatrix = new int[numberOfStates][];
     for (int i = 0; i < numberOfStates; ++i)
     {
         environmentMatrix[i] = new int[numberOfStates];
     }
     environmentMatrix[0][1]   = environmentMatrix[0][4] = environmentMatrix[1][0] = environmentMatrix[1][5] = environmentMatrix[2][3] = 1;
     environmentMatrix[2][6]   = environmentMatrix[3][2] = environmentMatrix[3][7] = environmentMatrix[4][0] = environmentMatrix[4][8] = 1;
     environmentMatrix[5][1]   = environmentMatrix[5][6] = environmentMatrix[5][9] = environmentMatrix[6][2] = environmentMatrix[6][5] = 1;
     environmentMatrix[6][7]   = environmentMatrix[7][3] = environmentMatrix[7][6] = environmentMatrix[7][11] = environmentMatrix[8][4] = 1;
     environmentMatrix[8][9]   = environmentMatrix[9][5] = environmentMatrix[9][8] = environmentMatrix[9][10] = environmentMatrix[10][9] = 1;
     environmentMatrix[11][11] = 1;  // Goal
     _environmentMaze          = environment.GetComponent <EnvironmentMaze>();
     if (!_environmentMaze)
     {
         Debug.LogError("Environment Maze not found");
     }
     _environmentMaze.SetAllStateToUncharted();
     return(environmentMatrix);
 }