-
Notifications
You must be signed in to change notification settings - Fork 42
/
test_magent.py
136 lines (123 loc) · 4.24 KB
/
test_magent.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
#
import pytest
from benchmarl.algorithms import (
algorithm_config_registry,
IppoConfig,
IsacConfig,
MasacConfig,
QmixConfig,
)
from benchmarl.algorithms.common import AlgorithmConfig
from benchmarl.environments import MAgentTask, Task
from benchmarl.experiment import Experiment
from utils import _has_magent2
from utils_experiment import ExperimentUtils
@pytest.mark.skipif(not _has_magent2, reason="magent2 not found")
class TestMagent:
@pytest.mark.parametrize("algo_config", algorithm_config_registry.values())
@pytest.mark.parametrize("task", [MAgentTask.ADVERSARIAL_PURSUIT])
def test_all_algos(
self,
algo_config: AlgorithmConfig,
task: Task,
experiment_config,
cnn_sequence_config,
):
# To not run unsupported algo-task pairs
if not algo_config.supports_discrete_actions():
pytest.skip()
task = task.get_from_yaml()
experiment = Experiment(
algorithm_config=algo_config.get_from_yaml(),
model_config=cnn_sequence_config,
seed=0,
config=experiment_config,
task=task,
)
experiment.run()
@pytest.mark.parametrize("algo_config", [IppoConfig, QmixConfig, IsacConfig])
@pytest.mark.parametrize("task", [MAgentTask.ADVERSARIAL_PURSUIT])
def test_gnn(
self,
algo_config: AlgorithmConfig,
task: Task,
experiment_config,
cnn_gnn_sequence_config,
):
task = task.get_from_yaml()
experiment = Experiment(
algorithm_config=algo_config.get_from_yaml(),
model_config=cnn_gnn_sequence_config,
critic_model_config=cnn_gnn_sequence_config,
seed=0,
config=experiment_config,
task=task,
)
experiment.run()
@pytest.mark.parametrize("algo_config", [IppoConfig, QmixConfig, MasacConfig])
@pytest.mark.parametrize("task", [MAgentTask.ADVERSARIAL_PURSUIT])
def test_lstm(
self,
algo_config: AlgorithmConfig,
task: Task,
experiment_config,
cnn_lstm_sequence_config,
):
algo_config = algo_config.get_from_yaml()
if algo_config.has_critic():
algo_config.share_param_critic = False
experiment_config.share_policy_params = False
task = task.get_from_yaml()
experiment = Experiment(
algorithm_config=algo_config,
model_config=cnn_lstm_sequence_config,
critic_model_config=cnn_lstm_sequence_config,
seed=0,
config=experiment_config,
task=task,
)
experiment.run()
@pytest.mark.parametrize("algo_config", [IppoConfig])
@pytest.mark.parametrize("task", [MAgentTask.ADVERSARIAL_PURSUIT])
def test_reloading_trainer(
self,
algo_config: AlgorithmConfig,
task: Task,
experiment_config,
cnn_sequence_config,
):
# To not run unsupported algo-task pairs
if not algo_config.supports_discrete_actions():
pytest.skip()
algo_config = algo_config.get_from_yaml()
ExperimentUtils.check_experiment_loading(
algo_config=algo_config,
model_config=cnn_sequence_config,
experiment_config=experiment_config,
task=task.get_from_yaml(),
)
@pytest.mark.parametrize("algo_config", [QmixConfig, IppoConfig, MasacConfig])
@pytest.mark.parametrize("task", [MAgentTask.ADVERSARIAL_PURSUIT])
@pytest.mark.parametrize("share_params", [True, False])
def test_share_policy_params(
self,
algo_config: AlgorithmConfig,
task: Task,
share_params,
experiment_config,
cnn_sequence_config,
):
experiment_config.share_policy_params = share_params
task = task.get_from_yaml()
experiment = Experiment(
algorithm_config=algo_config.get_from_yaml(),
model_config=cnn_sequence_config,
seed=0,
config=experiment_config,
task=task,
)
experiment.run()