void runLearningLoop() {
    QTable q = new QTable(getActionRange());
    int moveCounter = 0;

    int count = 0;
    while (count < 100) {
      // PRINT MAP
      //            printMap();
      // CHECK IF WON, THEN RESET
      if (isGoalReached()) {
        System.out.println("GOAL REACHED IN " + moveCounter + " MOVES!");
        resetMaze();
        moveCounter = 0;
        count++;
        //                q.updateQvalue(100, map);
        //                return;
      }

      // DETERMINE ACTION
      int action = q.getNextAction(getMap());
      //            System.out.println(action+"MOVING: "+getMoveName(action));
      goToNextState(action);
      moveCounter++;

      // REWARDS AND ADJUSTMENT OF WEIGHTS SHOULD TAKE PLACE HERE
      if (isGoalReached()) {
        q.updateQvalue(1, map);
      } else {
        q.updateQvalue(-100, map);
      }

      // COMMENT THE SLEEP FUNCTION IF YOU NEED FAST TRAINING WITHOUT
      // NEEDING TO ACTUALLY SEE IT PROGRESS
      // Thread.sleep(1000);
    }
  }