-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMiniMax.hs
More file actions
23 lines (17 loc) · 709 Bytes
/
Copy pathMiniMax.hs
File metadata and controls
23 lines (17 loc) · 709 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
module MiniMax where
import Data.List.Extras.Argmax (argmax)
class MiniMax s a | s -> a where
isTerminal :: s -> Bool
utility :: (Num v, Ord v) => s -> v
successors :: s -> [(a, s)]
decision :: (MiniMax s a) => s -> a
decision state = fst $ argmax (minValue . snd) (successors state)
minValue :: (MiniMax s a, Num v, Ord v) => s -> v
minValue state
| isTerminal state = utility state
| otherwise = minimum $ map (maxValue . snd) (successors state)
maxValue :: (MiniMax s a, Num v, Ord v) => s -> v
maxValue state
| isTerminal state = utility state
| otherwise = maximum $ map (minValue . snd) (successors state)