Update other binary to not use L.Grammar.Compile
[L-seed.git] / src / fastScorer.hs
1 import Lseed.Data
2 import Lseed.Data.Functions
3 import Lseed.Grammar.Parse
4 import Lseed.Constants
5 import Lseed.Mainloop
6 import qualified Data.Map as M
7 import Control.Monad
8 import Debug.Trace
9 import System.Environment
10 import System.Time
11 import System.Random
12 import Text.Printf
13
14 parseFile filename = do
15         content <- readFile filename
16         let result = parseGrammar filename content
17         return $ either (error.show) id result
18
19 readArgs doit = do
20         args <- getArgs
21         if null args
22           then  do
23                 putStrLn "L-Seed Demo application."
24                 putStrLn "Please pass L-Seed files on the command line."
25           else  do
26                 genomes <- mapM parseFile args
27                 doit (spread genomes)
28   where spread gs = zipWith (\g p -> Planted ((fromIntegral p + 0.5) / l) p g inititalPlant) gs [0..]
29           where l = fromIntegral (length gs)
30               
31
32 scoringObs = nullObserver {
33         obFinished = \garden -> do
34                 forM_ garden $ \planted -> do
35                         printf "Plant from %d at %.4f: Total size %.4f\n"
36                                 (plantOwner planted)
37                                 (plantPosition planted)
38                                 (plantLength (phenotype planted))
39                 let owernerscore = foldr (\p -> M.insertWith (+) (plantOwner p) (plantLength (phenotype p))) M.empty garden
40                 forM_ (M.toList owernerscore) $ \(o,s) -> 
41                         printf "Sum for %d: %.4f\n" o s
42         }
43
44 main = readArgs $ \garden -> do
45         lseedMainLoop False scoringObs 30 garden