palaestrAI in a Jupyter Notebook¶

This is just the equivalent of a system test for the random action experiment.

Imports¶

In [1]:
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…

In [2]:
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.

In [3]:
store_dir = tempfile.TemporaryDirectory()
store_dir
Out[3]:
<TemporaryDirectory '/tmp/tmpcgiqtimy'>

We're now going to change palaestrAI's runtime configuration to point to the new directory.

In [4]:
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.

In [5]:
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.
In [6]:
assert Path("%s/palaestrai.db" % store_dir.name).is_file()

Run Experiment¶

In this part, we load our Classic ARL experiment and run it.

In [7]:
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
In [8]:
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]
Out[8]:
(['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.

In [9]:
from sqlalchemy import select

import palaestrai.store
import palaestrai.store.database_model as dbm
In [10]:
dbh = palaestrai.store.Session()
In [11]:
q = select(dbm.Experiment)
str(q)
Out[11]:
'SELECT experiments.document, experiments.document_json, experiments.id, experiments.name \nFROM experiments'
In [12]:
experiment = dbh.execute(q).first()[dbm.Experiment]
experiment.name
Out[12]:
'Dummy experiment record for experiment run Classic-ARL-Experiment-0'
In [13]:
our_experiment_run = experiment.experiment_runs[0]
str(our_experiment_run)
Out[13]:
'<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.

In [14]:
assert our_experiment_run.document
In [15]:
our_experiment_run._document_json
Out[15]:
{'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': {}}}}
In [16]:
our_experiment_run.experiment_run_instances[0].uid
Out[16]:
'eff75bfe-c27d-41eb-8f12-a0cfb2ec497d'

… and so on. For a system test, this is enough.