tweak params
This commit is contained in:
		
							parent
							
								
									e4c8e3f79f
								
							
						
					
					
						commit
						61659c1aa1
					
				@ -30,6 +30,7 @@ library
 | 
				
			|||||||
                     , MonadRandom
 | 
					                     , MonadRandom
 | 
				
			||||||
                     , mwc-random
 | 
					                     , mwc-random
 | 
				
			||||||
                     , optparse-applicative
 | 
					                     , optparse-applicative
 | 
				
			||||||
 | 
					                     , parallel
 | 
				
			||||||
                     , path
 | 
					                     , path
 | 
				
			||||||
                     , pipes
 | 
					                     , pipes
 | 
				
			||||||
                     , primitive
 | 
					                     , primitive
 | 
				
			||||||
@ -63,6 +64,7 @@ executable haga
 | 
				
			|||||||
                     , MonadRandom
 | 
					                     , MonadRandom
 | 
				
			||||||
                     , mwc-random
 | 
					                     , mwc-random
 | 
				
			||||||
                     , optparse-applicative
 | 
					                     , optparse-applicative
 | 
				
			||||||
 | 
					                     , parallel
 | 
				
			||||||
                     , path
 | 
					                     , path
 | 
				
			||||||
                     , pipes
 | 
					                     , pipes
 | 
				
			||||||
                     , primitive
 | 
					                     , primitive
 | 
				
			||||||
@ -99,6 +101,7 @@ executable haga-test
 | 
				
			|||||||
                     , MonadRandom
 | 
					                     , MonadRandom
 | 
				
			||||||
                     , mwc-random
 | 
					                     , mwc-random
 | 
				
			||||||
                     , optparse-applicative
 | 
					                     , optparse-applicative
 | 
				
			||||||
 | 
					                     , parallel
 | 
				
			||||||
                     , path
 | 
					                     , path
 | 
				
			||||||
                     , pipes
 | 
					                     , pipes
 | 
				
			||||||
                     , primitive
 | 
					                     , primitive
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ options =
 | 
				
			|||||||
      ( long "iterations"
 | 
					      ( long "iterations"
 | 
				
			||||||
          <> short 'i'
 | 
					          <> short 'i'
 | 
				
			||||||
          <> metavar "N"
 | 
					          <> metavar "N"
 | 
				
			||||||
          <> value 1000
 | 
					          <> value 100
 | 
				
			||||||
          <> help "Number of iterations"
 | 
					          <> help "Number of iterations"
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
    <*> option
 | 
					    <*> option
 | 
				
			||||||
@ -34,7 +34,7 @@ options =
 | 
				
			|||||||
      ( long "population-size"
 | 
					      ( long "population-size"
 | 
				
			||||||
          <> short 'p'
 | 
					          <> short 'p'
 | 
				
			||||||
          <> metavar "N"
 | 
					          <> metavar "N"
 | 
				
			||||||
          <> value 100
 | 
					          <> value 200
 | 
				
			||||||
          <> help "Population size"
 | 
					          <> help "Population size"
 | 
				
			||||||
      )
 | 
					      )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -54,7 +54,7 @@ main =
 | 
				
			|||||||
    nurseryLEE <- shuffledNurseryLEE
 | 
					    nurseryLEE <- shuffledNurseryLEE
 | 
				
			||||||
    let env = nurseryLE
 | 
					    let env = nurseryLE
 | 
				
			||||||
    let selType = Tournament 3
 | 
					    let selType = Tournament 3
 | 
				
			||||||
    let run' = run nurseryLEE env selType 80 (5 / 100) (populationSize opts) (steps (iterations opts))
 | 
					    let run' = run nurseryLEE env selType 150 (5 / 100) (populationSize opts) (steps (iterations opts))
 | 
				
			||||||
    pop' <- runEffect (for run' logCsv)
 | 
					    pop' <- runEffect (for run' logCsv)
 | 
				
			||||||
    nurseryLEE' <- calc nurseryLEE  pop'
 | 
					    nurseryLEE' <- calc nurseryLEE  pop'
 | 
				
			||||||
    let (res, _) = bests nurseryLEE' 5 pop'
 | 
					    let (res, _) = bests nurseryLEE' 5 pop'
 | 
				
			||||||
 | 
				
			|||||||
@ -74,13 +74,13 @@ nurseryLE =
 | 
				
			|||||||
            ((Ref.SomeTypeRep (Ref.TypeRep @(Health))), [(fmap show (enumUniform NotRecommendHealth PriorityHealth ))])
 | 
					            ((Ref.SomeTypeRep (Ref.TypeRep @(Health))), [(fmap show (enumUniform NotRecommendHealth PriorityHealth ))])
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
      targetType = (Ref.SomeTypeRep (Ref.TypeRep @(Parents -> HasNurs -> Form -> Children -> Housing -> Finance -> Social -> Health -> NurseryClass))),
 | 
					      targetType = (Ref.SomeTypeRep (Ref.TypeRep @(Parents -> HasNurs -> Form -> Children -> Housing -> Finance -> Social -> Health -> NurseryClass))),
 | 
				
			||||||
      maxDepth = 8,
 | 
					      maxDepth = 7,
 | 
				
			||||||
      weights =
 | 
					      weights =
 | 
				
			||||||
        ExpressionWeights
 | 
					        ExpressionWeights
 | 
				
			||||||
          { lambdaSpucker = 1,
 | 
					          { lambdaSpucker = 2,
 | 
				
			||||||
            lambdaSchlucker = 1,
 | 
					            lambdaSchlucker = 1,
 | 
				
			||||||
            symbol = 30,
 | 
					            symbol = 30,
 | 
				
			||||||
            variable = 10,
 | 
					            variable = 20,
 | 
				
			||||||
            constant = 5
 | 
					            constant = 5
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -165,23 +165,19 @@ dset :: LamdaExecutionEnv -> ([(Parents, HasNurs, Form, Children, Housing, Finan
 | 
				
			|||||||
dset lEE = if training lEE then trainingData lEE else testData lEE
 | 
					dset lEE = if training lEE then trainingData lEE else testData lEE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
evalResults :: LamdaExecutionEnv -> [TypeRequester] -> Hint.InterpreterT IO [(TypeRequester, FittnesRes)]
 | 
					evalResults :: LamdaExecutionEnv -> [TypeRequester] -> Hint.InterpreterT IO [(TypeRequester, FittnesRes)]
 | 
				
			||||||
evalResults ex trs = mapM (evalResult ex) trs
 | 
					evalResults ex trs = do
 | 
				
			||||||
 | 
					 | 
				
			||||||
evalResult :: LamdaExecutionEnv -> TypeRequester -> Hint.InterpreterT IO (TypeRequester, FittnesRes)
 | 
					 | 
				
			||||||
evalResult ex tr = do
 | 
					 | 
				
			||||||
  Hint.setImports $ (map T.unpack (imports ex)) ++ ["Protolude"]
 | 
					  Hint.setImports $ (map T.unpack (imports ex)) ++ ["Protolude"]
 | 
				
			||||||
  Hint.unsafeSetGhcOption "-O2"
 | 
					  Hint.unsafeSetGhcOption "-O2"
 | 
				
			||||||
  result <- Hint.interpret (T.unpack (toLambdaExpressionS tr)) (Hint.as :: Parents -> HasNurs -> Form -> Children -> Housing -> Finance -> Social -> Health -> NurseryClass)
 | 
					  let arrayOfFunctionText = map toLambdaExpressionS trs
 | 
				
			||||||
  let res = map (\(a, b, c, d, e, f, g, h) -> result a b c d e f g h) (fst (dset ex))
 | 
					  let textOfFunctionArray = "[" <> T.intercalate "," arrayOfFunctionText <> "]"
 | 
				
			||||||
  let resAndTarget = (zip (snd (dset ex)) res)
 | 
					  result <- Hint.interpret (T.unpack (textOfFunctionArray)) (Hint.as :: [Parents -> HasNurs -> Form -> Children -> Housing -> Finance -> Social -> Health -> NurseryClass])
 | 
				
			||||||
  let acc = (foldr (\ts s -> if ((fst ts) == (snd ts)) then s + 1 else s) 0 resAndTarget) / fromIntegral (length resAndTarget)
 | 
					  return $ zipWith (evalResult ex) trs result
 | 
				
			||||||
  let biasSmall = exp ((-(fromIntegral (countTrsR tr))) / 1000) -- 0 (schlecht) bis 1 (gut)
 | 
					
 | 
				
			||||||
  let fitness' = meanOfAccuricyPerClass resAndTarget
 | 
					
 | 
				
			||||||
  let score = fitness' + (biasSmall - 1)
 | 
					evalResult :: LamdaExecutionEnv -> TypeRequester -> (Parents -> HasNurs -> Form -> Children -> Housing -> Finance -> Social -> Health -> NurseryClass) -> (TypeRequester, FittnesRes)
 | 
				
			||||||
  return
 | 
					evalResult ex tr result = ( tr,
 | 
				
			||||||
    ( tr,
 | 
					 | 
				
			||||||
      FittnesRes
 | 
					      FittnesRes
 | 
				
			||||||
        { total = score,
 | 
					        { total = acc * 100 + (biasSmall - 1),
 | 
				
			||||||
          fitnessTotal = fitness',
 | 
					          fitnessTotal = fitness',
 | 
				
			||||||
          fitnessMean = meanOfAccuricyPerClass resAndTarget,
 | 
					          fitnessMean = meanOfAccuricyPerClass resAndTarget,
 | 
				
			||||||
          fitnessGeoMean = geomeanOfDistributionAccuracy resAndTarget,
 | 
					          fitnessGeoMean = geomeanOfDistributionAccuracy resAndTarget,
 | 
				
			||||||
@ -190,6 +186,14 @@ evalResult ex tr = do
 | 
				
			|||||||
          totalSize = countTrsR tr
 | 
					          totalSize = countTrsR tr
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					    res = map (\(a, b, c, d, e, f, g, h) -> result a b c d e f g h) (fst (dset ex))
 | 
				
			||||||
 | 
					    resAndTarget = (zip (snd (dset ex)) res)
 | 
				
			||||||
 | 
					    acc = (foldr (\ts s -> if ((fst ts) == (snd ts)) then s + 1 else s) 0 resAndTarget) / fromIntegral (length resAndTarget)
 | 
				
			||||||
 | 
					    biasSmall = exp ((-(fromIntegral (countTrsR tr))) / 1000) -- 0 (schlecht) bis 1 (gut)
 | 
				
			||||||
 | 
					    fitness' = meanOfAccuricyPerClass resAndTarget
 | 
				
			||||||
 | 
					    score = fitness' + (biasSmall - 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if' :: Bool -> a -> a -> a
 | 
					if' :: Bool -> a -> a -> a
 | 
				
			||||||
if' True e _ = e
 | 
					if' True e _ = e
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@ geomean :: (Show f, Floating f) => [f] -> f
 | 
				
			|||||||
geomean values = (product values) ** (1 / (fromIntegral (length values)))
 | 
					geomean values = (product values) ** (1 / (fromIntegral (length values)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
accuracyInClass :: (Eq r) => [(r, r)] -> r -> R
 | 
					accuracyInClass :: (Eq r) => [(r, r)] -> r -> R
 | 
				
			||||||
accuracyInClass results clas = ((accuracy' (inResClass results clas)) * 100) / fromIntegral (length (inClass results clas))
 | 
					accuracyInClass results clas = if fromIntegral (length (inClass results clas)) == 0 then 100 else ((accuracy' (inResClass results clas)) * 100) / fromIntegral (length (inClass results clas))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
inClass :: (Eq r) => [(r, r)] -> r -> [(r, r)]
 | 
					inClass :: (Eq r) => [(r, r)] -> r -> [(r, r)]
 | 
				
			||||||
inClass results clas = (filter ((clas ==) . fst) results)
 | 
					inClass results clas = (filter ((clas ==) . fst) results)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user