diff --git a/environments/factory/__init__.py b/environments/factory/__init__.py index c73b2d7..edde920 100644 --- a/environments/factory/__init__.py +++ b/environments/factory/__init__.py @@ -1,27 +1,20 @@ -def rooms(n_agents=1): +def make(env_str, n_agents=1, pomdp_r=2, max_steps=400): + import yaml + from pathlib import Path from environments.factory.factory_dirt_item import DirtItemFactory from environments.factory.factory_item import ItemFactory, ItemProperties from environments.factory.factory_dirt import DirtProperties, DirtFactory from environments.utility_classes import MovementProperties, ObservationProperties, AgentRenderOptions - obs_props = ObservationProperties(render_agents=AgentRenderOptions.NOT, - omit_agent_self=True, - additional_agent_placeholder=None, - frames_to_stack=0, - pomdp_r=2 - ) - move_props = MovementProperties(allow_diagonal_movement=True, - allow_square_movement=True, - allow_no_op=False) - dirt_props = DirtProperties(initial_dirt_ratio=0.35, initial_dirt_spawn_r_var=0.1, - clean_amount=0.34, - max_spawn_amount=0.1, max_global_amount=20, - max_local_amount=1, spawn_frequency=0, max_spawn_ratio=0.05, - dirt_smear_amount=0.0, agent_can_interact=True) - factory_kwargs = dict(n_agents=n_agents, max_steps=400, parse_doors=True, - level_name='rooms', record_episodes=False, doors_have_area=False, - verbose=False, - mv_prop=move_props, - obs_prop=obs_props + with (Path(__file__).parent / 'levels' / 'parameters' / f'{env_str}.yaml').open('r') as stream: + dictionary = yaml.load(stream, Loader=yaml.FullLoader) + + obs_props = ObservationProperties(render_agents=AgentRenderOptions.COMBINED, frames_to_stack=0, pomdp_r=pomdp_r) + + factory_kwargs = dict(n_agents=n_agents, max_steps=max_steps, obs_prop=obs_props, + mv_prop=MovementProperties(**dictionary['movement_props']), + dirt_prop=DirtProperties(**dictionary['dirt_props']), + record_episodes=False, verbose=False, **dictionary['factory_props'] ) - return DirtFactory(dirt_props=dirt_props, **factory_kwargs) + + return DirtFactory(**factory_kwargs) diff --git a/environments/factory/levels/parameters/DirtyFactory-v0.yaml b/environments/factory/levels/parameters/DirtyFactory-v0.yaml new file mode 100644 index 0000000..4bd0f2a --- /dev/null +++ b/environments/factory/levels/parameters/DirtyFactory-v0.yaml @@ -0,0 +1,19 @@ +movement_props: + allow_diagonal_movement: True + allow_square_movement: True + allow_no_op: False +dirt_props: + initial_dirt_ratio: 0.35 + initial_dirt_spawn_r_var : 0.1 + clean_amount: 0.34 + max_spawn_amount: 0.1 + max_global_amount: 20 + max_local_amount: 1 + spawn_frequency: 0 + max_spawn_ratio: 0.05 + dirt_smear_amount: 0.0 + agent_can_interact: True +factory_props: + parse_doors: True + level_name: "rooms" + doors_have_area: False diff --git a/studies/sat_mad.py b/studies/sat_mad.py index 29f9ccd..9eb270d 100644 --- a/studies/sat_mad.py +++ b/studies/sat_mad.py @@ -1,11 +1,12 @@ -from environments.factory import rooms +from environments.factory import make import random from gym.wrappers import FrameStack -env = rooms(n_agents=2) +n_agents = 4 +env = make('DirtyFactory-v0', n_agents=n_agents) env = FrameStack(env, num_stack=3) state, *_ = env.reset() for i in range(1000): - state, *_ = env.step([random.randint(0, 9), random.randint(0, 9)]) + state, *_ = env.step([env.unwrapped.action_space.sample() for _ in range(n_agents)]) env.render() \ No newline at end of file