Source code for yawning_titan.envs.specific.core.node_states
from typing import List, Tuple
import networkx as nx
"""
node_states.py
This module contains helper functions to find compromised and uncompromised nodes for
the four-node-def-v0 and five-node-def-v0 environments.
"""
[docs]def get_linked_node_state(
current_position: int, network: nx.Graph, machine_states: List[List[float]]
) -> Tuple[List[int], List[int]]:
"""
Calculate the state of the nodes linked the red team's current position.
Args:
current_position: The current Red Team's location
network: A networkx graph representation of the network
machine_states: The current machine states
Returns:
uncompromised_nodes: A list of uncompromised linked nodes
compromised_nodes: A list of compromised linked nodes
"""
linked_nodes = list(network.edges(current_position))
uncompromised_nodes = []
compromised_nodes = []
for i in range(len(linked_nodes)):
node = linked_nodes[i][1]
if machine_states[node][1] == 0:
uncompromised_nodes.append(node)
else:
compromised_nodes.append(node)
return uncompromised_nodes, compromised_nodes
[docs]def get_linked_compromised_nodes(
current_position: int, network: nx.Graph, machine_states: List[List[float]]
) -> List[int]:
"""
Return a list containing all the linked compromised nodes relative to the red agents current position.
Args:
current_position: The red teams current position
network: A networkx graph representation of the network
machine_states: The current machine states
Returns:
compromised nodes: A list of comrpomised linked nodes
"""
linked_nodes = list(network.edges(current_position))
compromised_nodes = []
for i in range(len(linked_nodes)):
node = linked_nodes[i][1]
if machine_states[node][1] == 1:
compromised_nodes.append(node)
return compromised_nodes
[docs]def get_linked_uncompromised_nodes(
current_position: int, network: nx.Graph, machine_states: List[List[float]]
) -> List[int]:
"""
Return a list containing all the linked uncompromised nodes relative to the red agents current position.
Args:
current_position: The red teams current position
network: A networkx graph representation of the network
machine_states: The current machine states
Returns:
compromised nodes: A list of uncomrpomised linked nodes
"""
linked_nodes = list(network.edges(current_position))
uncompromised_nodes = []
for i in range(len(linked_nodes)):
node = linked_nodes[i][1]
if machine_states[node][1] == 0:
uncompromised_nodes.append(node)
return uncompromised_nodes
[docs]def get_uncompromised_nodes(machine_states: List[List[float]]) -> List[int]:
"""
Return a list of uncompromised nodes.
Args:
machine_states: The current machine states
Returns:
A list of uncompromised nodes
Notes:
This differs from the similar function above
because this function does not support returning
uncompromised nodes based on an agents current
position
"""
uncompromised_nodes = []
for i in range(len(machine_states)):
if machine_states[i][1] == 0:
uncompromised_nodes.append(i)
return uncompromised_nodes
[docs]def get_compromised_nodes(machine_states: List[List[float]]) -> List[int]:
"""
Return a list of compromised nodes.
Args:
machine_states: The current machine states
Returns:
A list of compromised nodes
Notes:
This differs from the similar function above
because this function does not support returning
uncompromised nodes based on an agents current
position
"""
compromised_nodes = []
for i in range(len(machine_states)):
if machine_states[i][1] == 1:
compromised_nodes.append(i)
return compromised_nodes