public void Learn()
        {
            int[] s_tt = Ds.GetCurrentState();
            float r_t  = Ds.GetReward();
            int   a_t  = Ds.GetLastExecutedAction();

            if (a_t == this.m_prevSelectedAction)
            {
                base.SetJustExecuted(true);
            }

            if (a_t < 0)
            {
                // aciton ignored and nothing happened
                if (r_t == 0)
                {
                    return;
                }
                // action adding, reward received as a result of unknown action
                List <int> toBeAdded = Ds.GetLastExecutedActions();
                this.PerformActionAdding(toBeAdded);
                return;
            }

            if (m_setup.OnlineSubspaceVariables)
            {
                m_mlvh.monitorVariableChanges(this);
            }

            LearningAlgorithm.Learn(r_t, s_tt, a_t);

            if (r_t > 0)
            {
                // SRP is also an action, if the reward is received means that it just has been executed
                base.SetJustExecuted(true);
                this.ResetMotivationSource();
                m_mlvh.performOnlineVariableRemoving(this);
            }
        }