import palaestrai
If the above line works without error, at least the import is done. Thats a first good starter. Now let's import the rest…
import os
import pprint
import tempfile
from pathlib import Path
Setting the Runtime Configuration¶
Usually, this is not necessary like this. But because we're running a self-contained test, we want to have a new, fresh database where we want to put it. Which is, in a temporary directory.
store_dir = tempfile.TemporaryDirectory()
store_dir
<TemporaryDirectory '/tmp/tmpcgiqtimy'>
We're now going to change palaestrAI's runtime configuration to point to the new directory.
from palaestrai.core import RuntimeConfig
runtime_config = RuntimeConfig()
runtime_config.reset()
runtime_config.load(
{"store_uri": "sqlite:///%s/palaestrai.db" % store_dir.name}
)
pprint.pprint(runtime_config.to_dict())
{'data_path': './_outputs', 'executor_bus_port': 4242, 'logger_port': 4243, 'logging': {'filters': {'debug_filter': {'()': 'palaestrai.core.runtime_config.DebugLogFilter'}}, 'formatters': {'debug': {'format': '%(asctime)s ' '%(name)s[%(process)d]: ' '%(levelname)s - %(message)s ' '(%(module)s.%(funcName)s in ' '%(filename)s:%(lineno)d)'}, 'simple': {'format': '%(asctime)s ' '%(name)s[%(process)d]: ' '%(levelname)s - ' '%(message)s'}}, 'handlers': {'console': {'class': 'logging.StreamHandler', 'formatter': 'simple', 'level': 'INFO', 'stream': 'ext://sys.stdout'}, 'console_debug': {'class': 'logging.StreamHandler', 'filters': ['debug_filter'], 'formatter': 'debug', 'level': 'DEBUG', 'stream': 'ext://sys.stdout'}}, 'loggers': {'arl': {'level': 'DEBUG'}, 'cohdarl': {'level': 'DEBUG'}, 'palaestrai.agent': {'level': 'ERROR'}, 'palaestrai.agent.agent_conductor': {'level': 'ERROR'}, 'palaestrai.agent.brain': {'level': 'ERROR'}, 'palaestrai.agent.brain.SACBrain': {'level': 'DEBUG'}, 'palaestrai.agent.memory': {'level': 'ERROR'}, 'palaestrai.agent.muscle': {'level': 'ERROR'}, 'palaestrai.agent.objective': {'level': 'ERROR'}, 'palaestrai.core': {'level': 'ERROR'}, 'palaestrai.environment': {'level': 'ERROR'}, 'palaestrai.environment.TicTacToe': {'level': 'DEBUG'}, 'palaestrai.experiment': {'level': 'INFO'}, 'palaestrai.experiment.executor': {'level': 'INFO'}, 'palaestrai.simulation': {'level': 'INFO'}, 'palaestrai.store': {'level': 'ERROR'}, 'palaestrai.types': {'level': 'ERROR'}, 'palaestrai.util': {'level': 'ERROR'}, 'palaestrai.visualization': {'level': 'ERROR'}, 'sqlalchemy.engine': {'level': 'ERROR'}}, 'root': {'handlers': ['console', 'console_debug'], 'level': 'ERROR'}, 'version': 1}, 'major_domo_client_retries': 3, 'major_domo_client_timeout': 300000, 'profile': False, 'public_bind': False, 'store_buffer_size': 20, 'store_uri': 'sqlite:////tmp/tmpcgiqtimy/palaestrai.db', 'time_series_store_uri': 'influx+localhost:8086'}
Create the Database¶
Next, we create the database at the given URI. It will complain that we're not using TimescaleDB, which is okay.
from palaestrai.store.database_util import setup_database
setup_database(runtime_config.store_uri)
Importing from 'midas.tools.palaestrai' is deprecated! Use 'midas_palaestrai' instead!
Importing from 'midas.tools.palaestrai' is deprecated! Use 'midas_palaestrai' instead!
Could not create extension timescaledb and create hypertables: (sqlite3.OperationalError) near "EXTENSION": syntax error [SQL: CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;] (Background on this error at: https://sqlalche.me/e/14/e3q8). Your database setup might lead to noticeable slowdowns with larger experiment runs. Please upgrade to PostgreSQL with TimescaleDB for the best performance.
assert Path("%s/palaestrai.db" % store_dir.name).is_file()
Run Experiment¶
In this part, we load our Classic ARL experiment and run it.
experiment_file_path = (
Path().absolute() / ".." / "fixtures" / "Classic-ARL-Experiment_run-0.yml"
)
assert experiment_file_path.is_file()
os.chdir("../../") # Needed because of palaestrAI shenanigans
rc = palaestrai.execute(str(experiment_file_path))
assert rc[1].value == 4
rc
____ _ _ / \ (_) | ____/ \ _ __ ___ ___ ___ __ _ _| | __ / \ / | '_ ` _ \ / _ \/ __|/ _` | | |/ / / \____/ | | | | | | (_) \__ \ (_| | | < \ / \ |_| |_| |_|\___/|___/\__,_|_|_|\_\ \____/ \____ / \ / \ mosaik: 3.4.0 / \____/ \ API: 3.0.13 \ / \ / Python: 3.12.9 \____/ \____/ OS: Linux-6.13.4-1-default-x86_64-with-glibc2.40 \ / Docs: https://mosaik.readthedocs.io/en/3.4.0/ \____/ Get in touch: https://github.com/orgs/OFFIS-mosaik/discussions 2025-03-18 23:57:09.147 | INFO | mosaik.async_scenario:start:361 - Starting "MidasStore" as "MidasStore-0" ... 2025-03-18 23:57:09.152 | INFO | mosaik.async_scenario:start:361 - Starting "Powergrid" as "Powergrid-0" ...
2025-03-18 23:57:15.040 | INFO | mosaik.async_scenario:start:361 - Starting "ARLSyncSimulator" as "ARLSyncSimulator-0" ...
0%| | 0/11 [00:00<?, ?steps/s]
9%|███▋ | 1/11 [00:00<00:04, 2.19steps/s]
27%|██████████▉ | 3/11 [00:31<01:33, 11.69s/steps]
36%|██████████████▌ | 4/11 [00:32<00:55, 7.89s/steps]
45%|██████████████████▏ | 5/11 [00:32<00:32, 5.37s/steps] 64%|█████████████████████████▍ | 7/11 [00:32<00:11, 2.79s/steps]
73%|█████████████████████████████ | 8/11 [00:33<00:06, 2.13s/steps] 82%|████████████████████████████████▋ | 9/11 [00:33<00:03, 1.60s/steps]
91%|███████████████████████████████████▍ | 10/11 [00:33<00:01, 1.23s/steps]
100%|███████████████████████████████████████| 11/11 [00:34<00:00, 1.07s/steps] 100%|███████████████████████████████████████| 11/11 [00:34<00:00, 3.11s/steps]
____ _ _ / \ (_) | ____/ \ _ __ ___ ___ ___ __ _ _| | __ / \ / | '_ ` _ \ / _ \/ __|/ _` | | |/ / / \____/ | | | | | | (_) \__ \ (_| | | < \ / \ |_| |_| |_|\___/|___/\__,_|_|_|\_\ \____/ \____ / \ / \ mosaik: 3.4.0 / \____/ \ API: 3.0.13 \ / \ / Python: 3.12.9 \____/ \____/ OS: Linux-6.13.4-1-default-x86_64-with-glibc2.40 \ / Docs: https://mosaik.readthedocs.io/en/3.4.0/ \____/ Get in touch: https://github.com/orgs/OFFIS-mosaik/discussions 2025-03-18 23:58:42.826 | INFO | mosaik.async_scenario:start:361 - Starting "MidasStore" as "MidasStore-0" ... 2025-03-18 23:58:42.829 | INFO | mosaik.async_scenario:start:361 - Starting "Powergrid" as "Powergrid-0" ...
2025-03-18 23:58:51.771 | INFO | mosaik.async_scenario:start:361 - Starting "ARLSyncSimulator" as "ARLSyncSimulator-0" ...
0%| | 0/11 [00:00<?, ?steps/s] 9%|███▋ | 1/11 [00:00<00:01, 9.18steps/s]
27%|██████████▉ | 3/11 [00:36<01:48, 13.60s/steps] 36%|██████████████▌ | 4/11 [00:36<01:02, 8.96s/steps]
45%|██████████████████▏ | 5/11 [00:37<00:36, 6.04s/steps]
55%|█████████████████████▊ | 6/11 [00:37<00:21, 4.29s/steps] 64%|█████████████████████████▍ | 7/11 [00:37<00:11, 2.98s/steps]
73%|█████████████████████████████ | 8/11 [00:37<00:06, 2.12s/steps] 82%|████████████████████████████████▋ | 9/11 [00:38<00:03, 1.50s/steps]
91%|███████████████████████████████████▍ | 10/11 [00:38<00:01, 1.11s/steps]
100%|███████████████████████████████████████| 11/11 [00:38<00:00, 1.17steps/s] 100%|███████████████████████████████████████| 11/11 [00:38<00:00, 3.51s/steps]
(['Classic-ARL-Experiment-0'], <ExecutorState.EXITED: 4>)
If you see something like ('Yo-ho, a dummy experiment run for me!', <ExecutorState.EXITED: 4>)
as output of the previous line, then congratulations, everything went well! Now onwards to the final step…
Verify Data from the Store¶
Now that an experiment has been run, there should be something in the store. Note that we don't check whether something meaningful is in the store, only that there is something in the store.
from sqlalchemy import select
import palaestrai.store
import palaestrai.store.database_model as dbm
dbh = palaestrai.store.Session()
q = select(dbm.Experiment)
str(q)
'SELECT experiments.document, experiments.document_json, experiments.id, experiments.name \nFROM experiments'
experiment = dbh.execute(q).first()[dbm.Experiment]
experiment.name
'Dummy experiment record for experiment run Classic-ARL-Experiment-0'
our_experiment_run = experiment.experiment_runs[0]
str(our_experiment_run)
'<ExperimentRun(id=1, uid="Classic-ARL-Experiment-0", experiment_id=1, document={\'uid\': \'Classic-ARL-Experiment-0\', \'experiment_uid\': \'Dummy experiment record for experiment run Classic-ARL-Experiment-0\', \'seed\': 312184, \'version\': \'3.5.4\', \'schedule\': [{\'phase_ac_training\': {\'agents\': [{\'name\': \'Gandalf SAC (autocurriculum-training)\', \'actuators\': [\'midas_powergrid.Powergrid-0.0-load-0-1.p_mw\', \'midas_powergrid.Powergrid-0.0-load-0-1.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-1-3.p_mw\', \'midas_powergrid.Powergrid-0.0-load-1-3.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-10-12.p_mw\', \'midas_powergrid.Powergrid-0.0-load-10-12.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-11-13.p_mw\', \'midas_powergrid.Powergrid-0.0-load-11-13.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-12-14.p_mw\', \'midas_powergrid.Powergrid-0.0-load-12-14.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-2-4.p_mw\', \'midas_powergrid.Powergrid-0.0-load-2-4.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-3-5.p_mw\', \'midas_powergrid.Powergrid-0.0-load-3-5.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-0-1.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-0-1.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-1-3.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-1-3.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-10-12.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-10-12.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-11-13.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-11-13.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-12-14.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-12-14.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-2-4.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-2-4.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-3-5.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-3-5.q_mvar\'], \'brain\': {\'name\': \'harl.sac.brain:SACBrain\', \'params\': {\'batch_size\': 2, \'fc_dims\': [8, 8], \'gamma\': 0.98, \'lr\': 0.0003, \'replay_size\': 1000000, \'update_after\': 4, \'update_every\': 1}}, \'muscle\': {\'name\': \'harl.sac.muscle:SACMuscle\', \'params\': {\'start_steps\': 4}}, \'objective\': {\'name\': \'midas_palaestrai:VoltageDefenderObjective\', \'params\': {}}, \'sensors\': [\'midas_powergrid.Powergrid-0.0-bus-1.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-1.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-10.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-10.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-11.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-11.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-12.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-12.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-13.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-13.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-14.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-14.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-2.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-2.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-3.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-3.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-4.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-4.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-5.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-5.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-6.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-6.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-7.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-7.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-8.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-8.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-9.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-9.va_degree\', \'midas_powergrid.Powergrid-0.0-line-0.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-0.in_service\', \'midas_powergrid.Powergrid-0.0-line-1.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-1.in_service\', \'midas_powergrid.Powergrid-0.0-line-10.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-10.in_service\', \'midas_powergrid.Powergrid-0.0-line-11.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-11.in_service\', \'midas_powergrid.Powergrid-0.0-line-12.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-12.in_service\', \'midas_powergrid.Powergrid-0.0-line-13.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-13.in_service\', \'midas_powergrid.Powergrid-0.0-line-14.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-14.in_service\', \'midas_powergrid.Powergrid-0.0-line-2.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-2.in_service\', \'midas_powergrid.Powergrid-0.0-line-3.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-3.in_service\', \'midas_powergrid.Powergrid-0.0-line-4.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-4.in_service\', \'midas_powergrid.Powergrid-0.0-line-5.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-5.in_service\', \'midas_powergrid.Powergrid-0.0-line-6.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-6.in_service\', \'midas_powergrid.Powergrid-0.0-line-7.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-7.in_service\', \'midas_powergrid.Powergrid-0.0-line-8.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-8.in_service\', \'midas_powergrid.Powergrid-0.0-line-9.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-9.in_service\']}, {\'name\': \'Sauron SAC (autocurriculum-training)\', \'actuators\': [\'midas_powergrid.Powergrid-0.0-load-4-6.p_mw\', \'midas_powergrid.Powergrid-0.0-load-4-6.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-5-7.p_mw\', \'midas_powergrid.Powergrid-0.0-load-5-7.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-6-8.p_mw\', \'midas_powergrid.Powergrid-0.0-load-6-8.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-7-9.p_mw\', \'midas_powergrid.Powergrid-0.0-load-7-9.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-8-10.p_mw\', \'midas_powergrid.Powergrid-0.0-load-8-10.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-9-11.p_mw\', \'midas_powergrid.Powergrid-0.0-load-9-11.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-4-6.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-4-6.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-5-7.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-5-7.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-6-8.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-6-8.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-7-9.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-7-9.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-8-10.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-8-10.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-9-11.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-9-11.q_mvar\'], \'brain\': {\'name\': \'harl.sac.brain:SACBrain\', \'params\': {\'batch_size\': 2, \'fc_dims\': [8, 8], \'gamma\': 0.98, \'lr\': 0.0003, \'replay_size\': 1000000, \'update_after\': 4, \'update_every\': 1}}, \'muscle\': {\'name\': \'harl.sac.muscle:SACMuscle\', \'params\': {\'start_steps\': 4}}, \'objective\': {\'name\': \'midas_palaestrai:VoltageBandViolationPendulum\', \'params\': {}}, \'sensors\': [\'midas_powergrid.Powergrid-0.0-bus-1.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-1.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-10.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-10.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-11.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-11.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-12.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-12.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-13.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-13.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-14.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-14.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-2.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-2.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-3.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-3.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-4.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-4.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-5.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-5.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-6.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-6.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-7.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-7.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-8.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-8.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-9.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-9.va_degree\', \'midas_powergrid.Powergrid-0.0-line-0.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-0.in_service\', \'midas_powergrid.Powergrid-0.0-line-1.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-1.in_service\', \'midas_powergrid.Powergrid-0.0-line-10.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-10.in_service\', \'midas_powergrid.Powergrid-0.0-line-11.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-11.in_service\', \'midas_powergrid.Powergrid-0.0-line-12.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-12.in_service\', \'midas_powergrid.Powergrid-0.0-line-13.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-13.in_service\', \'midas_powergrid.Powergrid-0.0-line-14.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-14.in_service\', \'midas_powergrid.Powergrid-0.0-line-2.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-2.in_service\', \'midas_powergrid.Powergrid-0.0-line-3.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-3.in_service\', \'midas_powergrid.Powergrid-0.0-line-4.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-4.in_service\', \'midas_powergrid.Powergrid-0.0-line-5.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-5.in_service\', \'midas_powergrid.Powergrid-0.0-line-6.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-6.in_service\', \'midas_powergrid.Powergrid-0.0-line-7.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-7.in_service\', \'midas_powergrid.Powergrid-0.0-line-8.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-8.in_service\', \'midas_powergrid.Powergrid-0.0-line-9.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-9.in_service\']}], \'environments\': [{\'environment\': {\'name\': \'palaestrai_mosaik:MosaikEnvironment\', \'params\': {\'arl_sync_freq\': 2, \'arl_sync_port\': 59877, \'description_func\': \'describe\', \'end\': 10, \'instance_func\': \'get_world\', \'module\': \'midas_palaestrai:Descriptor\', \'start_date\': \'random\', \'params\': {\'config\': \'tests/fixtures/midas-scenarios/classic-arl.yml\', \'name\': \'carl_cigre_base\', \'step_size\': 2}}, \'uid\': \'midas_powergrid\'}, \'reward\': {\'name\': \'midas_palaestrai.rewards:ExtendedGridHealthReward\', \'params\': {}}}], \'phase_config\': {\'episodes\': 1, \'mode\': \'train\', \'worker\': 1}, \'simulation\': {\'conditions\': [{\'name\': \'palaestrai.simulation:VanillaSimControllerTerminationCondition\', \'params\': {}}], \'name\': \'palaestrai.simulation:TakingTurns\'}}}, {\'phase_ac_attacker_ac_defender_test\': {\'agents\': [{\'name\': \'Gandalf SAC (autocurriculum-training)\', \'actuators\': [\'midas_powergrid.Powergrid-0.0-load-0-1.p_mw\', \'midas_powergrid.Powergrid-0.0-load-0-1.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-1-3.p_mw\', \'midas_powergrid.Powergrid-0.0-load-1-3.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-10-12.p_mw\', \'midas_powergrid.Powergrid-0.0-load-10-12.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-11-13.p_mw\', \'midas_powergrid.Powergrid-0.0-load-11-13.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-12-14.p_mw\', \'midas_powergrid.Powergrid-0.0-load-12-14.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-2-4.p_mw\', \'midas_powergrid.Powergrid-0.0-load-2-4.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-3-5.p_mw\', \'midas_powergrid.Powergrid-0.0-load-3-5.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-0-1.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-0-1.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-1-3.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-1-3.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-10-12.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-10-12.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-11-13.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-11-13.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-12-14.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-12-14.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-2-4.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-2-4.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-3-5.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-3-5.q_mvar\'], \'brain\': {\'name\': \'harl.sac.brain:SACBrain\', \'params\': {\'batch_size\': 2, \'fc_dims\': [8, 8], \'gamma\': 0.98, \'lr\': 0.0003, \'replay_size\': 1000000, \'update_after\': 4, \'update_every\': 1}}, \'muscle\': {\'name\': \'harl.sac.muscle:SACMuscle\', \'params\': {\'start_steps\': 4}}, \'objective\': {\'name\': \'midas_palaestrai:VoltageDefenderObjective\', \'params\': {}}, \'sensors\': [\'midas_powergrid.Powergrid-0.0-bus-1.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-1.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-10.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-10.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-11.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-11.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-12.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-12.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-13.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-13.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-14.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-14.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-2.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-2.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-3.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-3.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-4.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-4.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-5.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-5.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-6.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-6.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-7.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-7.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-8.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-8.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-9.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-9.va_degree\', \'midas_powergrid.Powergrid-0.0-line-0.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-0.in_service\', \'midas_powergrid.Powergrid-0.0-line-1.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-1.in_service\', \'midas_powergrid.Powergrid-0.0-line-10.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-10.in_service\', \'midas_powergrid.Powergrid-0.0-line-11.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-11.in_service\', \'midas_powergrid.Powergrid-0.0-line-12.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-12.in_service\', \'midas_powergrid.Powergrid-0.0-line-13.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-13.in_service\', \'midas_powergrid.Powergrid-0.0-line-14.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-14.in_service\', \'midas_powergrid.Powergrid-0.0-line-2.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-2.in_service\', \'midas_powergrid.Powergrid-0.0-line-3.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-3.in_service\', \'midas_powergrid.Powergrid-0.0-line-4.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-4.in_service\', \'midas_powergrid.Powergrid-0.0-line-5.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-5.in_service\', \'midas_powergrid.Powergrid-0.0-line-6.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-6.in_service\', \'midas_powergrid.Powergrid-0.0-line-7.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-7.in_service\', \'midas_powergrid.Powergrid-0.0-line-8.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-8.in_service\', \'midas_powergrid.Powergrid-0.0-line-9.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-9.in_service\']}, {\'name\': \'Sauron SAC (autocurriculum-training)\', \'actuators\': [\'midas_powergrid.Powergrid-0.0-load-4-6.p_mw\', \'midas_powergrid.Powergrid-0.0-load-4-6.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-5-7.p_mw\', \'midas_powergrid.Powergrid-0.0-load-5-7.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-6-8.p_mw\', \'midas_powergrid.Powergrid-0.0-load-6-8.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-7-9.p_mw\', \'midas_powergrid.Powergrid-0.0-load-7-9.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-8-10.p_mw\', \'midas_powergrid.Powergrid-0.0-load-8-10.q_mvar\', \'midas_powergrid.Powergrid-0.0-load-9-11.p_mw\', \'midas_powergrid.Powergrid-0.0-load-9-11.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-4-6.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-4-6.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-5-7.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-5-7.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-6-8.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-6-8.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-7-9.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-7-9.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-8-10.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-8-10.q_mvar\', \'midas_powergrid.Powergrid-0.0-sgen-9-11.p_mw\', \'midas_powergrid.Powergrid-0.0-sgen-9-11.q_mvar\'], \'brain\': {\'name\': \'harl.sac.brain:SACBrain\', \'params\': {\'batch_size\': 2, \'fc_dims\': [8, 8], \'gamma\': 0.98, \'lr\': 0.0003, \'replay_size\': 1000000, \'update_after\': 4, \'update_every\': 1}}, \'muscle\': {\'name\': \'harl.sac.muscle:SACMuscle\', \'params\': {\'start_steps\': 4}}, \'objective\': {\'name\': \'midas_palaestrai:VoltageBandViolationPendulum\', \'params\': {}}, \'sensors\': [\'midas_powergrid.Powergrid-0.0-bus-1.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-1.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-10.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-10.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-11.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-11.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-12.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-12.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-13.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-13.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-14.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-14.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-2.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-2.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-3.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-3.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-4.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-4.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-5.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-5.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-6.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-6.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-7.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-7.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-8.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-8.va_degree\', \'midas_powergrid.Powergrid-0.0-bus-9.vm_pu\', \'midas_powergrid.Powergrid-0.0-bus-9.va_degree\', \'midas_powergrid.Powergrid-0.0-line-0.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-0.in_service\', \'midas_powergrid.Powergrid-0.0-line-1.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-1.in_service\', \'midas_powergrid.Powergrid-0.0-line-10.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-10.in_service\', \'midas_powergrid.Powergrid-0.0-line-11.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-11.in_service\', \'midas_powergrid.Powergrid-0.0-line-12.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-12.in_service\', \'midas_powergrid.Powergrid-0.0-line-13.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-13.in_service\', \'midas_powergrid.Powergrid-0.0-line-14.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-14.in_service\', \'midas_powergrid.Powergrid-0.0-line-2.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-2.in_service\', \'midas_powergrid.Powergrid-0.0-line-3.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-3.in_service\', \'midas_powergrid.Powergrid-0.0-line-4.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-4.in_service\', \'midas_powergrid.Powergrid-0.0-line-5.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-5.in_service\', \'midas_powergrid.Powergrid-0.0-line-6.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-6.in_service\', \'midas_powergrid.Powergrid-0.0-line-7.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-7.in_service\', \'midas_powergrid.Powergrid-0.0-line-8.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-8.in_service\', \'midas_powergrid.Powergrid-0.0-line-9.loading_percent\', \'midas_powergrid.Powergrid-0.0-line-9.in_service\']}], \'environments\': [{\'environment\': {\'name\': \'palaestrai_mosaik:MosaikEnvironment\', \'params\': {\'arl_sync_freq\': 2, \'arl_sync_port\': 59877, \'description_func\': \'describe\', \'end\': 10, \'instance_func\': \'get_world\', \'module\': \'midas_palaestrai:Descriptor\', \'start_date\': \'random\', \'params\': {\'config\': \'tests/fixtures/midas-scenarios/classic-arl.yml\', \'name\': \'carl_cigre_base\', \'step_size\': 2}}, \'uid\': \'midas_powergrid\'}, \'reward\': {\'name\': \'midas_palaestrai.rewards:ExtendedGridHealthReward\', \'params\': {}}}], \'phase_config\': {\'episodes\': 1, \'mode\': \'test\', \'worker\': 1}, \'simulation\': {\'conditions\': [{\'name\': \'palaestrai.simulation:VanillaSimControllerTerminationCondition\', \'params\': {}}], \'name\': \'palaestrai.simulation:TakingTurns\'}}}], \'run_config\': {\'condition\': {\'name\': \'palaestrai.experiment:VanillaRunGovernorTerminationCondition\', \'params\': {}}}}>'
The document
property of the experiment run object should contain the YAML file, and we should be able to de-searialize it. Let's check that.
assert our_experiment_run.document
our_experiment_run._document_json
{'uid': 'Classic-ARL-Experiment-0', 'experiment_uid': 'Dummy experiment record for experiment run Classic-ARL-Experiment-0', 'seed': 312184, 'version': '3.5.4', 'schedule': [{'phase_ac_training': {'agents': [{'name': 'Gandalf SAC (autocurriculum-training)', 'actuators': ['midas_powergrid.Powergrid-0.0-load-0-1.p_mw', 'midas_powergrid.Powergrid-0.0-load-0-1.q_mvar', 'midas_powergrid.Powergrid-0.0-load-1-3.p_mw', 'midas_powergrid.Powergrid-0.0-load-1-3.q_mvar', 'midas_powergrid.Powergrid-0.0-load-10-12.p_mw', 'midas_powergrid.Powergrid-0.0-load-10-12.q_mvar', 'midas_powergrid.Powergrid-0.0-load-11-13.p_mw', 'midas_powergrid.Powergrid-0.0-load-11-13.q_mvar', 'midas_powergrid.Powergrid-0.0-load-12-14.p_mw', 'midas_powergrid.Powergrid-0.0-load-12-14.q_mvar', 'midas_powergrid.Powergrid-0.0-load-2-4.p_mw', 'midas_powergrid.Powergrid-0.0-load-2-4.q_mvar', 'midas_powergrid.Powergrid-0.0-load-3-5.p_mw', 'midas_powergrid.Powergrid-0.0-load-3-5.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-0-1.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-0-1.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-1-3.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-1-3.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-10-12.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-10-12.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-11-13.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-11-13.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-12-14.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-12-14.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-2-4.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-2-4.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-3-5.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-3-5.q_mvar'], 'brain': {'name': 'harl.sac.brain:SACBrain', 'params': {'batch_size': 2, 'fc_dims': [8, 8], 'gamma': 0.98, 'lr': 0.0003, 'replay_size': 1000000, 'update_after': 4, 'update_every': 1}}, 'muscle': {'name': 'harl.sac.muscle:SACMuscle', 'params': {'start_steps': 4}}, 'objective': {'name': 'midas_palaestrai:VoltageDefenderObjective', 'params': {}}, 'sensors': ['midas_powergrid.Powergrid-0.0-bus-1.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-1.va_degree', 'midas_powergrid.Powergrid-0.0-bus-10.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-10.va_degree', 'midas_powergrid.Powergrid-0.0-bus-11.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-11.va_degree', 'midas_powergrid.Powergrid-0.0-bus-12.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-12.va_degree', 'midas_powergrid.Powergrid-0.0-bus-13.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-13.va_degree', 'midas_powergrid.Powergrid-0.0-bus-14.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-14.va_degree', 'midas_powergrid.Powergrid-0.0-bus-2.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-2.va_degree', 'midas_powergrid.Powergrid-0.0-bus-3.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-3.va_degree', 'midas_powergrid.Powergrid-0.0-bus-4.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-4.va_degree', 'midas_powergrid.Powergrid-0.0-bus-5.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-5.va_degree', 'midas_powergrid.Powergrid-0.0-bus-6.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-6.va_degree', 'midas_powergrid.Powergrid-0.0-bus-7.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-7.va_degree', 'midas_powergrid.Powergrid-0.0-bus-8.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-8.va_degree', 'midas_powergrid.Powergrid-0.0-bus-9.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-9.va_degree', 'midas_powergrid.Powergrid-0.0-line-0.loading_percent', 'midas_powergrid.Powergrid-0.0-line-0.in_service', 'midas_powergrid.Powergrid-0.0-line-1.loading_percent', 'midas_powergrid.Powergrid-0.0-line-1.in_service', 'midas_powergrid.Powergrid-0.0-line-10.loading_percent', 'midas_powergrid.Powergrid-0.0-line-10.in_service', 'midas_powergrid.Powergrid-0.0-line-11.loading_percent', 'midas_powergrid.Powergrid-0.0-line-11.in_service', 'midas_powergrid.Powergrid-0.0-line-12.loading_percent', 'midas_powergrid.Powergrid-0.0-line-12.in_service', 'midas_powergrid.Powergrid-0.0-line-13.loading_percent', 'midas_powergrid.Powergrid-0.0-line-13.in_service', 'midas_powergrid.Powergrid-0.0-line-14.loading_percent', 'midas_powergrid.Powergrid-0.0-line-14.in_service', 'midas_powergrid.Powergrid-0.0-line-2.loading_percent', 'midas_powergrid.Powergrid-0.0-line-2.in_service', 'midas_powergrid.Powergrid-0.0-line-3.loading_percent', 'midas_powergrid.Powergrid-0.0-line-3.in_service', 'midas_powergrid.Powergrid-0.0-line-4.loading_percent', 'midas_powergrid.Powergrid-0.0-line-4.in_service', 'midas_powergrid.Powergrid-0.0-line-5.loading_percent', 'midas_powergrid.Powergrid-0.0-line-5.in_service', 'midas_powergrid.Powergrid-0.0-line-6.loading_percent', 'midas_powergrid.Powergrid-0.0-line-6.in_service', 'midas_powergrid.Powergrid-0.0-line-7.loading_percent', 'midas_powergrid.Powergrid-0.0-line-7.in_service', 'midas_powergrid.Powergrid-0.0-line-8.loading_percent', 'midas_powergrid.Powergrid-0.0-line-8.in_service', 'midas_powergrid.Powergrid-0.0-line-9.loading_percent', 'midas_powergrid.Powergrid-0.0-line-9.in_service']}, {'name': 'Sauron SAC (autocurriculum-training)', 'actuators': ['midas_powergrid.Powergrid-0.0-load-4-6.p_mw', 'midas_powergrid.Powergrid-0.0-load-4-6.q_mvar', 'midas_powergrid.Powergrid-0.0-load-5-7.p_mw', 'midas_powergrid.Powergrid-0.0-load-5-7.q_mvar', 'midas_powergrid.Powergrid-0.0-load-6-8.p_mw', 'midas_powergrid.Powergrid-0.0-load-6-8.q_mvar', 'midas_powergrid.Powergrid-0.0-load-7-9.p_mw', 'midas_powergrid.Powergrid-0.0-load-7-9.q_mvar', 'midas_powergrid.Powergrid-0.0-load-8-10.p_mw', 'midas_powergrid.Powergrid-0.0-load-8-10.q_mvar', 'midas_powergrid.Powergrid-0.0-load-9-11.p_mw', 'midas_powergrid.Powergrid-0.0-load-9-11.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-4-6.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-4-6.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-5-7.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-5-7.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-6-8.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-6-8.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-7-9.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-7-9.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-8-10.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-8-10.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-9-11.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-9-11.q_mvar'], 'brain': {'name': 'harl.sac.brain:SACBrain', 'params': {'batch_size': 2, 'fc_dims': [8, 8], 'gamma': 0.98, 'lr': 0.0003, 'replay_size': 1000000, 'update_after': 4, 'update_every': 1}}, 'muscle': {'name': 'harl.sac.muscle:SACMuscle', 'params': {'start_steps': 4}}, 'objective': {'name': 'midas_palaestrai:VoltageBandViolationPendulum', 'params': {}}, 'sensors': ['midas_powergrid.Powergrid-0.0-bus-1.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-1.va_degree', 'midas_powergrid.Powergrid-0.0-bus-10.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-10.va_degree', 'midas_powergrid.Powergrid-0.0-bus-11.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-11.va_degree', 'midas_powergrid.Powergrid-0.0-bus-12.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-12.va_degree', 'midas_powergrid.Powergrid-0.0-bus-13.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-13.va_degree', 'midas_powergrid.Powergrid-0.0-bus-14.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-14.va_degree', 'midas_powergrid.Powergrid-0.0-bus-2.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-2.va_degree', 'midas_powergrid.Powergrid-0.0-bus-3.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-3.va_degree', 'midas_powergrid.Powergrid-0.0-bus-4.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-4.va_degree', 'midas_powergrid.Powergrid-0.0-bus-5.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-5.va_degree', 'midas_powergrid.Powergrid-0.0-bus-6.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-6.va_degree', 'midas_powergrid.Powergrid-0.0-bus-7.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-7.va_degree', 'midas_powergrid.Powergrid-0.0-bus-8.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-8.va_degree', 'midas_powergrid.Powergrid-0.0-bus-9.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-9.va_degree', 'midas_powergrid.Powergrid-0.0-line-0.loading_percent', 'midas_powergrid.Powergrid-0.0-line-0.in_service', 'midas_powergrid.Powergrid-0.0-line-1.loading_percent', 'midas_powergrid.Powergrid-0.0-line-1.in_service', 'midas_powergrid.Powergrid-0.0-line-10.loading_percent', 'midas_powergrid.Powergrid-0.0-line-10.in_service', 'midas_powergrid.Powergrid-0.0-line-11.loading_percent', 'midas_powergrid.Powergrid-0.0-line-11.in_service', 'midas_powergrid.Powergrid-0.0-line-12.loading_percent', 'midas_powergrid.Powergrid-0.0-line-12.in_service', 'midas_powergrid.Powergrid-0.0-line-13.loading_percent', 'midas_powergrid.Powergrid-0.0-line-13.in_service', 'midas_powergrid.Powergrid-0.0-line-14.loading_percent', 'midas_powergrid.Powergrid-0.0-line-14.in_service', 'midas_powergrid.Powergrid-0.0-line-2.loading_percent', 'midas_powergrid.Powergrid-0.0-line-2.in_service', 'midas_powergrid.Powergrid-0.0-line-3.loading_percent', 'midas_powergrid.Powergrid-0.0-line-3.in_service', 'midas_powergrid.Powergrid-0.0-line-4.loading_percent', 'midas_powergrid.Powergrid-0.0-line-4.in_service', 'midas_powergrid.Powergrid-0.0-line-5.loading_percent', 'midas_powergrid.Powergrid-0.0-line-5.in_service', 'midas_powergrid.Powergrid-0.0-line-6.loading_percent', 'midas_powergrid.Powergrid-0.0-line-6.in_service', 'midas_powergrid.Powergrid-0.0-line-7.loading_percent', 'midas_powergrid.Powergrid-0.0-line-7.in_service', 'midas_powergrid.Powergrid-0.0-line-8.loading_percent', 'midas_powergrid.Powergrid-0.0-line-8.in_service', 'midas_powergrid.Powergrid-0.0-line-9.loading_percent', 'midas_powergrid.Powergrid-0.0-line-9.in_service']}], 'environments': [{'environment': {'name': 'palaestrai_mosaik:MosaikEnvironment', 'params': {'arl_sync_freq': 2, 'arl_sync_port': 59877, 'description_func': 'describe', 'end': 10, 'instance_func': 'get_world', 'module': 'midas_palaestrai:Descriptor', 'start_date': 'random', 'params': {'config': 'tests/fixtures/midas-scenarios/classic-arl.yml', 'name': 'carl_cigre_base', 'step_size': 2}}, 'uid': 'midas_powergrid'}, 'reward': {'name': 'midas_palaestrai.rewards:ExtendedGridHealthReward', 'params': {}}}], 'phase_config': {'episodes': 1, 'mode': 'train', 'worker': 1}, 'simulation': {'conditions': [{'name': 'palaestrai.simulation:VanillaSimControllerTerminationCondition', 'params': {}}], 'name': 'palaestrai.simulation:TakingTurns'}}}, {'phase_ac_attacker_ac_defender_test': {'agents': [{'name': 'Gandalf SAC (autocurriculum-training)', 'actuators': ['midas_powergrid.Powergrid-0.0-load-0-1.p_mw', 'midas_powergrid.Powergrid-0.0-load-0-1.q_mvar', 'midas_powergrid.Powergrid-0.0-load-1-3.p_mw', 'midas_powergrid.Powergrid-0.0-load-1-3.q_mvar', 'midas_powergrid.Powergrid-0.0-load-10-12.p_mw', 'midas_powergrid.Powergrid-0.0-load-10-12.q_mvar', 'midas_powergrid.Powergrid-0.0-load-11-13.p_mw', 'midas_powergrid.Powergrid-0.0-load-11-13.q_mvar', 'midas_powergrid.Powergrid-0.0-load-12-14.p_mw', 'midas_powergrid.Powergrid-0.0-load-12-14.q_mvar', 'midas_powergrid.Powergrid-0.0-load-2-4.p_mw', 'midas_powergrid.Powergrid-0.0-load-2-4.q_mvar', 'midas_powergrid.Powergrid-0.0-load-3-5.p_mw', 'midas_powergrid.Powergrid-0.0-load-3-5.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-0-1.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-0-1.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-1-3.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-1-3.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-10-12.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-10-12.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-11-13.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-11-13.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-12-14.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-12-14.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-2-4.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-2-4.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-3-5.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-3-5.q_mvar'], 'brain': {'name': 'harl.sac.brain:SACBrain', 'params': {'batch_size': 2, 'fc_dims': [8, 8], 'gamma': 0.98, 'lr': 0.0003, 'replay_size': 1000000, 'update_after': 4, 'update_every': 1}}, 'muscle': {'name': 'harl.sac.muscle:SACMuscle', 'params': {'start_steps': 4}}, 'objective': {'name': 'midas_palaestrai:VoltageDefenderObjective', 'params': {}}, 'sensors': ['midas_powergrid.Powergrid-0.0-bus-1.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-1.va_degree', 'midas_powergrid.Powergrid-0.0-bus-10.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-10.va_degree', 'midas_powergrid.Powergrid-0.0-bus-11.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-11.va_degree', 'midas_powergrid.Powergrid-0.0-bus-12.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-12.va_degree', 'midas_powergrid.Powergrid-0.0-bus-13.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-13.va_degree', 'midas_powergrid.Powergrid-0.0-bus-14.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-14.va_degree', 'midas_powergrid.Powergrid-0.0-bus-2.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-2.va_degree', 'midas_powergrid.Powergrid-0.0-bus-3.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-3.va_degree', 'midas_powergrid.Powergrid-0.0-bus-4.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-4.va_degree', 'midas_powergrid.Powergrid-0.0-bus-5.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-5.va_degree', 'midas_powergrid.Powergrid-0.0-bus-6.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-6.va_degree', 'midas_powergrid.Powergrid-0.0-bus-7.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-7.va_degree', 'midas_powergrid.Powergrid-0.0-bus-8.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-8.va_degree', 'midas_powergrid.Powergrid-0.0-bus-9.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-9.va_degree', 'midas_powergrid.Powergrid-0.0-line-0.loading_percent', 'midas_powergrid.Powergrid-0.0-line-0.in_service', 'midas_powergrid.Powergrid-0.0-line-1.loading_percent', 'midas_powergrid.Powergrid-0.0-line-1.in_service', 'midas_powergrid.Powergrid-0.0-line-10.loading_percent', 'midas_powergrid.Powergrid-0.0-line-10.in_service', 'midas_powergrid.Powergrid-0.0-line-11.loading_percent', 'midas_powergrid.Powergrid-0.0-line-11.in_service', 'midas_powergrid.Powergrid-0.0-line-12.loading_percent', 'midas_powergrid.Powergrid-0.0-line-12.in_service', 'midas_powergrid.Powergrid-0.0-line-13.loading_percent', 'midas_powergrid.Powergrid-0.0-line-13.in_service', 'midas_powergrid.Powergrid-0.0-line-14.loading_percent', 'midas_powergrid.Powergrid-0.0-line-14.in_service', 'midas_powergrid.Powergrid-0.0-line-2.loading_percent', 'midas_powergrid.Powergrid-0.0-line-2.in_service', 'midas_powergrid.Powergrid-0.0-line-3.loading_percent', 'midas_powergrid.Powergrid-0.0-line-3.in_service', 'midas_powergrid.Powergrid-0.0-line-4.loading_percent', 'midas_powergrid.Powergrid-0.0-line-4.in_service', 'midas_powergrid.Powergrid-0.0-line-5.loading_percent', 'midas_powergrid.Powergrid-0.0-line-5.in_service', 'midas_powergrid.Powergrid-0.0-line-6.loading_percent', 'midas_powergrid.Powergrid-0.0-line-6.in_service', 'midas_powergrid.Powergrid-0.0-line-7.loading_percent', 'midas_powergrid.Powergrid-0.0-line-7.in_service', 'midas_powergrid.Powergrid-0.0-line-8.loading_percent', 'midas_powergrid.Powergrid-0.0-line-8.in_service', 'midas_powergrid.Powergrid-0.0-line-9.loading_percent', 'midas_powergrid.Powergrid-0.0-line-9.in_service']}, {'name': 'Sauron SAC (autocurriculum-training)', 'actuators': ['midas_powergrid.Powergrid-0.0-load-4-6.p_mw', 'midas_powergrid.Powergrid-0.0-load-4-6.q_mvar', 'midas_powergrid.Powergrid-0.0-load-5-7.p_mw', 'midas_powergrid.Powergrid-0.0-load-5-7.q_mvar', 'midas_powergrid.Powergrid-0.0-load-6-8.p_mw', 'midas_powergrid.Powergrid-0.0-load-6-8.q_mvar', 'midas_powergrid.Powergrid-0.0-load-7-9.p_mw', 'midas_powergrid.Powergrid-0.0-load-7-9.q_mvar', 'midas_powergrid.Powergrid-0.0-load-8-10.p_mw', 'midas_powergrid.Powergrid-0.0-load-8-10.q_mvar', 'midas_powergrid.Powergrid-0.0-load-9-11.p_mw', 'midas_powergrid.Powergrid-0.0-load-9-11.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-4-6.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-4-6.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-5-7.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-5-7.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-6-8.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-6-8.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-7-9.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-7-9.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-8-10.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-8-10.q_mvar', 'midas_powergrid.Powergrid-0.0-sgen-9-11.p_mw', 'midas_powergrid.Powergrid-0.0-sgen-9-11.q_mvar'], 'brain': {'name': 'harl.sac.brain:SACBrain', 'params': {'batch_size': 2, 'fc_dims': [8, 8], 'gamma': 0.98, 'lr': 0.0003, 'replay_size': 1000000, 'update_after': 4, 'update_every': 1}}, 'muscle': {'name': 'harl.sac.muscle:SACMuscle', 'params': {'start_steps': 4}}, 'objective': {'name': 'midas_palaestrai:VoltageBandViolationPendulum', 'params': {}}, 'sensors': ['midas_powergrid.Powergrid-0.0-bus-1.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-1.va_degree', 'midas_powergrid.Powergrid-0.0-bus-10.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-10.va_degree', 'midas_powergrid.Powergrid-0.0-bus-11.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-11.va_degree', 'midas_powergrid.Powergrid-0.0-bus-12.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-12.va_degree', 'midas_powergrid.Powergrid-0.0-bus-13.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-13.va_degree', 'midas_powergrid.Powergrid-0.0-bus-14.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-14.va_degree', 'midas_powergrid.Powergrid-0.0-bus-2.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-2.va_degree', 'midas_powergrid.Powergrid-0.0-bus-3.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-3.va_degree', 'midas_powergrid.Powergrid-0.0-bus-4.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-4.va_degree', 'midas_powergrid.Powergrid-0.0-bus-5.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-5.va_degree', 'midas_powergrid.Powergrid-0.0-bus-6.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-6.va_degree', 'midas_powergrid.Powergrid-0.0-bus-7.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-7.va_degree', 'midas_powergrid.Powergrid-0.0-bus-8.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-8.va_degree', 'midas_powergrid.Powergrid-0.0-bus-9.vm_pu', 'midas_powergrid.Powergrid-0.0-bus-9.va_degree', 'midas_powergrid.Powergrid-0.0-line-0.loading_percent', 'midas_powergrid.Powergrid-0.0-line-0.in_service', 'midas_powergrid.Powergrid-0.0-line-1.loading_percent', 'midas_powergrid.Powergrid-0.0-line-1.in_service', 'midas_powergrid.Powergrid-0.0-line-10.loading_percent', 'midas_powergrid.Powergrid-0.0-line-10.in_service', 'midas_powergrid.Powergrid-0.0-line-11.loading_percent', 'midas_powergrid.Powergrid-0.0-line-11.in_service', 'midas_powergrid.Powergrid-0.0-line-12.loading_percent', 'midas_powergrid.Powergrid-0.0-line-12.in_service', 'midas_powergrid.Powergrid-0.0-line-13.loading_percent', 'midas_powergrid.Powergrid-0.0-line-13.in_service', 'midas_powergrid.Powergrid-0.0-line-14.loading_percent', 'midas_powergrid.Powergrid-0.0-line-14.in_service', 'midas_powergrid.Powergrid-0.0-line-2.loading_percent', 'midas_powergrid.Powergrid-0.0-line-2.in_service', 'midas_powergrid.Powergrid-0.0-line-3.loading_percent', 'midas_powergrid.Powergrid-0.0-line-3.in_service', 'midas_powergrid.Powergrid-0.0-line-4.loading_percent', 'midas_powergrid.Powergrid-0.0-line-4.in_service', 'midas_powergrid.Powergrid-0.0-line-5.loading_percent', 'midas_powergrid.Powergrid-0.0-line-5.in_service', 'midas_powergrid.Powergrid-0.0-line-6.loading_percent', 'midas_powergrid.Powergrid-0.0-line-6.in_service', 'midas_powergrid.Powergrid-0.0-line-7.loading_percent', 'midas_powergrid.Powergrid-0.0-line-7.in_service', 'midas_powergrid.Powergrid-0.0-line-8.loading_percent', 'midas_powergrid.Powergrid-0.0-line-8.in_service', 'midas_powergrid.Powergrid-0.0-line-9.loading_percent', 'midas_powergrid.Powergrid-0.0-line-9.in_service']}], 'environments': [{'environment': {'name': 'palaestrai_mosaik:MosaikEnvironment', 'params': {'arl_sync_freq': 2, 'arl_sync_port': 59877, 'description_func': 'describe', 'end': 10, 'instance_func': 'get_world', 'module': 'midas_palaestrai:Descriptor', 'start_date': 'random', 'params': {'config': 'tests/fixtures/midas-scenarios/classic-arl.yml', 'name': 'carl_cigre_base', 'step_size': 2}}, 'uid': 'midas_powergrid'}, 'reward': {'name': 'midas_palaestrai.rewards:ExtendedGridHealthReward', 'params': {}}}], 'phase_config': {'episodes': 1, 'mode': 'test', 'worker': 1}, 'simulation': {'conditions': [{'name': 'palaestrai.simulation:VanillaSimControllerTerminationCondition', 'params': {}}], 'name': 'palaestrai.simulation:TakingTurns'}}}], 'run_config': {'condition': {'name': 'palaestrai.experiment:VanillaRunGovernorTerminationCondition', 'params': {}}}}
our_experiment_run.experiment_run_instances[0].uid
'eff75bfe-c27d-41eb-8f12-a0cfb2ec497d'
… and so on. For a system test, this is enough.