Defense¶
-
class
graph_tiger.defenses.
Defense
(graph, runs=10, steps=50, attack='id_node', defense=None, k_d=0, **kwargs)¶ Bases:
graph_tiger.simulations.Simulation
This class simulates a variety of defense techniques on an undirected NetworkX graph
- Parameters
graph – an undirected NetworkX graph
runs – an integer number of times to run the simulation
steps – an integer number of steps to run a single simulation
attack – a string representing the attack strategy to run
defense – a string representing the defense strategy to run
k_d – an integer number of nodes to defend
**kwargs –
see parent class Simulation for additional options
-
reset_simulation
()¶ Resets the simulation between each run
-
run_single_sim
()¶ Run the defense simulation
-
track_simulation
(step)¶ Keeps track of important simulation information at each step of the simulation
- Parameters
step – current simulation iteration
-
graph_tiger.defenses.
add_edge_degree
(graph, k=3)¶ Add k edges to defend based on top edge degree centrality entries [16].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to add
- Returns
a list of edges to add
-
graph_tiger.defenses.
add_edge_eig
(graph, k=3)¶ Get k edges to defend based on top edge eigenvector centrality entries [16].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to add
- Returns
a dictionary of the edges to be ‘added’
-
graph_tiger.defenses.
add_edge_pr
(graph, k=3)¶ Get k edges to defend based on top edge PageRank entries [16].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to add
- Returns
a dictionary of the edges to be ‘added’
-
graph_tiger.defenses.
add_edge_pref
(graph, k=3)¶ Adds an edge connecting two nodes with the lowest degrees [2].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to add
- Returns
a dictionary of the edges to be ‘added’
-
graph_tiger.defenses.
add_edge_rnd
(graph, k=3)¶ Add k random edges to the graph
- Parameters
graph – an undirected NetworkX graph
k – number of edges to add
- Returns
a dictionary of the edges to be ‘added’
-
graph_tiger.defenses.
get_central_edges
(graph, k, method='eig')¶ Internal function to compute edge PageRank, eigenvector centrality and degree centrality
- Parameters
graph – undirected NetworkX graph
k – int number of nodes to defend
method – string representing defense method
- Returns
list of edges to add
-
graph_tiger.defenses.
get_defense_category
(method)¶ Gets the defense category e.g., ‘node’, ‘edge’ defense.
- Parameters
method – a string representing the defense method
- Returns
a string representing the defense type (‘node’ or ‘edge’)
-
graph_tiger.defenses.
get_defense_methods
()¶ Gets a list of available defense methods as a list of functions.
- Returns
a list of all defense functions
-
graph_tiger.defenses.
get_node_eig
(graph, k=3)¶ Get k nodes to defend based on top eigenvector centrality entries
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_ib
(graph, k=3, approx=inf)¶ Get k nodes to defend based on Initial Betweenness (IB) Removal [13].
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
approx – number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation, where n
is the number of nodes in the graph
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_id
(graph, k=3)¶ Get k nodes to defend based on Initial Degree (ID) Removal [13].
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_ns
(graph, k=3)¶ Get k nodes to defend based on the Netshield algorithm [17].
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_pr
(graph, k=3)¶ Get k nodes to defend based on top PageRank entries [15].
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_rb
(graph, k=3, approx=inf)¶ Get k nodes to defend based on Recalculated Betweenness (RB) Removal [13]
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
approx – number of nodes to approximate the betweenness centrality, k=0.1n is a good approximation, where n
is the number of nodes in the graph
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_rd
(graph, k=3)¶ Get k nodes to defend based on Recalculated Degree (RD) Removal [13].
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
get_node_rnd
(graph, k=3)¶ Randomly select k distinct nodes to defend
- Parameters
graph – an undirected NetworkX graph
k – number of nodes to defend
- Returns
a list of nodes to defend
-
graph_tiger.defenses.
main
()¶
-
graph_tiger.defenses.
rewire_edge_pref
(graph, k=3)¶ Selects node with highest degree, randomly removes a neighbor; adds edge to random node in graph [2].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to rewire
- Returns
a dictionary of the edges to be ‘removed’ and edges to be ‘added’
-
graph_tiger.defenses.
rewire_edge_pref_rnd
(graph, k=3)¶ Selects an edge, disconnects the higher degree node, and reconnects to a random one [2].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to rewire
- Returns
a dictionary of the edges to be ‘removed’ and edges to be ‘added’
-
graph_tiger.defenses.
rewire_edge_rnd
(graph, k=3)¶ Removes a random edge and adds one randomly [2].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to rewire
- Returns
a dictionary of the edges to be ‘removed’ and edges to be ‘added’
-
graph_tiger.defenses.
rewire_edge_rnd_neighbor
(graph, k=3)¶ Randomly selects a neighbor of a node and removes the edge; then adds a random edge [2].
- Parameters
graph – an undirected NetworkX graph
k – number of edges to rewire
- Returns
a dictionary of the edges to be ‘removed’ and edges to be ‘added’
-
graph_tiger.defenses.
run_defense_method
(graph, method, k=3, seed=None)¶ Runs a specified defense on an undirected graph, returning a list of nodes to defend.
- Parameters
graph – an undirected NetworkX graph
method – a string representing one of the attack methods
k – number of nodes or edges to attack
seed – sets the seed in order to obtain reproducible defense runs
- Returns
a list of nodes or edge tuples to defend