Merge branch 'dev' into feature/2588-minimal-deps
This commit is contained in:
@@ -38,7 +38,8 @@ dependencies = [
|
|||||||
"PyYAML==6.0",
|
"PyYAML==6.0",
|
||||||
"typer[all]==0.9.0",
|
"typer[all]==0.9.0",
|
||||||
"pydantic==2.7.0",
|
"pydantic==2.7.0",
|
||||||
"ipywidgets"
|
"ipywidgets",
|
||||||
|
"deepdiff"
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.setuptools.dynamic]
|
[tool.setuptools.dynamic]
|
||||||
|
|||||||
168
src/primaite/notebooks/Getting-Information-Out-Of-PrimAITE.ipynb
Normal file
168
src/primaite/notebooks/Getting-Information-Out-Of-PrimAITE.ipynb
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"# Getting information out of PrimAITE"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# Imports\n",
|
||||||
|
"import yaml\n",
|
||||||
|
"from primaite import PRIMAITE_CONFIG\n",
|
||||||
|
"\n",
|
||||||
|
"from primaite.config.load import data_manipulation_config_path\n",
|
||||||
|
"from primaite.session.environment import PrimaiteGymEnv\n",
|
||||||
|
"from primaite.simulator.network.hardware.nodes.host.computer import Computer\n",
|
||||||
|
"from notebook.services.config import ConfigManager\n",
|
||||||
|
"\n",
|
||||||
|
"cm = ConfigManager().update('notebook', {'limit_output': 50}) # limit output lines to 50 - for neatness\n",
|
||||||
|
"\n",
|
||||||
|
"# create the env\n",
|
||||||
|
"with open(data_manipulation_config_path(), 'r') as f:\n",
|
||||||
|
" cfg = yaml.safe_load(f)\n",
|
||||||
|
"\n",
|
||||||
|
"env = PrimaiteGymEnv(env_config=cfg)\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Visualising the Simulation Network"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"The network can be visualised by running the code below."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"env.game.simulation.network.draw()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Getting the state of a simulation object\n",
|
||||||
|
"\n",
|
||||||
|
"The state of the simulation object is used to determine the observation space used by agents.\n",
|
||||||
|
"\n",
|
||||||
|
"Any object created using the ``SimComponent`` class has a ``describe_state`` method which can show the state of the object.\n",
|
||||||
|
"\n",
|
||||||
|
"An example of such an object is ``Computer`` which inherits from ``SimComponent``. In the default network configuration, ``client_1`` is a Computer object."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"client_1: Computer = env.game.simulation.network.get_node_by_hostname(\"client_1\")\n",
|
||||||
|
"client_1.describe_state()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"### More specific describe_state\n",
|
||||||
|
"\n",
|
||||||
|
"As you can see, the output from the ``describe_state`` method for the ``Computer`` object includes the describe state for all its components. This can cause a large describe state output.\n",
|
||||||
|
"\n",
|
||||||
|
"As stated, the ``describe_state`` can be called on any object that inherits ``SimComponent``. This can allow you retrieve the state of a specific item."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"client_1.file_system.describe_state()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## System Logs\n",
|
||||||
|
"\n",
|
||||||
|
"Objects that inherit from the ``Node`` class will inherit the ``sys_log`` attribute.\n",
|
||||||
|
"\n",
|
||||||
|
"This is to simulate the idea that items such as Computer, Routers, Servers, etc. have a logging system used to diagnose problems."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# store config\n",
|
||||||
|
"# this is to prevent the notebook from breaking your local settings\n",
|
||||||
|
"was_enabled = PRIMAITE_CONFIG[\"developer_mode\"][\"enabled\"]\n",
|
||||||
|
"was_syslogs_enabled = PRIMAITE_CONFIG[\"developer_mode\"][\"output_sys_logs\"]\n",
|
||||||
|
"\n",
|
||||||
|
"# enable dev mode so that the default config outputs are overridden for this demo\n",
|
||||||
|
"PRIMAITE_CONFIG[\"developer_mode\"][\"enabled\"] = True\n",
|
||||||
|
"PRIMAITE_CONFIG[\"developer_mode\"][\"output_sys_logs\"] = True\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"# Remake the environment\n",
|
||||||
|
"env = PrimaiteGymEnv(env_config=cfg)\n",
|
||||||
|
"\n",
|
||||||
|
"# get the example computer\n",
|
||||||
|
"client_1: Computer = env.game.simulation.network.get_node_by_hostname(\"client_1\")\n",
|
||||||
|
"\n",
|
||||||
|
"# show sys logs on terminal\n",
|
||||||
|
"client_1.sys_log.show()\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"\n",
|
||||||
|
"# restore config\n",
|
||||||
|
"PRIMAITE_CONFIG[\"developer_mode\"][\"enabled\"] = was_enabled\n",
|
||||||
|
"PRIMAITE_CONFIG[\"developer_mode\"][\"output_sys_logs\"] = was_syslogs_enabled"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"kernelspec": {
|
||||||
|
"display_name": "venv",
|
||||||
|
"language": "python",
|
||||||
|
"name": "python3"
|
||||||
|
},
|
||||||
|
"language_info": {
|
||||||
|
"codemirror_mode": {
|
||||||
|
"name": "ipython",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"file_extension": ".py",
|
||||||
|
"mimetype": "text/x-python",
|
||||||
|
"name": "python",
|
||||||
|
"nbconvert_exporter": "python",
|
||||||
|
"pygments_lexer": "ipython3",
|
||||||
|
"version": "3.8.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 2
|
||||||
|
}
|
||||||
@@ -82,7 +82,7 @@ class PrimaiteGymEnv(gymnasium.Env):
|
|||||||
with open(path, "w") as file:
|
with open(path, "w") as file:
|
||||||
json.dump(data, file)
|
json.dump(data, file)
|
||||||
|
|
||||||
def reset(self, seed: Optional[int] = None) -> Tuple[ObsType, Dict[str, Any]]:
|
def reset(self, seed: Optional[int] = None, options: Optional[Dict] = None) -> Tuple[ObsType, Dict[str, Any]]:
|
||||||
"""Reset the environment."""
|
"""Reset the environment."""
|
||||||
_LOGGER.info(
|
_LOGGER.info(
|
||||||
f"Resetting environment, episode {self.episode_counter}, "
|
f"Resetting environment, episode {self.episode_counter}, "
|
||||||
|
|||||||
Reference in New Issue
Block a user