danijar

Behavior Agent Implementation

Aug 11th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.38 KB | None | 0 0
  1. class Behavior:
  2.  
  3.     def observe(self, x):
  4.         """
  5.        Receive an observation from the previous behavior. Return
  6.        a or raise x to next behavior.
  7.        """
  8.         raise NotImplementedError
  9.  
  10.     def perform(self, a):
  11.         """
  12.        Get back an action from the next behavior. Return a or
  13.        raise x to next behavior.
  14.        """
  15.         raise NotImplementedError
  16.  
  17.  
  18. class Agent(Behavior):
  19.  
  20.     def __init__(self):
  21.         self._behaviors = []
  22.  
  23.     def add(self, behavior):
  24.         self._behaviors.add(behavior)
  25.  
  26.     def observe(self, x):
  27.         return self._simulate(0, x, None)
  28.    
  29.     def perform(self, a):
  30.         return self._simulate(len(self._behaviors) - 1, None, a)
  31.    
  32.     def _simulate(self, level, x, a):
  33.         while True:
  34.             if level < 0:
  35.                 return a
  36.             if level >= len(self._behaviors):
  37.                 raise x
  38.             level, x, a = self._step(level, x, a)
  39.    
  40.     def _step(self, level, x, a):
  41.         assert (x is None) != (a is None)
  42.         behavior = self._behaviors[level]
  43.         try:
  44.             if x is not None:
  45.                 a = behavior.observe(x)
  46.             elif a is not None:
  47.                 a = behavior.perform(a)
  48.             x = None
  49.             level -= 1
  50.         except Observation as x:
  51.             a = None
  52.             level += 1
  53.         return level, x, a
Add Comment
Please, Sign In to add comment