packages feed

rlglue-0.2.2.0: src/RL_Glue/Example/SkeletonAgent.hs

module Main where

import Control.Monad.Trans.Class
import Control.Monad.Trans.State.Lazy
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BSC
import System.Exit
import System.Random

import RL_Glue.Agent
import RL_Glue.Network

main = loadAgent (Agent onInit onStart onStep onEnd onCleanup onMessage) ()

onInit :: BS.ByteString -> StateT () IO ()
onInit taskSpec = return ()

onStart :: Observation -> StateT () IO Action
onStart obs = do
  dir <- lift $ getStdRandom (randomR (0,1))
  return (Action $ RLAbstractType [dir] [] BS.empty)

onStep :: (Reward, Observation) -> StateT () IO Action
onStep (reward, obs) = do
  dir <- lift $ getStdRandom (randomR (0,1))
  return (Action $ RLAbstractType [dir] [] BS.empty)

onEnd :: Reward -> StateT () IO ()
onEnd reward = return ()

onCleanup :: (StateT () IO ())
onCleanup = return ()

onMessage :: BS.ByteString -> StateT () IO BS.ByteString
onMessage msg =
  return $ BSC.pack $ if msg == BSC.pack "what is your name?"
    then "my name is skeleton_agent, Haskell edition!"
    else "I don't know how to respond to your message"