Search Unity

Question Is it possible to have an Agent entirely driven by Actuators in mlagents 2.0.1?

Discussion in 'ML-Agents' started by MaxEdOwlcat, Mar 28, 2023.

  1. MaxEdOwlcat

    MaxEdOwlcat

    Joined:
    Nov 26, 2019
    Posts:
    8
    I would very much like to separate my action code from Agent code, so I read the docs, and decided to implement all actions via Actuators. That leaves my Agent with 0 branches and 0 action. However, I'm getting spammed with error "Invalid Action Masking : All the actions of branch 0 are masked.", because the Agent have no actions, but still has m_VectorActuator, and the mask for it. That the mask is of size 0 is not checked anywhere. As far as I see, there is no way to work around this issue for now, aside from modifying the package code (there is even a TODO in Agent's code for this issue), but maybe I'm missing something?

    Also, I have a feature request, which I probably should submit on Github, but I'd like to see if there is any support for it. I need exclusive action branches. E.g. I have 3 actuators: "end turn" actuator, "move unit" actuator and "fire at enemy" actuator. The Agent can only perform one of those actions at a time, but there is no way to specify that for Unity ML: each actuator automatically gets its own branch, and all branches are concurrent. I worked around this by creating my own MultiActuator class which aggregates my three real actuators into a single actuator (from the framework's point of view), and then calls one of them in its OnActionsReceived, doing a lookup by action index. This is OK solution, but I wonder if it can be implemented inside the package itself, as I see it as often necessary. But maybe I'm taking a wrong approach here?