yawning_titan.envs.generic.core.network_interface#
Classes
The primary interface between both red and blue agents and the underlying environment. |
- class yawning_titan.envs.generic.core.network_interface.NetworkInterface(game_mode, network)[source]#
The primary interface between both red and blue agents and the underlying environment.
Initialise the Network Interface and initialises all the necessary components.
- Parameters:
- __init__(game_mode, network)[source]#
Initialise the Network Interface and initialises all the necessary components.
- get_shortest_distances_to_target(nodes)[source]#
Get a list of the shortest distances from each node to the target.
- get_target_node()[source]#
Get the node which is being targeted in the config.
- Returns:
The target node if it exists
- get_total_num_nodes()[source]#
Get the total number of nodes including any yet to be placed deceptive nodes.
- Returns:
The number of nodes that there are including deceptive nodes that may not have been placed yet
- get_midpoint(node1, node2)[source]#
Get the midpoint between the position of two nodes.
- Parameters:
node1 – the name of the first node to get the midpoint from
node2 – the name of the second node to get the midpoint from
- Returns:
The x and y coordinates of the midpoint between two nodes
- get_current_connected_nodes(node)[source]#
Get all of the nodes currently connected to a target node.
- Parameters:
node – The name of the node to get the current connections of
- Returns:
A list of nodes
- get_base_connected_nodes(node)[source]#
Get all of the nodes connected to the given node in the base graph.
- Parameters:
node – The name of the node to get the current connections of
- Returns:
A list of nodes
- get_current_graph_as_dict()[source]#
Get the current networkx graph for the environment and convert it to a dict of dicts.
- Returns:
The networkx graph as a dict of dicts
- get_attributes_from_key(key, key_by_uuid=True)[source]#
Take in a key and return a dictionary.
The keys are the names of the nodes and the values are the attribute values that are stored for that node under the specified key
- Parameters:
key – The name of the attribute to extract
key_by_uuid – Use the nodes uuid attribute as the key if True otherwise use the node object itself.
- Returns:
A dictionary of attributes
- get_current_observation()[source]#
Get the current observation of the environment.
The composition of the observation space is based on the configuration file used for the scenario.
- Returns:
numpy array containing the above details
- get_observation_size_base(with_feather)[source]#
Get the size of the observation space.
This is based on the game_mode that are turned on/off.
- Returns:
The size of the observation space
- initialise_deceptive_nodes()[source]#
Create a separate list of :class: ~yawning_titan.networks.node.Node objects take represent deceptive nodes.
- initialise_edge_map()[source]#
Create a lookup that maps a unique integer key to an networkx edge (node pair).
- update_stored_attacks(attacking_nodes, target_nodes, success)[source]#
Update this turns current attacks.
This function collects all of the failed attacks and stores them for the blue agent to use in their action decision
- Parameters:
attacking_nodes – Nodes red has attacked from
target_nodes – Nodes red is attacking
success – If the attacks were a success or not
- reset_stored_attacks()[source]#
Reset the attacks list.
This needs to be called every timestep to ensure that only the current attacks are contained.
- add_deceptive_node(node1, node2)[source]#
Add a deceptive node into the network.
The deceptive node will sit between two actual nodes and act as a normal node in all regards other than the fact that it give more information when it is attacked
- Parameters:
node1 – Name of the first node to connect to the deceptive node
node2 – Name of the second to connect to the deceptive node
- Returns:
False if failed, the name of the new node if succeeded
- isolate_node(node)[source]#
Isolate a node (disable all of the nodes connections).
- Parameters:
node – the node to disable the connections of
- reconnect_node(node)[source]#
Re-enable any connections that may have previously been disabled.
- Parameters:
node – the node to re-enable
- attack_node(node, skill=0.5, use_skill=False, use_vulnerability=False, guarantee=False)[source]#
Attack a target node.
Uses a random chance to succeed that is modified by the skill of the attack and the vulnerability of the node. Both the skill and the vulnerability can be toggled to either be used or not
- Parameters:
node – The name of the node to target
skill – The skill of the attacker
use_skill – A boolean value that is used to determine if skill is used in the calculation to check if the attack succeeds
use_vulnerability – A boolean value that is used to determine if vulnerability is used in the calculation to check if the attack succeeds
guarantee – If True then attack automatically succeeds
- Returns:
A boolean value that represents if the attack succeeded or not
- make_node_safe(node)[source]#
Make the state for a given node safe.
- Parameters:
node – the node to make safe
- scan_node(node)[source]#
Scan a target node to determine compromise based on the chance of discovery of compromise.
- Parameters:
node – The node to be scanned