yawning_titan.envs.generic.core.network_interface.NetworkInterface#
- class yawning_titan.envs.generic.core.network_interface.NetworkInterface(game_mode, network)[source]#
Bases:
object
The primary interface between both red and blue agents and the underlying environment.
Initialise the Network Interface and initialises all the necessary components.
- Parameters:
Methods
Add a deceptive node into the network.
Attack a target node.
Create a dictionary that contains the current state of the environment and returns it.
Get a dictionary of the isolation status of all the nodes.
Get a dictionary of compromised states.
Get a dictionary of compromised states.
Get a dictionary of node positions.
Get a dictionary of vulnerability scores.
Take in a key and return a dictionary.
Get all of the nodes connected to the given node in the base graph.
Get all of the nodes currently connected to a target node.
Get the current networkx graph for the environment and convert it to a dict of dicts.
Get the current observation of the environment.
Get the midpoint between the position of two nodes.
Get the current number of unused deceptive nodes.
Use base observation size calculator with feather switched off.
Get the size of the observation space.
Get a list of the shortest distances from each node to the target.
Get the node which is being targeted in the config.
Get the total number of nodes including any yet to be placed deceptive nodes.
Create a separate list of :class: ~yawning_titan.networks.node.Node objects take represent deceptive nodes.
Create a lookup that maps a unique integer key to an networkx edge (node pair).
Isolate a node (disable all of the nodes connections).
Make the state for a given node safe.
Re-enable any connections that may have previously been disabled.
Reset the network back to its default state.
Reset the attacks list.
Save a given dictionary to a json file.
Scan a target node to determine compromise based on the chance of discovery of compromise.
Update this turns current attacks.
- 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