-- | Library of AI Players module AI (aiPlayers) where import Board import AI.Utils import AI.Minimax import AI.Eval -- import Debug.Trace -- all AI players; ply depth >1 do not necessarily play better! aiPlayers :: [(String,AI)] aiPlayers = ("level0",basic) : [("level"++show n, ply n) | n<-[1,2,3]] -- basic AI: material evaluation, depth 1 basic = AI { name = "Level 0" , description = "Minimax alpha-beta depth 2 (eval0)" , strategy = negamaxStrategy 2 eval0 } -- better AI, parameterized by ply depth ply :: Int -> AI ply d = AI { name = "Level " ++ show d , description = "Minimaxing alpha-beta depth " ++ show (2*d) ++ " (eval1)" , strategy = withStacks $ \n -> -- increase depth inversely linear with number of stacks let d' = roundup (((60-n)*2*d)`div`60 + 1) in negamaxStrategy d' eval1 } where roundup n = max 2 n -- + n`mod`2 {- level2 = AI { name = "Level 2" , description = "Minimaxing alpha-beta depth 2-4 (eval1)" , strategy = (withNPieces $ \numpieces -> if numpieces<30 then minimaxStrategy 4 eval1 else minimaxStrategy 2 eval1 ) } -}