<s> __author__ = '<STR_LIT>' <EOL> from scipy import array , zeros <EOL> from random import random <EOL> from . maze import MazeTask <EOL> from pybrain . rl . environments . mazes import PolarMaze <EOL> class ShuttleDocking ( MazeTask ) : <EOL> """<STR_LIT>""" <EOL> actions = <NUM_LIT:3> <EOL> observations = <NUM_LIT:5> <EOL> discount = <NUM_LIT> <EOL> mazeclass = PolarMaze <EOL> finalReward = <NUM_LIT:10> <EOL> bangPenalty = - <NUM_LIT:3> <EOL> initPos = [ ( <NUM_LIT:1> , <NUM_LIT:1> ) ] <EOL> topology = array ( [ [ <NUM_LIT:1> ] * <NUM_LIT:7> , <EOL> [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> ] * <NUM_LIT:7> , ] ) <EOL> goal = ( <NUM_LIT:1> , <NUM_LIT:5> ) <EOL> Backup = <NUM_LIT:0> <EOL> Forward = <NUM_LIT:1> <EOL> TurnAround = <NUM_LIT:2> <EOL> def reset ( self ) : <EOL> MazeTask . reset ( self ) <EOL> self . env . perseusDir = <NUM_LIT:1> <EOL> def getObservation ( self ) : <EOL> """<STR_LIT>""" <EOL> res = zeros ( <NUM_LIT:5> ) <EOL> if self . env . perseus == self . env . goal : <EOL> res [ <NUM_LIT:4> ] = <NUM_LIT:1> <EOL> elif self . env . perseus == self . env . initPos [ <NUM_LIT:0> ] : <EOL> res [ <NUM_LIT:0> ] = <NUM_LIT:1> <EOL> elif self . env . perseus [ <NUM_LIT:1> ] == <NUM_LIT:3> : <EOL> if random ( ) > <NUM_LIT> : <EOL> res [ self . env . perseusDir ] = <NUM_LIT:1> <EOL> else : <EOL> res [ ( self . env . perseusDir + <NUM_LIT:2> ) % <NUM_LIT:4> ] = <NUM_LIT:1> <EOL> else : <EOL> res [ ( self . env . perseusDir + <NUM_LIT:2> ) % <NUM_LIT:4> ] = <NUM_LIT:1> <EOL> return res <EOL> def performAction ( self , action ) : <EOL> self . steps += <NUM_LIT:1> <EOL> if action == self . TurnAround : <EOL> self . _turn ( ) <EOL> elif action == self . Forward : <EOL> self . _forward ( ) <EOL> else : <EOL> r = random ( ) <EOL> if self . env . perseus [ <NUM_LIT:1> ] == <NUM_LIT:3> : <EOL> if r < <NUM_LIT:0.1> : <EOL> self . _turn ( ) <EOL> elif r < <NUM_LIT> : <EOL> self . _backup ( ) <EOL> elif ( ( self . env . perseus [ <NUM_LIT:1> ] == <NUM_LIT:2> and self . env . perseusDir == <NUM_LIT:3> ) or <EOL> ( self . env . perseus [ <NUM_LIT:1> ] == <NUM_LIT:4> and self . env . perseusDir == <NUM_LIT:1> ) ) : <EOL> if r < <NUM_LIT> : <EOL> self . _turn ( ) <EOL> elif r < <NUM_LIT> : <EOL> self . _backup ( ) <EOL> else : <EOL> if r < <NUM_LIT> : <EOL> self . _backup ( ) <EOL> def _backup ( self ) : <EOL> self . env . performAction ( PolarMaze . TurnAround ) <EOL> self . env . performAction ( PolarMaze . Forward ) <EOL> self . env . performAction ( PolarMaze . TurnAround ) <EOL> def _turn ( self ) : <EOL> self . env . performAction ( PolarMaze . TurnAround ) <EOL> def _forward ( self ) : <EOL> old = self . env . perseus <EOL> self . env . performAction ( PolarMaze . TurnAround ) <EOL> if self . env . perseus == self . env . goal or self . env . perseus == self . env . initPos [ <NUM_LIT:0> ] : <EOL> self . env . perseus = old <EOL> self . env . bang = True </s>
