packages feed

srtree-2.0.0.0: apps/tinygp/Main.hs

module Main (main) where

import GP ( HyperParams(HP), fitness, evolution )
import Data.SRTree ( param, var )
import System.Random ( getStdGen )
import Control.Monad.State ( evalStateT )
import Data.SRTree.Datasets ( loadDataset ) 
import Options.Applicative
import Data.Massiv.Array 

-- Data type to store command line arguments
data Args = Args
  { dataset :: String,
    popSize :: Int,
    gens    :: Int,
    pc      :: Double,
    pm      :: Double
  }
  deriving (Show)

-- parser of command line arguments
opt :: Parser Args
opt = Args
   <$> strOption
       ( long "dataset"
       <> short 'd'
       <> metavar "INPUT-FILE"
       <> help "CSV dataset." )
   <*> option auto
       ( long "population"
       <> short 'p'
       <> metavar "POP-SIZE"
       <> showDefault
       <> value 100
       <> help "Population size." )
   <*> option auto
      ( long "generations"
      <> short 'g'
      <> metavar "GENS"
      <> showDefault
      <> value 100
      <> help "Number of generations." )
   <*> option auto
      ( long "probCx"
      <> metavar "PC"
      <> showDefault
      <> value 0.9
      <> help "Crossover probability." )
   <*> option auto
      ( long "probMut"
      <> metavar "PM"
      <> showDefault
      <> value 0.3
      <> help "Mutation probability." )

nonterms = [Right (+), Right (-), Right (*), Right (/), Right (\l r -> abs l ** r), Left (1/)]
--nonterms = [Right (+), Right (-), Right (*)]

main :: IO ()
main = do
  args <- execParser opts
  g <- getStdGen
  ((x, y, _, _), _, _) <- loadDataset (dataset args) True
  let hp = HP 2 4 25 (popSize args) 2 (pc args) (pm args) terms nonterms 
      (Sz2 _ nFeats) = size x
      terms = [var ix | ix <- [0 .. nFeats-1]] <> [param ix | ix <- [0 .. 5]]
  pop <- evalStateT (evolution (gens args) hp (fitness x y)) g
  putStrLn "Fin"
  where
    opts = info (opt <**> helper)
            ( fullDesc <> progDesc "Very simple example of GP using SRTree."
           <> header "tinyGP - a very simple example of GP using SRTRee." )