{- | Copyright Bogdan Penkovsky (c) 2017 = Multiple Expression Programming == Example application: trigonometry cheating Suppose, you forgot certain trigonometric identities. For instance, you want to express cos^2(x) using sin(x). No problem, set the target function cos^2(x) in the dataset and add sin to the arithmetic set of operators @{+,-,*,/}@. See app/Main.hs. After running @ $ stack build && stack exec hmep-demo @ We obtain @ Average loss in the initial population 15.268705681244962 Population 10: average loss 14.709728527360586 Population 20: average loss 13.497114190675477 Population 30: average loss 8.953185872653737 Population 40: average loss 8.953185872653737 Population 50: average loss 3.3219954564955856e-15 @ The average value of 3.3e-15 is close to zero, indicating that the exact expression was found! The produced output was: @ Interpreted expression: v1 = sin x0 v2 = v1 * v1 result = 1 - v2 @ From here we can infer that @ cos^2(x) = 1 - v2 = 1 - v1 * v1 = 1 - sin^2(x). @ Sweet! -} module AI.MEP ( Chromosome (..) , Gene , Population , Phenotype , Config (..) , defaultConfig , LossFunction -- * Genetic algorithm , initialize , evaluatePopulation , regressionLoss1 , avgLoss , best , worst , evolve , binaryTournament , crossover , mutation3 , smoothMutation , newChromosome -- * Expression interpretation , generateCode -- * Random , RandT , runRandIO ) where import AI.MEP.Types import AI.MEP.Operators import AI.MEP.Run import AI.MEP.Random