yawning_titan.agents.nsa_red.NSARed#
- class yawning_titan.agents.nsa_red.NSARed(skill, action_set, action_probabilities, node_set, zd_start_amount=0, zd_gain=0, zd_required=10)[source]#
Bases:
object
Provides the red agent behaviour within the 18-node-def environment.
The agent is a loose replication of:
Methods
Perform a basic attack on a targetted node.
Check if a zero day is available .
Choose an action to perform.
Choose a node to act on.
Perform the selected action on the given target nodes.
Increment the day related to zero day development.
Attempt to randomly intrude every uncompromised node.
Move the red agent from one node to another.
Attempt to spread to all nodes connected to a compromised node.
Update the set of actions and the corresponding probabilities.
Update the current location of the red agent.
Update the set of nodes the agent can act upon.
Perform a zd attack on a targetted node.
- update_node_set(nodes)[source]#
Update the set of nodes the agent can act upon.
- Parameters:
nodes – A list containing the nodes
- update_actions(actions, probabilities)[source]#
Update the set of actions and the corresponding probabilities.
- Parameters:
actions – the new set of actions the agent can take
probabilities – the weights associated with the actions
- update_location(target, red_current_node)[source]#
Update the current location of the red agent.
- Parameters:
target – the location to move to
red_current_node – red agents current node
- Returns:
Reds previous node The node red is currently in
- increment_day()[source]#
Increment the day related to zero day development.
If the day has reached a threshold for a zero day then add 1 to the number of available zero days.
- check_zd_available()[source]#
Check if a zero day is available .
- Returns:
True if a zero day is available to use False if no zero day is available to use
- zd_attack(target, args)[source]#
Perform a zd attack on a targetted node.
- Parameters:
target – the target node
args – A tuple containing: * “machine_states”: the current state of the machines * “red_current_node”: the red agents current node * “able_to_move”: if the red agent is able to move
- basic_attack(target, args)[source]#
Perform a basic attack on a targetted node.
- Parameters:
target – The target node
args – A tuple containing: * “machine_states”: the current state of the machines * “skill_level”: The skill level of the attack * “attack_success_threshold”: A threshold to determine if the attack succeeds * “red_current_node”: The current position of the red agent * “able_to_move”: if the red agent is able to move
- move(target, args)[source]#
Move the red agent from one node to another.
- Parameters:
target – the node the agent is moving to
args – A tuple containing the following: * “red_current_node”: the current node of the agent * “able_to_move”: if the agent is able to move
- spread(state, args)[source]#
Attempt to spread to all nodes connected to a compromised node.
- Parameters:
state – the current state of the environment
args – A tuple containing: * “chance_to_spread”: the chance to spread from one node to another * “chance_to_randomly_compromise”: chance to randomly infect a node
- intrude(state, args)[source]#
Attempt to randomly intrude every uncompromised node.
- Parameters:
state – the current state of the environment
args – A tuple containing: * “chance_to_spread”: the chance to spread from one node to another * “chance_to_randomly_compromise”: chance to randomly infect a node