factorio-learning-environment icon indicating copy to clipboard operation
factorio-learning-environment copied to clipboard

Create an agent Team abstraction and example

Open kantneel opened this issue 7 months ago • 2 comments

A Team is a recursive abstraction for containing one or more agents together. The agents inside teams need not be tied one-to-one to actual characters in the game. It could be that a team has agents which cooperatively yield to one another for control over a single game character, for example the BacktrackingSystem can be a two-agent Team in charge of a single character. Since teams are recursive, you could have a Team of two BacktrackingSystem teams working together, each controlling one character each.

Tasks can be given to individual agents but also to teams. Agents can be optionally made aware of tasks given to teams higher up than them in the team hierarchy. If agents are not given individual tasks then they can simply inherit the task given to the team that they're in. This will make task_config objects more organized since it will specify things at a team level, and a run config can have any number of agents organized in any way to be a single team. This will then also require separating out team specifications into separate team config files which can be referenced in the run configs.

kantneel avatar May 24 '25 03:05 kantneel

Could we use forces to manage teams? I would prefer avoiding developing our own abstractions if there exists similar abstractions in the game.

JackHopkins avatar May 27 '25 09:05 JackHopkins

On the factorio API side yes we would definitely use forces. But on the python/agent side I would like to make a Team abstraction specifically to be recursive. Teams can be nested (like human organizations) but the LuaForce class in factorio doesn't support that. An agent can be placed inside of anywhere in a nested Team instance but ultimately will only be identified with a single factorio force.

kantneel avatar May 27 '25 13:05 kantneel