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