mirror of
https://github.com/vale981/ray
synced 2025-03-06 10:31:39 -05:00
39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
from typing import Tuple
|
|
|
|
from ray.rllib.policy.policy import PolicySpec
|
|
from ray.rllib.policy.sample_batch import DEFAULT_POLICY_ID
|
|
from ray.rllib.utils.typing import MultiAgentPolicyConfigDict, \
|
|
PartialTrainerConfigDict
|
|
|
|
|
|
def check_multi_agent(config: PartialTrainerConfigDict) -> \
|
|
Tuple[MultiAgentPolicyConfigDict, bool]:
|
|
"""Checks, whether a (partial) config defines a multi-agent setup.
|
|
|
|
Args:
|
|
config (PartialTrainerConfigDict): The user/Trainer/Policy config
|
|
to check for multi-agent.
|
|
|
|
Returns:
|
|
The resulting (all fixed) multi-agent policy dict and whether we
|
|
have a multi-agent setup or not.
|
|
"""
|
|
multiagent_config = config["multiagent"]
|
|
policies = multiagent_config.get("policies")
|
|
|
|
# Nothing specified in config dict -> Assume simple single agent setup
|
|
# with DEFAULT_POLICY_ID as only policy.
|
|
if not policies:
|
|
policies = {DEFAULT_POLICY_ID}
|
|
# Policies given as set (of PolicyIDs) -> Setup each policy automatically
|
|
# via empty PolicySpec (will make RLlib infer obs- and action spaces
|
|
# as well as the Policy's class).
|
|
if isinstance(policies, set):
|
|
policies = multiagent_config["policies"] = {
|
|
pid: PolicySpec()
|
|
for pid in policies
|
|
}
|
|
# Is this a multi-agent setup? True, iff DEFAULT_POLICY_ID is only
|
|
# PolicyID found in policies dict.
|
|
is_multiagent = len(policies) > 1 or DEFAULT_POLICY_ID not in policies
|
|
return policies, is_multiagent
|