Ver código fonte

add debug info to ai

master
flavis 6 anos atrás
pai
commit
c9eb1b5bc9
1 arquivos alterados com 12 adições e 4 exclusões
  1. +12
    -4
      src/Skat/AI/Rulebased.hs

+ 12
- 4
src/Skat/AI/Rulebased.hs Ver arquivo

@@ -250,7 +250,7 @@ chooseStatistic = do
3 -> 3
-- simulate only partially
4 -> 3
5 -> 2
5 -> 3
6 -> 2
7 -> 1
8 -> 1
@@ -277,6 +277,7 @@ chooseStatistic = do
limit = if depth == 1 && length table == 2
then 1
else min 10000 $ realDisNo `div` 2
liftIO $ putStrLn $ "players hand" ++ show handCards
liftIO $ putStrLn $ "possible distrs without simp " ++ show realDisNo
liftIO $ putStrLn $ "possible distrs " ++ show reducedDisNo
vals <- M.toList <$> foldWithLimit limit runOnPiles M.empty piless
@@ -307,6 +308,7 @@ chooseOpen = do
piles <- showPiles
hand <- gets getHand
let myCards = handCards hand piles
liftIO $ putStrLn $ show hand ++ " chooses from " ++ show myCards
possible <- filterM (P.isAllowed myCards) myCards
case length myCards of
0 -> do
@@ -329,6 +331,7 @@ chooseSimulating = do
results <- mapM simulate cs
let both = zip results cs
best = maximumBy (comparing fst) both
liftIO $ putStrLn $ "results " ++ show both
return $ snd best

simulate :: (MonadState AIEnv m, MonadPlayerOpen m)
@@ -341,6 +344,7 @@ simulate card = do
myTeam <- gets getTeam
myHand <- gets getHand
depth <- gets simulationDepth
liftIO $ putStrLn $ "simulate: " ++ show myHand ++ " plays " ++ show card
let newDepth = depth - 1
-- create a virtual env with 3 ai players
ps = Players
@@ -364,7 +368,8 @@ predictValue (own, others) = do
piles <- showPiles
let cs = handCards hand piles
pot <- potential cs
return $ own + pot
--return $ own + pot
return (own-others)

potential :: (MonadState AIEnv m, MonadPlayerOpen m)
=> [Card] -> m Int
@@ -383,7 +388,7 @@ position card = do
let effCol = effectiveColour tr card
l = M.toList guess
cs = filterMap ((==effCol) . effectiveColour tr . fst) fst l
csInd = zip [0..] cs
csInd = zip [0..] (reverse cs)
Just (pos, _) = find ((== card) . snd) csInd
return pos

@@ -401,8 +406,11 @@ chooseLead :: (MonadState AIEnv m, MonadPlayer m) => m Card
chooseLead = do
cards <- gets myHand
possible <- filterM (P.isAllowed cards) cards
liftIO $ putStrLn $ "choosing lead from " ++ show possible
pots <- mapM leadPotential possible
return $ snd $ maximumBy (comparing fst) (zip pots possible)
let ps = zip pots possible
liftIO $ putStrLn $ "lead potential of cards " ++ show ps
return $ snd $ maximumBy (comparing fst) ps

mkAIEnv :: Team -> Hand -> Int -> AIEnv
mkAIEnv tm h depth = AIEnv tm h [] [] [] newGuess depth


Carregando…
Cancelar
Salvar