Spaces:
Sleeping
Sleeping
SocialAISchool
/
gym-minigrid
/gym_minigrid
/social_ai_envs
/case_studies_envs
/pointingcasestudyenvs.py
from gym_minigrid.social_ai_envs.socialaiparamenv import SocialAIParamEnv | |
from gym_minigrid.parametric_env import * | |
from gym_minigrid.register import register | |
import inspect, importlib | |
# for used for automatic registration of environments | |
defined_classes = [name for name, _ in inspect.getmembers(importlib.import_module(__name__), inspect.isclass)] | |
class EAsocialInformationSeekingParamEnv(SocialAIParamEnv): | |
def construct_tree(self): | |
tree = ParameterTree() | |
env_type_nd = tree.add_node("Env_type", type="param") | |
# Information seeking | |
inf_seeking_nd = tree.add_node("Information_seeking", parent=env_type_nd, type="value") | |
prag_fr_compl_nd = tree.add_node("Pragmatic_frame_complexity", parent=inf_seeking_nd, type="param") | |
tree.add_node("Eye_contact", parent=prag_fr_compl_nd, type="value") | |
# scaffolding | |
scaffolding_nd = tree.add_node("Scaffolding", parent=inf_seeking_nd, type="param") | |
scaffolding_N_nd = tree.add_node("N", parent=scaffolding_nd, type="value") | |
cue_type_nd = tree.add_node("Cue_type", parent=scaffolding_N_nd, type="param") | |
tree.add_node("Language_Color", parent=cue_type_nd, type="value") | |
tree.add_node("Language_Feedback", parent=cue_type_nd, type="value") | |
tree.add_node("Pointing", parent=cue_type_nd, type="value") | |
problem_nd = tree.add_node("Problem", parent=inf_seeking_nd, type="param") | |
boxes_nd = tree.add_node("Boxes", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=boxes_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=boxes_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
switches_nd = tree.add_node("Switches", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=switches_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=switches_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
generators_nd = tree.add_node("Generators", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=generators_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=generators_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
levers_nd = tree.add_node("Levers", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=levers_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=levers_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
doors_nd = tree.add_node("Doors", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=doors_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=doors_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
marble_nd = tree.add_node("Marble", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=marble_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=marble_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
return tree | |
# Pointing case study | |
# training | |
class EPointingInformationSeekingParamEnv(SocialAIParamEnv): | |
def construct_tree(self): | |
tree = ParameterTree() | |
env_type_nd = tree.add_node("Env_type", type="param") | |
# Information seeking | |
inf_seeking_nd = tree.add_node("Information_seeking", parent=env_type_nd, type="value") | |
prag_fr_compl_nd = tree.add_node("Pragmatic_frame_complexity", parent=inf_seeking_nd, type="param") | |
tree.add_node("Eye_contact", parent=prag_fr_compl_nd, type="value") | |
# scaffolding | |
scaffolding_nd = tree.add_node("Scaffolding", parent=inf_seeking_nd, type="param") | |
scaffolding_N_nd = tree.add_node("N", parent=scaffolding_nd, type="value") | |
cue_type_nd = tree.add_node("Cue_type", parent=scaffolding_N_nd, type="param") | |
# tree.add_node("Language_Color", parent=cue_type_nd, type="value") | |
# tree.add_node("Language_Feedback", parent=cue_type_nd, type="value") | |
tree.add_node("Pointing", parent=cue_type_nd, type="value") | |
problem_nd = tree.add_node("Problem", parent=inf_seeking_nd, type="param") | |
boxes_nd = tree.add_node("Boxes", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=boxes_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=boxes_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
switches_nd = tree.add_node("Switches", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=switches_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=switches_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
generators_nd = tree.add_node("Generators", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=generators_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=generators_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
levers_nd = tree.add_node("Levers", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=levers_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=levers_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
doors_nd = tree.add_node("Doors", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=doors_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=doors_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
marble_nd = tree.add_node("Marble", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=marble_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=marble_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
return tree | |
# testing | |
class EPointingTestingInformationSeekingParamEnv(SocialAIParamEnv): | |
def __init__(self, problem, asocial, **kwargs): | |
self.problem = problem | |
if self.problem not in ["Boxes", "Switches", "Generators", "Levers", "Doors", "Marble"]: | |
raise ValueError(f"Problem {self.problem} undefined.") | |
self.asocial = asocial | |
super(EPointingTestingInformationSeekingParamEnv, self).__init__(**kwargs) | |
def construct_tree(self): | |
tree = ParameterTree() | |
env_type_nd = tree.add_node("Env_type", type="param") | |
# Information seeking | |
inf_seeking_nd = tree.add_node("Information_seeking", parent=env_type_nd, type="value") | |
prag_fr_compl_nd = tree.add_node("Pragmatic_frame_complexity", parent=inf_seeking_nd, type="param") | |
tree.add_node("Eye_contact", parent=prag_fr_compl_nd, type="value") | |
# scaffolding | |
scaffolding_nd = tree.add_node("Scaffolding", parent=inf_seeking_nd, type="param") | |
scaffolding_N_nd = tree.add_node("N", parent=scaffolding_nd, type="value") | |
cue_type_nd = tree.add_node("Cue_type", parent=scaffolding_N_nd, type="param") | |
tree.add_node("Pointing", parent=cue_type_nd, type="value") | |
problem_nd = tree.add_node("Problem", parent=inf_seeking_nd, type="param") | |
boxes_nd = tree.add_node(self.problem, parent=problem_nd, type="value") | |
N = "1" if self.asocial else "2" | |
version_nd = tree.add_node("N", parent=boxes_nd, type="param") | |
tree.add_node(N, parent=version_nd, type="value") | |
peer = "N" if self.asocial else "Y" | |
peer_nd = tree.add_node("Peer", parent=boxes_nd, type="param") | |
tree.add_node(peer, parent=peer_nd, type="value") | |
return tree | |
# Joint Attention | |
# training | |
class JAEPointingInformationSeekingParamEnv(SocialAIParamEnv): | |
def construct_tree(self): | |
tree = ParameterTree() | |
env_type_nd = tree.add_node("Env_type", type="param") | |
# Information seeking | |
inf_seeking_nd = tree.add_node("Information_seeking", parent=env_type_nd, type="value") | |
prag_fr_compl_nd = tree.add_node("Pragmatic_frame_complexity", parent=inf_seeking_nd, type="param") | |
tree.add_node("Eye_contact", parent=prag_fr_compl_nd, type="value") | |
# scaffolding | |
scaffolding_nd = tree.add_node("Scaffolding", parent=inf_seeking_nd, type="param") | |
scaffolding_N_nd = tree.add_node("N", parent=scaffolding_nd, type="value") | |
cue_type_nd = tree.add_node("Cue_type", parent=scaffolding_N_nd, type="param") | |
# tree.add_node("Language_Color", parent=cue_type_nd, type="value") | |
# tree.add_node("Language_Feedback", parent=cue_type_nd, type="value") | |
tree.add_node("Pointing", parent=cue_type_nd, type="value") | |
problem_nd = tree.add_node("Problem", parent=inf_seeking_nd, type="param") | |
boxes_nd = tree.add_node("Boxes", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=boxes_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=boxes_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
switches_nd = tree.add_node("Switches", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=switches_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=switches_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
generators_nd = tree.add_node("Generators", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=generators_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=generators_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
levers_nd = tree.add_node("Levers", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=levers_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=levers_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
doors_nd = tree.add_node("Doors", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=doors_nd, type="param") | |
tree.add_node("2", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=doors_nd, type="param") | |
tree.add_node("Y", parent=peer_nd, type="value") | |
marble_nd = tree.add_node("Marble", parent=problem_nd, type="value") | |
version_nd = tree.add_node("N", parent=marble_nd, type="param") | |
tree.add_node("1", parent=version_nd, type="value") | |
peer_nd = tree.add_node("Peer", parent=marble_nd, type="param") | |
tree.add_node("N", parent=peer_nd, type="value") | |
N_bo_nd = tree.add_node("JA_recursive", parent=inf_seeking_nd, type="param") | |
tree.add_node("Y", parent=N_bo_nd, type="value") | |
return tree | |
# testing | |
class JAEPointingTestingInformationSeekingParamEnv(SocialAIParamEnv): | |
def __init__(self, problem, asocial, **kwargs): | |
self.problem = problem | |
if self.problem not in ["Boxes", "Switches", "Generators", "Levers", "Doors", "Marble"]: | |
raise ValueError(f"Problem {self.problem} undefined.") | |
self.asocial = asocial | |
super(JAEPointingTestingInformationSeekingParamEnv, self).__init__(**kwargs) | |
def construct_tree(self): | |
tree = ParameterTree() | |
env_type_nd = tree.add_node("Env_type", type="param") | |
# Information seeking | |
inf_seeking_nd = tree.add_node("Information_seeking", parent=env_type_nd, type="value") | |
prag_fr_compl_nd = tree.add_node("Pragmatic_frame_complexity", parent=inf_seeking_nd, type="param") | |
tree.add_node("Eye_contact", parent=prag_fr_compl_nd, type="value") | |
# scaffolding | |
scaffolding_nd = tree.add_node("Scaffolding", parent=inf_seeking_nd, type="param") | |
scaffolding_N_nd = tree.add_node("N", parent=scaffolding_nd, type="value") | |
cue_type_nd = tree.add_node("Cue_type", parent=scaffolding_N_nd, type="param") | |
tree.add_node("Pointing", parent=cue_type_nd, type="value") | |
problem_nd = tree.add_node("Problem", parent=inf_seeking_nd, type="param") | |
boxes_nd = tree.add_node(self.problem, parent=problem_nd, type="value") | |
N = "1" if self.asocial else "2" | |
version_nd = tree.add_node("N", parent=boxes_nd, type="param") | |
tree.add_node(N, parent=version_nd, type="value") | |
peer = "N" if self.asocial else "Y" | |
peer_nd = tree.add_node("Peer", parent=boxes_nd, type="param") | |
tree.add_node(peer, parent=peer_nd, type="value") | |
N_bo_nd = tree.add_node("JA_recursive", parent=inf_seeking_nd, type="param") | |
tree.add_node("Y", parent=N_bo_nd, type="value") | |
return tree | |
# automatic registration of environments | |
defined_classes_ = [name for name, _ in inspect.getmembers(importlib.import_module(__name__), inspect.isclass)] | |
envs = list(set(defined_classes_) - set(defined_classes)) | |
assert all([e.endswith("Env") for e in envs]) | |
for env in envs: | |
try: | |
register( | |
id='SocialAI-{}-v1'.format(env), | |
entry_point='gym_minigrid.social_ai_envs:{}'.format(env) | |
) | |
except: | |
print(f"Env : {env} registratoin failed.") | |
exit() | |
# register testing envs | |
problems = ["Boxes", "Switches", "Generators", "Levers", "Doors", "Marble"] | |
for problem in problems: | |
for asocial in [True, False]: | |
if asocial: | |
env_name = f'EPointing{problem}AsocialInformationSeekingParamEnv' | |
else: | |
env_name = f'EPointing{problem}InformationSeekingParamEnv' | |
print("env name:", env_name) | |
register( | |
id='SocialAI-{}-v1'.format(env_name), | |
entry_point='gym_minigrid.social_ai_envs:EPointingTestingInformationSeekingParamEnv', | |
kwargs={ | |
'asocial': asocial, | |
'problem': problem, | |
} | |
) | |
if asocial: | |
env_name = f'JAEPointing{problem}AsocialInformationSeekingParamEnv' | |
else: | |
env_name = f'JAEPointing{problem}InformationSeekingParamEnv' | |
register( | |
id='SocialAI-{}-v1'.format(env_name), | |
entry_point='gym_minigrid.social_ai_envs:JAEPointingTestingInformationSeekingParamEnv', | |
kwargs={ | |
'asocial': asocial, | |
'problem': problem, | |
} | |
) | |
pointing_test_set = [ | |
"SocialAI-EPointingMarbleInformationSeekingParamEnv-v1", | |
] | |
ja_pointing_test_set = [ | |
"SocialAI-JAEPointingMarbleInformationSeekingParamEnv-v1", | |
] | |