HSGEP-0.1.1: GEP/Examples/Regression/Driver.hs
-- |
-- Haskell gene expression programming, regression example
--
-- Author: mjsottile\@computer.org
--
module Main (
main
) where
import GEP.GenericDriver
import GEP.Util.ConfigurationReader
import GEP.Examples.Regression.ArithmeticIndividual
import GEP.Examples.Regression.FitnessInput
import GEP.Examples.Regression.MaximaClient
import System.Environment (getArgs)
import Control.Monad (when)
--
-- sanity check arguments to see if we have enough
--
validateArgs :: [String] -> IO ()
validateArgs s =
when (length s < 2) $
error "Must specify config file and fitness test data file names."
--
-- main
--
main :: IO ()
main = do
-- read in parameters from specified file
args <- getArgs
-- sanity check
validateArgs args
-- give args nice names
let configFile = head args
let fitnessFile = head (tail args)
-- if optional third argument is present, assume it is dot file
dotfile <- if length args == 3 then return $ Just $head (tail (tail args))
else return $ Nothing
-- read parameters
(rs,gnome,params) <- readParameters configFile
-- read fitness test data
(testDict, ys) <- readFitnessInput fitnessFile
-- call generic driver
(best,pop) <- gepDriver params rs gnome testDict ys fitness_evaluate_absolute express_individual
-- Express best individual
let bestExpressed = express_individual (head pop) gnome
-- Flatten best individual via infix walk
let bestString = infixWalker bestExpressed
-- report status
putStrLn "-------------------------------------------------"
putStrLn $ "DONE : "++(show best)
putStrLn $ "INFIX : "++bestString
putStrLn $ "MAXIMA OUTPUT :"
-- send flattened individual to maxima for pretty printing
-- and print lines that come back
maximaExpand bestString "qubu.net" 12777 >>= mapM_ putStrLn
-- dump to dot file if one was specified
dumpDotFile dotfile bestExpressed