gnus: Score Decays

 
 7.16 Score Decays
 =================
 
 You may find that your scores have a tendency to grow without bounds,
 especially if you’re using adaptive scoring.  If scores get too big,
 they lose all meaning—they simply max out and it’s difficult to use them
 in any sensible way.
 
    Gnus provides a mechanism for decaying scores to help with this
 problem.  When score files are loaded and ‘gnus-decay-scores’ is
 non-‘nil’, Gnus will run the score files through the decaying mechanism
 thereby lowering the scores of all non-permanent score rules.  If
 ‘gnus-decay-scores’ is a regexp, only score files matching this regexp
 are treated.  E.g., you may set it to ‘\\.ADAPT\\'’ if only _adaptive_
 score files should be decayed.  The decay itself if performed by the
 ‘gnus-decay-score-function’ function, which is ‘gnus-decay-score’ by
 default.  Here’s the definition of that function:
 
      (defun gnus-decay-score (score)
        "Decay SCORE according to `gnus-score-decay-constant'
      and `gnus-score-decay-scale'."
        (let ((n (- score
                    (* (if (< score 0) -1 1)
                       (min (abs score)
                            (max gnus-score-decay-constant
                                 (* (abs score)
                                    gnus-score-decay-scale)))))))
          (if (and (featurep 'xemacs)
                   ;; XEmacs's floor can handle only the floating point
                   ;; number below the half of the maximum integer.
                   (> (abs n) (lsh -1 -2)))
              (string-to-number
               (car (split-string (number-to-string n) "\\.")))
            (floor n))))
 
    ‘gnus-score-decay-constant’ is 3 by default and
 ‘gnus-score-decay-scale’ is 0.05.  This should cause the following:
 
   1. Scores between -3 and 3 will be set to 0 when this function is
      called.
 
   2. Scores with magnitudes between 3 and 60 will be shrunk by 3.
 
   3. Scores with magnitudes greater than 60 will be shrunk by 5% of the
      score.
 
    If you don’t like this decay function, write your own.  It is called
 with the score to be decayed as its only parameter, and it should return
 the new score, which should be an integer.
 
    Gnus will try to decay scores once a day.  If you haven’t run Gnus
 for four days, Gnus will decay the scores four times, for instance.