void Update() { // get current state and compare with last var currentState = DetermineState(); if (currentState.Equals(lastState)) { // do nothing if state did not change return; } // state changed => select an action and execute it var action = SelectAction(currentState); ExecuteAction(action); // Update QTable var reward = birdMvmt.IsDead() ? -1000 : 10 / (int)(Mathf.Abs(currentState.vDist) + 1.001); if (birdMvmt.IsDead()) { FileWriter.WriteTable(qLearningTable, "qLearningTable"); birdMvmt.ResetIsDead(); } Debug.Log("State: " + currentState + " SelectedAction: " + action + " Reward: " + reward); qLearningTable[lastState][lastAction] += alpha * (reward + gamma * Mathf.Max((float)qLearningTable[currentState][Action.Flap], (float)qLearningTable[currentState][Action.Nop]) - qLearningTable[lastState][lastAction]); // update lastState lastState = currentState; lastAction = action; }