Source code for coopihc.interactiontask.ExampleTask

"""
This module provides access to an example subclass of
the InteractionTask class.
"""


import numpy
from coopihc.base.elements import discrete_array_element, array_element, cat_element
from coopihc.base.elements import discrete_array_element
from coopihc.interactiontask.InteractionTask import InteractionTask


[docs]class ExampleTask(InteractionTask): """ExampleTask An example algebraic task which a single task state 'x', which finishes when x = 4. """ def __init__(self, *args, **kwargs): # Call super().__init__() beofre anything else, which initializes some useful attributes, including a State (self.state) for the task super().__init__(*args, **kwargs) # Describe the state. Here it is a single item which takes value in [-4, -3, ..., 3, 4]. The StateElement has out_of_bounds_mode = clip, which means that values outside the range will automatically be clipped to fit the space. self.state["x"] = discrete_array_element( init=0, low=-1, high=4, out_of_bounds_mode="clip" )
[docs] def reset(self, dic=None): # Always start with state 'x' at 0 self.state["x"] = 0 return
[docs] def on_user_action(self, *args, **kwargs): # Modify the state in place, adding the user action is_done = False # self.state["x"] = self.state["x"] + self.user_action self.state["x"] += self.user_action # Stopping condition, return is_done boolean floag if self.state["x"] == 4: is_done = True reward = -1 return self.state, reward, is_done
[docs] def on_assistant_action(self, *args, **kwargs): is_done = False # Modify the state in place, adding the assistant action self.state["x"] += self.assistant_action # Stopping condition, return is_done boolean floag if self.state["x"] == 4: is_done = True reward = -1 return self.state, reward, is_done
[docs]class CoordinatedTask(InteractionTask): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.state["x"] = discrete_array_element(init=0, low=0, high=9)
[docs] def reset(self, dic=None): self.state["x"] = 0 return
[docs] def on_user_action(self, *args, **kwargs): is_done = False if self.state["x"] == 9: is_done = True if self.round_number == 100: is_done = True reward = -1 return self.state, reward, is_done
[docs] def on_assistant_action(self, *args, **kwargs): is_done = False if self.user_action == self.assistant_action: self.state["x"] += 1 reward = -1 return self.state, reward, is_done