neet-0.1.0.0: src/Neet/Examples/XOR.hs
{-
Copyright (C) 2015 Leon Medvinsky
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-}
{-|
Module : Neet.Examples.XOR
Description : Testing the algorithm on XOR
Copyright : (c) Leon Medvinsky, 2015
License : GPL-3
Maintainer : lmedvinsky@hotmail.com
Stability : experimental
Portability : ghc
-}
module Neet.Examples.XOR (xorFit, andFit, orFit) where
import Neet.Genome
import Neet.Network
boolQuestions :: [[Double]]
boolQuestions = [ [0, 0]
, [0, 1]
, [1, 0]
, [1, 1]
]
xorAnswers :: [Double]
xorAnswers = [0, 1, 1, 0]
sampleFit :: [[Double]] -> [Double] -> Genome -> Double
sampleFit questions answers g = (fromIntegral (length answers) - sumDiffs)**2
where net = mkPhenotype g
try samp = head . getOutput $ snapshot net samp
responses = map try questions
sumDiffs = sum $ zipWith (\x y -> abs (x - y)) responses answers
xorFit :: Genome -> Double
xorFit = sampleFit boolQuestions xorAnswers
andAnswers :: [Double]
andAnswers = [0, 0, 0, 1]
andFit :: Genome -> Double
andFit = sampleFit boolQuestions andAnswers
orAnswers :: [Double]
orAnswers = [0, 1, 1, 1]
orFit :: Genome -> Double
orFit = sampleFit boolQuestions orAnswers