Esempio n. 1
0
 def test_availabilities(self):
     # compute and check availabilities for asymmetric network
     rates, routing, travel_times = generate_asymmetric()
     rates[0] = 2.
     network = MAS.Network(rates, routing, travel_times)
     self.assertTrue(
         is_equal(network.availabilities(), np.array([.25, .5, 1.])))
Esempio n. 2
0
 def generate_solver(self):
     # generate asymmetric network
     network = MAS.Network(*generate_asymmetric())
     attack_routing = np.array([[0., 0., 1.],[.5, 0., .5],[.5, .5, 0.]])
     nu = np.array([1., 0., 0.])
     k = 2
     return AttackRateSolver(network, attack_routing, k, nu)
Esempio n. 3
0
 def test_opt_attack_rate(self):
     network = MAS.Network(*generate_asymmetric())
     attack_routing = np.array([[0., 0., 1.], [.5, 0., .5], [.5, .5, 0.]])
     nu_init = np.array([1., 0., 0.])
     k = 2
     network.opt_attack_rate(attack_routing, k, nu_init)
     print network.new_availabilities()
Esempio n. 4
0
 def test_cplex_attack_routing_full_network(self):
     network = MAS.load_network("data/queueing_params.mat")
     k = np.where(network.new_availabilities() - 1.0 == 0.0)[0][0]
     print "availabilities before attacks", np.sum(network.new_availabilities())
     attack_rates = 5.0 * np.ones((network.size,))
     a, routing = network.opt_attack_routing(attack_rates, k, cplex=True)
     self.assertTrue(is_equal(a, network.new_availabilities()))
     print "availabilities after attacks", np.sum(network.new_availabilities())
Esempio n. 5
0
 def test_throughputs(self):
     # compute and check throughputs for uniform network
     network = MAS.Network(*generate_uniform())
     # check throughputs
     self.assertTrue(
         is_equal(network.throughputs(), (1. / 3) * np.ones((3, ))))
     # check availabilities
     self.assertTrue(is_equal(network.availabilities(), np.ones((3, ))))
 def test_to_cplex_lp_file(self):
     # same example as above
     network = MAS.Network(*generate_uniform())
     attack_rates = np.array([1., 1., 1.])
     k = 2
     string = AttackRoutingSolver(network, attack_rates,
                                  k).to_cplex_lp_file()
     print string
Esempio n. 7
0
 def test_cplex_attack_routing_small_network(self):
     # trying with CPLEX, see test_attack_routing_2() above for more details
     network = MAS.Network(*generate_uniform())
     attack_rates = np.array([1., 1., 0.])
     k = 2
     a, routing = network.opt_attack_routing(attack_rates, k, cplex=True)
     self.assertTrue(is_equal(a, network.new_availabilities()))
     self.assertTrue(abs(np.sum(a) - 5. / 3))
Esempio n. 8
0
 def test_balance(self):
     # test if the balance strategy effectively balance the network
     network = MAS.Network(*generate_asymmetric())
     tmp = np.array([.5, .5, 1.])
     self.assertTrue(is_equal(network.new_availabilities(), tmp))
     opt_rates, opt_routing = network.balance()
     tmp = np.array([1., 1., 1.])
     self.assertTrue(is_equal(network.new_availabilities(), tmp))
 def test_cplex_attack_routing_small_network(self):
     # see test_attack_routing_solver() above for details on the example
     network = MAS.Network(*generate_uniform())
     attack_rates = np.array([1., 1., 1.])
     k = 2
     a, routing = AttackRoutingSolver(network, attack_rates, k,
                                      cplex=True).solve()
     network.update(attack_rates, routing)
     self.assertTrue(abs(np.sum(network.new_availabilities()) - 7. / 3))
 def test_constraints(self):
     # generate asymmetric network with availabilities = [ 0.5  0.5  1. ]
     network = MAS.Network(*generate_asymmetric())
     # an attack strategy that results in availabilities = [ 0.25  0.5   1. ]
     attack_rates = np.array([1., 0., 0.])
     attack_routing = np.array([[0., 0., 1.], [.5, 0., .5], [.5, .5, 0.]])
     network.update(attack_rates, attack_routing)
     # fix the availability at station 2 to be equal to 1
     k = 2
     b, A = AttackRoutingSolver(network, attack_rates, k).constraints()
Esempio n. 11
0
 def test_ill_defined_MAS_network(self):
     # test network with a rate too small
     rates, routing, travel_times = generate_uniform()
     rates[0] = 0.
     network = MAS.Network(rates, routing, travel_times)
     try:
         network.check()
         self.assertTrue(False)
     except AssertionError as e:
         self.assertEqual(e.args[0], 'rates too small')
Esempio n. 12
0
 def test_cplex_attack_routing_full_network(self):
     network = MAS.load_network('data/queueing_params.mat')
     k = np.where(network.new_availabilities() - 1. == 0.0)[0][0]
     print 'availabilities before attacks', np.sum(
         network.new_availabilities())
     attack_rates = 5. * np.ones((network.size, ))
     a, routing = network.opt_attack_routing(attack_rates, k, cplex=True)
     self.assertTrue(is_equal(a, network.new_availabilities()))
     print 'availabilities after attacks', np.sum(
         network.new_availabilities())
Esempio n. 13
0
 def test_attack_routing_2(self):
     # test if the routing of attacks works given fixed attack rates
     network = MAS.Network(*generate_uniform())
     # attack rates are fixed
     attack_rates = np.array([1., 1., 0.])
     # find routing minimizing the weighted sum of availabilities
     # fix the availability at station 2 to be equal to 1
     k = 2
     # get the availabilities 'a' and routing that led to 'a'
     a, routing = network.opt_attack_routing(attack_rates, k)
     self.assertTrue(is_equal(a, network.new_availabilities(), 1e-7))
     self.assertTrue(abs(np.sum(a) - 5. / 3))
Esempio n. 14
0
 def test_adjacencies(self):
     network = MAS.Network(*generate_uniform(4))
     reachable_1 = np.array([[0, 1, 1, 0], [1, 0, 0, 1], [1, 0, 0, 1],
                             [0, 1, 1, 0]])
     reachable_2 = np.array([[0, 1, 1, 1], [1, 0, 1, 1], [1, 1, 0, 1],
                             [1, 1, 1, 0]])
     network.adjacency_1 = reachable_1
     self.assertTrue(
         is_equal(reachable_1.flatten(),
                  network.get_adjacencies(1).flatten()))
     self.assertTrue(
         is_equal(reachable_2.flatten(),
                  network.get_adjacencies(2).flatten()))
 def test_attack_routing_solver(self):
     # generate symmetric network with availabilities = [1., 1., 1.]
     # weight on the availabilities are [1., 1., 1.]
     network = MAS.Network(*generate_uniform())
     # attack rates are fixed
     attack_rates = np.array([1., 1., 1.])
     # find routing minimizing the weighted weighted sum of availabilities
     # fix the availability at station 2 to be equal to 1
     k = 2
     # get the availabilities 'a' and routing that led to 'a'
     a, routing = AttackRoutingSolver(network, attack_rates, k).solve()
     network.update(attack_rates, routing)
     self.assertTrue(abs(np.sum(network.new_availabilities()) - 7. / 3))
 def test_single_destination_attack(self):
     # generate asymmetric MAS_network with availabilities [0.5  0.5  1.0]
     # and attack on station 2 with budget = 1.0 (default)
     network = MAS.Network(*generate_asymmetric())
     sol = SingleDestinationAttack(network, 2).apply()
     attack_rates, attack_routing = sol['attack_rates'], sol['attack_routing']
     network.update(attack_rates, attack_routing)
     self.assertTrue(is_equal(network.new_availabilities(), np.array([1./3, 1./3, 1.])))
     self.assertTrue(is_equal(sol['alpha'], 1.5))
     # now attack on station 1
     sol = SingleDestinationAttack(network, 1).apply()
     attack_rates, attack_routing = sol['attack_rates'], sol['attack_routing']
     network.update(attack_rates, attack_routing)
     self.assertTrue(is_equal(network.new_availabilities(), np.array([1./3, 1., 2./3])))
     self.assertTrue(is_equal(sol['alpha'], 1.5))
     # now attack on station 1 with 0.49 budget -> inefficient attack
     network.budget = 0.49
     sol = SingleDestinationAttack(network, 1).apply()
     attack_rates, attack_routing = sol['attack_rates'], sol['attack_routing']
     network.update(attack_rates, attack_routing)
     self.assertTrue(is_equal(network.new_availabilities(), np.array([.5, .5, 1.])))        
Esempio n. 17
0
 def test_cplex_balance_full_network(self):
     # loading the full network
     network = MAS.load_network('data/queueing_params.mat')
     network.balance(cplex=True)
     self.assertTrue(
         is_equal(network.new_availabilities(), np.ones((network.size, ))))
Esempio n. 18
0
 def test_single_destination_attack(self):
     network = MAS.Network(*generate_asymmetric())
     network.single_destination_attack(2)
     self.assertTrue(
         is_equal(network.new_availabilities(),
                  np.array([1. / 3, 1. / 3, 1.])))
Esempio n. 19
0
 def test_MAS_network(self):
     # test valid network
     network = MAS.Network(*generate_uniform())
     network.check()
Esempio n. 20
0
 def test_throughputs_2(self):
     # compute and check throughputs for asymmetric network
     network = MAS.Network(*generate_asymmetric())
     self.assertTrue(
         is_equal(network.throughputs(), np.array([.25, .25, .5])))
Esempio n. 21
0
 def test_load_full_network_with_adjacency(self):
     network = MAS.load_network('data/queueing_params.mat')
     self.assertTrue(
         np.sum(network.adjacency) / (network.size * network.size) < 4.)
Esempio n. 22
0
 def test_load_full_network_with_adjacency(self):
     network = MAS.load_network("data/queueing_params.mat")
     self.assertTrue(np.sum(network.adjacency) / (network.size * network.size) < 4.0)
Esempio n. 23
0
 def test_load_network(self):
     network = MAS.load_network("data/queueing_params.mat")
     a = network.new_availabilities()
Esempio n. 24
0
 def test_mean_travel_time(self):
     network = MAS.Network(*generate_uniform())
     self.assertTrue(network.mean_travel_time == 20. / 3)
Esempio n. 25
0
 def test_cplex_balance_full_network(self):
     # loading the full network
     network = MAS.load_network("data/queueing_params.mat")
     network.balance(cplex=True)
     self.assertTrue(is_equal(network.new_availabilities(), np.ones((network.size,))))
Esempio n. 26
0
 def test_load_network(self):
     network = MAS.load_network('data/queueing_params.mat')
     a = network.new_availabilities()
Esempio n. 27
0
 def test_cplex_balance_small_network(self):
     network = MAS.Network(*generate_asymmetric())
     tmp = np.array([.5, .5, 1.])
     self.assertTrue(is_equal(network.new_availabilities(), tmp))
     network.balance(cplex=True)
     self.assertTrue(is_equal(network.new_availabilities(), np.ones((3, ))))
Esempio n. 28
0
 def test_min_attack(self):
     # test if the attacks affectively achieve the target availabilities
     target = np.array([.25, .5, 1.])
     network = MAS.Network(*generate_asymmetric())
     opt_rates, opt_routing = network.min_attack(target)
     self.assertTrue(is_equal(network.new_availabilities(), target))