From 8e40396828df55abacb46a7291db679bd2419ac8 Mon Sep 17 00:00:00 2001 From: Rowan Torbitzky-Lane Date: Thu, 27 Feb 2025 00:17:50 -0600 Subject: [PATCH] downsample maxmin pre-loop is done --- src/HushGP/GP/Downsample.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/HushGP/GP/Downsample.hs b/src/HushGP/GP/Downsample.hs index 87bd71c..72513bf 100644 --- a/src/HushGP/GP/Downsample.hs +++ b/src/HushGP/GP/Downsample.hs @@ -5,6 +5,7 @@ import System.Random import HushGP.Genome import HushGP.GP.PushData import HushGP.GP.PushArgs +import Data.List -- |Sets the index of the passed training data. assignIndiciesToData :: [PushData] -> [PushData] @@ -12,7 +13,7 @@ assignIndiciesToData oldData = zipWith (\dat idx -> dat{_downsampleIndex = Just -- |Initializes cases distances for passed training data. initializeCaseDistances :: PushArgs -> [PushData] -initializeCaseDistances pushArgs = [ dat{_caseDistances = Just (replicate (length $ trainingData pushArgs) (fromIntegral @Int @Double $ populationSize pushArgs))} | dat <- trainingData pushArgs ] +initializeCaseDistances (PushArgs {trainingData = tData, populationSize = popSize}) = [ dat{_caseDistances = Just (replicate (length tData) (fromIntegral @Int @Double popSize))} | dat <- tData ] -- |Updates the cases distances when downsampling updateCaseDistances :: [Individual] -> [PushData] -> [PushData] -> String -> Double -> [PushData] @@ -25,6 +26,13 @@ selectDownsampleRandom pushArgs pushData = take (floor (downsampleRate pushArgs -- |Selects a downsample that has it's cases maximally far away by sequentially -- adding cases to the downsample that have their closest case maximally far away selectDownsampleMaxmin :: PushArgs -> [PushData] -> IO [PushData] -selectDownsampleMaxmin pushArgs@(PushArgs {downsampleRate = dsRate}) pushData = do +selectDownsampleMaxmin (PushArgs {downsampleRate = dsRate}) pushData = do shuffledCases <- shuffle' pushData (length pushData) <$> initStdGen - + let goalSize = floor @Float @Int (dsRate * (fromIntegral @Int @Float $ length pushData)) + selectDownsampleMaxmin' + (case uncons shuffledCases of (Just (x, _)) -> [x]; _ -> error "error: shuffledCases empty!") + (drop 1 shuffledCases) + goalSize + +selectDownsampleMaxmin' :: [PushData] -> [PushData] -> Int -> IO [PushData] +selectDownsampleMaxmin' newDownsample casesToPickFrom goalSize = undefined