7
Parity is one of the classical GP problems. The goal is to find a program
8
that produces the value of the Boolean even parity given n independent
9
Boolean inputs. Usually, 6 Boolean inputs are used (Parity-6), and the goal
10
is to match the good parity bit value for each of the :math:`2^6 = 64`
11
possible entries. The problem can be made harder by increasing the number of
12
inputs (in the DEAP implementation, this number can easily be tuned, as it is
13
fixed by a constant named PARITY_FANIN_M).
15
For more information about this problem, see :ref:`refPapersParity`.
20
Parity uses standard Boolean operators as primitives, available in the Python
23
.. literalinclude:: /../examples/gp/parity.py
26
In addition to the *n* inputs, we add two constant terminals, one at 0, one
30
As Python is a dynamic typed language, you can mix Boolean operators and
31
integers without any issue.
37
In this implementation, the fitness of a Parity individual is simply the
38
number of successful cases. Thus, the fitness is maximized, and the maximum
39
value is 64 in the case of a 6 inputs problems.
41
.. literalinclude:: /../examples/gp/parity.py
44
`inputs` and `outputs` are two pre-generated lists, to speedup the
45
evaluation, mapping a given input vector to the good output bit. The Python
46
:func:`sum` function works on booleans (false is interpreted as 0 and true as
47
1), so the evaluation function boils down to sum the number of successful
48
tests : the higher this sum, the better the individual.
53
The other parts of the program are mostly the same as the :ref:`Symbolic
54
Regression algorithm <symbreg>`.
56
The complete :example:`gp/parity`.
63
*John R. Koza, "Genetic Programming II: Automatic Discovery of Reusable
64
Programs", MIT Press, 1994, pages 157-199.*