import CombinatorialOptimisation.TIM import FileFormat.TIM import System.Random import Data.List main :: IO() main = do p<-loadTIMFileRaw "../exampleProblems/TT2002/competition01.tim" writeFile "Test.csv" $ rawToCSV p p'<-loadTIMFile "../exampleProblems/TT2002/competition01.tim" writeFile "Test2.csv" $ viewConstrainedProblem p' --putStrLn $ timeTableDetailsAsCSV p' gen<-newStdGen let p'' = stochasticBasic p' gen putStrLn $ timeTableDetailsAsCSV p'' print p'' userIn<-getLine let p'''=descheduleEvent (read userIn) p'' putStrLn $ timeTableDetailsAsCSV p''' print p'' print p''' -- mapM_ print $ take 2000000 $ randomWalk gen p'' -- print $ unscheduledEvents p' stochasticBasic t g = foldl (\c (a,b,d)->schedule a b d c) t $ zip3 randomTimes randomRooms (unscheduledEvents t) where (g1,g2) = split g randomTimes = randomRs (0,numberOfTimeSlots t -1) g1 randomRooms = randomRs (0,numberOfRooms t -1) g2 perterb :: RandomGen g=>Int->g->TimeTable->TimeTable perterb i g t = stochasticBasic finalT finalG where baseLimit = length (currentlyScheduledEvents t)-1 (finalT,finalG) = descheduleSome i baseLimit g t descheduleSome 0 _ g' t' = (t',g') descheduleSome n r g' t' = let (v,g'') = randomR (0,r) g' k = currentlyScheduledEvents t' !! v in descheduleSome (n-1) (r-1) g'' (descheduleEvent k t') randomWalk :: RandomGen g=>g->TimeTable->[TimeTable] randomWalk g t = let gs = unfoldr (Just . split) g as = t : zipWith f as ps ps = zipWith (perterb 3) gs as in as where f a b = let aV = ittcObjectiveValue a bV = ittcObjectiveValue b in if aV>bV then a else b