marl-factory-grid/README.md
2023-06-19 13:49:21 +02:00

116 lines
3.3 KiB
Markdown

# EDYS
Tackling emergent dysfunctions (EDYs) in cooperation with Fraunhofer-IKS
## Setup
Just install this environment by `pip install marl-factory-grid`.
## First Steps
### Quickstart
Most of the env. objects (entites, rules and assets) can be loaded automatically.
Just define what your environment needs in a *yaml*-configfile like:
<details><summary>Example ConfigFile</summary>
General:
level_name: rooms
env_seed: 69
verbose: !!bool False
pomdp_r: 5
individual_rewards: !!bool True
Entities:
Defaults: {}
Doors:
closed_on_init: True
auto_close_interval: 10
indicate_area: False
Destinations: {}
Agents:
Wolfgang:
Actions:
- Move8
- Noop
- DoorUse
- ItemAction
Observations:
- All
- Placeholder
- Walls
- Items
- Placeholder
- Doors
- Doors
Armin:
Actions:
- Move4
- ItemAction
- DoorUse
Observations:
- Combined:
- Agent['Wolfgang']
- Walls
- Doors
- Items
Rules:
Defaults: {}
Collision:
done_at_collisions: !!bool True
ItemRespawn:
spawn_freq: 5
DoorAutoClose: {}
Assets:
- Defaults
- Items
- Doors
</details>
Have a look in [\quickstart](./quickstart) for further configuration examples.
### Make it your own
#### Levels
Varying levels are created by defining Walls, Floor or Doors in *.txt*-files (see [./environment/levels](./environment/levels) for examples).
Define which *level* to use in your *configfile* as:
```yaml
General:
level_name: rooms # 'double', 'large', 'simple', ...
```
... or create your own , maybe with the help of [asciiflow.com](https://asciiflow.com/#/).
Be sure to use '#' as Walls, '-' as free (walkable) Floor-Tiles, 'D' for Doors.
Custom Entites (define you own) may bring their own "Symbol"
#### Entites
Entites are either [Objects](./environment/entity/object.py) for tracking stats or env. [Entity](./environment/entity/entity.py) which can interact.
Abstract Entities are provided.
#### Groups
[Groups](./environment/groups/objects.py) are entity Sets that provide administrative access to all group members.
All [Entites](./environment/entity/global_entities.py) are available at runtime as EnvState property.
#### Rules
[Rules](./environment/entity/object.py) define how the environment behaves on micro-scale.
Each of the hookes ('on_init', 'pre-step', 'on_step', 'post_step', 'on_done')
provide env-access to implement customn logic, calculate rewards, or gather information.
[Results](./environment/entity/object.py) provide a way to return 'rule' evaluations such as rewards and state reports
back to the environment.
#### Assets
Make sure to bring your own assets for each Entity, that is living in the Gridworld, the 'Renderer' relies on it.
PNG-files (transparent background) of square aspect-ratio should do the job, in general.
<div style="margin:0 auto;">
<img src=".\environment\assets\wall.png" width="10%"> | <img src=".\environment\assets\agent\agent.png" width="10%">
</div>