diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 28da378..0f49c40 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1,4 +1,7 @@ 0.9 + Robert Patton for being a documentation guinea pig. Documentation added for probes and min()/max() for minimization problems. + +0.8.1 Lucas McCombs for improvements to crossover operators, parent/offspring tracking, plotting, and more. 0.8 diff --git a/docs/source/common_problems.rst b/docs/source/common_problems.rst index 1bbc181..084d7ce 100644 --- a/docs/source/common_problems.rst +++ b/docs/source/common_problems.rst @@ -3,6 +3,30 @@ Common Problems Here we address common problems that may arise when using LEAP. +`min()` returns the worst individual for minimization problems +-------------------------------------------------------------- + +`min()` and `max()` works the opposite you may expect for minimization problems +because the `<` operator has been overriden to consider fitness scalars that are +numerically less than than another to be "better". So `min()` takes into consideration +the problem semantics not the raw number values. + +E.g., for a given minimization problem: + +.. code-block:: python + + min(parents).fitness + Out[2]: 66.49057507514954 + max(parents).fitness + Out[3]: 59.87865996360779 + +The above shows that the value `59.87865996360779` is "better" than +`66.49057507514954` even though _numerically_ it is less than the other value. + +It was important for LEAP to override the `<` operator for `Individual`s because +it uses native sort operations to find the "best" and "worst", and so minimization vs. +maximization semantics needed to be taken into account. + Missing pipeline operator arguments -----------------------------------