def test_custom_pdf_method(self): seed(45) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/')) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 10.7) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 14.6) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 14.6) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 10.7) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 14.6) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 14.6) self.assertEqual(Q.custom_pdf([0.1, 0.4, 1.0], [9.5, 10.7, 14.6]), 9.5) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_custom_dist/')) self.assertEqual(Q.service_times[1][0](), 5.0) self.assertEqual(Q.service_times[1][0](), 6.0) self.assertEqual(Q.service_times[1][0](), 6.0) self.assertEqual(Q.service_times[1][1](), 5.0) self.assertEqual(Q.service_times[1][1](), 5.0) self.assertEqual(Q.service_times[1][1](), 6.0) self.assertEqual(Q.service_times[2][1](), 1.3) self.assertEqual(Q.service_times[2][1](), 1.3) self.assertEqual(Q.service_times[2][1](), 2.1) self.assertEqual(Q.service_times[2][1](), 1.9) self.assertEqual(Q.service_times[2][1](), 1.5) self.assertEqual(Q.service_times[2][1](), 2.1) self.assertEqual(Q.service_times[2][1](), 1.9)
def test_init_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N = ciw.Node(1, Q) self.assertEqual(N.mu, [['Exponential', 7.0], ['Exponential', 7.0], ['Deterministic', 0.3]]) self.assertEqual(N.c, 9) self.assertEqual(N.transition_row, [[0.1, 0.2, 0.1, 0.4], [0.6, 0.0, 0.0, 0.2], [0.0, 0.0, 0.4, 0.3]]) self.assertEqual(N.next_event_date, 'Inf') self.assertEqual(N.individuals, []) self.assertEqual(N.id_number, 1) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_dynamic_classes/parameters.yml')) N1 = Q.transitive_nodes[0] self.assertEqual(N1.class_change, [[0.5, 0.5], [0.5, 0.5]]) N2 = Q.transitive_nodes[1] self.assertEqual(N2.class_change, [[1.0, 0.0], [0.0, 1.0]]) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_server_schedule/parameters.yml')) N = Q.transitive_nodes[0] self.assertEqual(N.scheduled_servers, True) self.assertEqual(N.cyclelength, 100) self.assertEqual(N.c, 1) self.assertEqual(N.masterschedule, [30, 60, 90, 100, 130, 160, 190, 200, 230, 260, 290, 300, 330, 360, 390]) self.assertEqual(N.next_event_date, 30)
def test_detect_deadlock_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) nodes = ['A', 'B', 'C', 'D', 'E'] connections = [('A', 'D'), ('A', 'B'), ('B', 'E'), ('C', 'B'), ('E', 'C')] for nd in nodes: Q.digraph.add_node(nd) for cnctn in connections: Q.digraph.add_edge(cnctn[0], cnctn[1]) self.assertEqual(Q.detect_deadlock(), True) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) nodes = ['A', 'B', 'C', 'D'] connections = [('A', 'B'), ('A', 'C'), ('B', 'C'), ('B', 'D')] for nd in nodes: Q.digraph.add_node(nd) for cnctn in connections: Q.digraph.add_edge(cnctn[0], cnctn[1]) self.assertEqual(Q.detect_deadlock(), False) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) nodes = ['A', 'B'] for nd in nodes: Q.digraph.add_node(nd) self.assertEqual(Q.detect_deadlock(), False) connections = [('A', 'A')] for cnctn in connections: Q.digraph.add_edge(cnctn[0], cnctn[1]) self.assertEqual(Q.detect_deadlock(), True)
def test_init_method_from_dict(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) self.assertEqual(Q.lmbda, [[['Exponential', 3.0], ['Exponential', 7.0], ['Exponential', 4.0], ['Exponential', 1.0]], [['Exponential', 2.0], ['Exponential', 3.0], ['Exponential', 6.0], ['Exponential', 4.0]], [['Exponential', 2.0], ['Exponential', 1.0], ['Exponential', 2.0], ['Exponential', 0.5]]]) self.assertEqual(Q.mu, [[['Exponential', 7.0], ['Exponential', 7.0], ['Gamma', 0.4, 0.6], ['Deterministic', 0.5]], [['Exponential', 7.0], ['Triangular', 0.1, 0.85, 0.8], ['Exponential', 8.0], ['Exponential', 5.0]], [['Deterministic', 0.3], ['Deterministic', 0.2], ['Exponential', 8.0], ['Exponential', 9.0]]]) self.assertEqual(Q.c, [9, 10, 8, 8]) self.assertEqual(Q.transition_matrix, [[[0.1, 0.2, 0.1, 0.4], [0.2, 0.2, 0.0, 0.1], [0.0, 0.8, 0.1, 0.1], [0.4, 0.1, 0.1, 0.0]], [[0.6, 0.0, 0.0, 0.2], [0.1, 0.1, 0.2, 0.2], [0.9, 0.0, 0.0, 0.0], [0.2, 0.1, 0.1, 0.1]], [[0.0, 0.0, 0.4, 0.3], [0.1, 0.1, 0.1, 0.1], [0.1, 0.3, 0.2, 0.2], [0.0, 0.0, 0.0, 0.3]]]) self.assertEqual([str(obs) for obs in Q.nodes], ['Arrival Node', 'Node 1', 'Node 2', 'Node 3', 'Node 4', 'Exit Node']) self.assertEqual(Q.max_simulation_time, 150) self.assertEqual(Q.class_change_matrix, 'NA') self.assertEqual(Q.schedules, [False, False, False, False]) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_dynamic_classes/parameters.yml')) self.assertEqual(Q.class_change_matrix, [[[0.5, 0.5], [0.5, 0.5]], [[1.0, 0.0], [0.0, 1.0]]]) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_server_schedule/parameters.yml')) self.assertEqual(Q.schedules, [True, False])
def test_writing_data_files(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) Q.max_simulation_time = 50 Q.simulate_until_max_time() files = [x for x in os.walk( 'ciw/tests/datafortesting/logs_test_for_simulation/')][0][2] self.assertEqual('data.csv' in files, False) Q.write_records_to_file( 'ciw/tests/datafortesting/logs_test_for_simulation/data.csv') files = [x for x in os.walk( 'ciw/tests/datafortesting/logs_test_for_simulation/')][0][2] self.assertEqual('data.csv' in files, True) os.remove('ciw/tests/datafortesting/logs_test_for_simulation/data.csv') Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_mm1/parameters.yml')) Q.max_simulation_time = 50 Q.simulate_until_max_time() files = [x for x in os.walk( 'ciw/tests/datafortesting/logs_test_for_mm1/')][0][2] self.assertEqual('data_1.csv' in files, False) Q.write_records_to_file( 'ciw/tests/datafortesting/logs_test_for_mm1/data_1.csv', False) files = [x for x in os.walk( 'ciw/tests/datafortesting/logs_test_for_mm1/')][0][2] self.assertEqual('data_1.csv' in files, True) os.remove('ciw/tests/datafortesting/logs_test_for_mm1/data_1.csv')
def test_update_next_event_date_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/')) N = Q.transitive_nodes[0] self.assertEqual(N.next_event_date, 'Inf') self.assertEqual(N.individuals, []) N.update_next_event_date(0.0) self.assertEqual(N.next_event_date, 'Inf') ind1 = ciw.Individual(1) ind1.arrival_date = 0.3 ind1.service_time = 0.2 ind1.service_end_date = 0.5 N.next_event_date = 0.3 N.individuals = [ind1] N.update_next_event_date(N.next_event_date) self.assertEqual(N.next_event_date, 0.5) ind2 = ciw.Individual(2) ind2.arrival_date = 0.4 ind2.service_time = 0.2 ind2.service_end_date = 0.6 ind2.exit_date = False N.individuals = [ind1, ind2] N.update_next_event_date(N.next_event_date) self.assertEqual(N.next_event_date, 0.6) ind2.exit_date = 0.9 # shouldn't affect next_event_date N.update_next_event_date(N.next_event_date) self.assertEqual(N.next_event_date, 'Inf') Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_server_schedule/')) N = Q.transitive_nodes[0] self.assertEqual(N.next_event_date, 30) self.assertEqual(N.individuals, []) N.update_next_event_date(0.0) self.assertEqual(N.next_event_date, 30) ind1 = ciw.Individual(1) ind1.arrival_date = 0.3 ind1.service_time = 0.2 ind1.service_end_date = 0.5 N.next_event_date = 0.3 N.individuals = [ind1] N.update_next_event_date(N.next_event_date) self.assertEqual(N.next_event_date, 0.5) ind2 = ciw.Individual(2) ind2.arrival_date = 0.7 ind2.service_time = 0.2 ind2.service_end_date = 0.9 ind2.exit_date = False N.individuals = [ind1, ind2] N.update_next_event_date(N.next_event_date) self.assertEqual(N.next_event_date, 30)
def test_repr_method(self): params1 = ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml') Q = ciw.Simulation(params1) self.assertEqual(str(Q), 'Simulation') params2 = ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml') params2['Name'] = 'My special simulation instance!' Q = ciw.Simulation(params2) self.assertEqual(str(Q), 'My special simulation instance!')
def test_simulate_until_max_time_method(self): seed(3) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/')) Q.simulate_until_max_time() L = Q.get_all_individuals() self.assertEqual(round(L[300].data_records.values()[0][0].service_start_date, 8), 6.04730086) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_dynamic_classes/')) Q.simulate_until_max_time() L = Q.get_all_individuals() drl = [] for dr in L[0].data_records[1]: drl.append((dr.customer_class, dr.service_time)) self.assertEqual(drl, [(1, 10.0), (1, 10.0), (0, 5.0), (1, 10.0)])
def test_find_next_active_node_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/')) i = 0 for node in Q.nodes[:-1]: node.next_event_date = i i += 1 self.assertEqual(str(Q.find_next_active_node()), 'Arrival Node') Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/')) i = 10 for node in Q.nodes[:-1]: node.next_event_date = i i -= 1 self.assertEqual(str(Q.find_next_active_node()), 'Node 4')
def test_check_if_shiftchange_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_server_schedule/parameters.yml')) N = Q.transitive_nodes[0] N.next_event_date = 12.0 self.assertEqual(N.check_if_shiftchange(), False) N.next_event_date = 30.0 self.assertEqual(N.check_if_shiftchange(), True) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N = Q.transitive_nodes[0] N.next_event_date = 12.0 self.assertEqual(N.check_if_shiftchange(), False) N.next_event_date = 30.0 self.assertEqual(N.check_if_shiftchange(), False)
def test_naive_change_state_block_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) B = ciw.NaiveTracker(Q) B.state = [[1, 0], [0, 0], [0, 0], [0, 0]] B.change_state_block(1, 1, 2) self.assertEqual(B.state, [[0, 1], [0, 0], [0, 0], [0, 0]])
def test_base_change_state_release_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) B = ciw.StateTracker(Q) self.assertEqual(B.state, None) B.change_state_release(1, 1, 1, True) self.assertEqual(B.state, None)
def test_matrix_change_state_block_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) B = ciw.MatrixTracker(Q) B.state = [[[[], [], [], []], [[], [], [], []], [[], [], [], []], [[], [], [], []]], [2, 3, 1, 0]] B.change_state_block(1, 3, 2) self.assertEqual(B.state, [[[[], [], [1], []], [[], [], [], []], [[], [], [], []], [[], [], [], []]], [2, 3, 1, 0]]) B.change_state_block(2, 1, 0) self.assertEqual(B.state, [[[[], [], [1], []], [[2], [], [], []], [[], [], [], []], [[], [], [], []]], [2, 3, 1, 0]]) B.change_state_block(1, 3, 0) self.assertEqual(B.state, [[[[], [], [1, 3], []], [[2], [], [], []], [[], [], [], []], [[], [], [], []]], [2, 3, 1, 0]])
def test_begin_service_if_possible_release_method(self): set_seed(50) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_deadlock_sim/parameters.yml')) inds = [ciw.Individual(i) for i in xrange(30)] Q.transitive_nodes[0].individuals = inds ind = Q.transitive_nodes[0].individuals[0] ind.service_time = 3.14 ind.arrival_date = 100.0 self.assertEqual(Q.digraph.nodes(), ['Server 5 at Node 2', 'Server 5 at Node 1', 'Server 3 at Node 2', 'Server 1 at Node 2', 'Server 1 at Node 1', 'Server 2 at Node 1', 'Server 2 at Node 2', 'Server 3 at Node 1', 'Server 4 at Node 1', 'Server 4 at Node 2']) self.assertEqual(ind.arrival_date, 100.0) self.assertEqual(ind.service_time, 3.14) self.assertEqual(ind.service_start_date, False) self.assertEqual(ind.service_end_date, False) Q.transitive_nodes[0].begin_service_if_possible_release(200.0) self.assertEqual(ind.arrival_date, 100.0) self.assertEqual(round(ind.service_time ,5), 3.14) self.assertEqual(ind.service_start_date, 200.0) self.assertEqual(round(ind.service_end_date, 5), 203.14)
def test_change_shift_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_server_schedule/parameters.yml')) N = Q.transitive_nodes[0] N.next_event_date = 30 self.assertEqual([str(obs) for obs in N.servers], ['Server 1 at Node 1']) self.assertEqual([obs.busy for obs in N.servers], [False]) self.assertEqual([obs.offduty for obs in N.servers], [False]) self.assertEqual(N.c, 1) N.change_shift() self.assertEqual([str(obs) for obs in N.servers], ['Server 2 at Node 1', 'Server 3 at Node 1']) self.assertEqual([obs.busy for obs in N.servers], [False, False]) self.assertEqual([obs.offduty for obs in N.servers], [False, False]) self.assertEqual(N.c, 2) N.servers[0].busy = True N.next_event_date = 90 N.change_shift() self.assertEqual([str(obs) for obs in N.servers], ['Server 2 at Node 1', 'Server 4 at Node 1', 'Server 5 at Node 1', 'Server 6 at Node 1']) self.assertEqual([obs.busy for obs in N.servers], [True, False, False, False]) self.assertEqual([obs.offduty for obs in N.servers], [True, False, False, False]) self.assertEqual(N.c, 3)
def test_repr_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N1 = ciw.Node(1, Q) N2 = ciw.Node(2, Q) self.assertEqual(str(N1), 'Node 1') self.assertEqual(str(N2), 'Node 2')
def test_begin_service_if_possible_accept_method(self): set_seed(50) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_deadlock_sim/parameters.yml')) ind = ciw.Individual(1) self.assertEqual(Q.digraph.nodes(), ['Server 5 at Node 2', 'Server 5 at Node 1', 'Server 3 at Node 2', 'Server 1 at Node 2', 'Server 1 at Node 1', 'Server 2 at Node 1', 'Server 2 at Node 2', 'Server 3 at Node 1', 'Server 4 at Node 1', 'Server 4 at Node 2']) self.assertEqual(ind.arrival_date, False) self.assertEqual(ind.service_time, False) self.assertEqual(ind.service_start_date, False) self.assertEqual(ind.service_end_date, False) Q.transitive_nodes[0].begin_service_if_possible_accept(ind, 300) self.assertEqual(ind.arrival_date, 300) self.assertEqual(round(ind.service_time, 5), 0.03382) self.assertEqual(ind.service_start_date, 300) self.assertEqual(round(ind.service_end_date, 5), 300.03382)
def test_no_arrivals_example(self): params = ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml') params['Arrival_distributions']['Class 0'] = ['NoArrivals', ['Exponential', 1.0], ['Exponential', 4.0], ['Exponential', 3.5]] Q = ciw.Simulation(params) AN = Q.nodes[0] self.assertEqual(AN.simulation.lmbda[0][0], 'NoArrivals') self.assertEqual(AN.sample_next_event_time(1, 0), 'Inf')
def test_no_arrivals_example(self): params = ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/') params['Arrival_rates']['Class 0'] = [0.0, 1.0, 4.0, 3.5] Q = ciw.Simulation(params) AN = Q.nodes[0] self.assertEqual(AN.simulation.lmbda[0][0], 0.0) self.assertEqual(AN.sample_next_event_time(1, 0), 0.0)
def test_add_new_server_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_server_schedule/parameters.yml')) N = Q.transitive_nodes[0] self.assertEqual([str(obs) for obs in N.servers], ['Server 1 at Node 1']) s_indx = 3 N.add_new_server(s_indx,1) self.assertEqual([str(obs) for obs in N.servers], ['Server 1 at Node 1', 'Server 2 at Node 1', 'Server 3 at Node 1', 'Server 4 at Node 1'])
def test_accept_method(self): set_seed(6) Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N = Q.transitive_nodes[0] N.next_event_date = 0.0 self.assertEqual(N.individuals, []) ind1 = ciw.Individual(1) ind2 = ciw.Individual(2) ind3 = ciw.Individual(3) ind4 = ciw.Individual(4) ind5 = ciw.Individual(5) ind6 = ciw.Individual(6) ind7 = ciw.Individual(7) ind8 = ciw.Individual(8) ind9 = ciw.Individual(9) ind10 = ciw.Individual(10) N.accept(ind1, 0.01) self.assertEqual([str(obs) for obs in N.individuals], ['Individual 1']) self.assertEqual(ind1.arrival_date, 0.01) self.assertEqual(ind1.service_start_date, 0.01) self.assertEqual(round(ind1.service_time, 5), 0.18695) self.assertEqual(round(ind1.service_end_date, 5), 0.19695) N.accept(ind2, 0.02) N.accept(ind3, 0.03) N.accept(ind4, 0.04) self.assertEqual([str(obs) for obs in N.individuals], ['Individual 1', 'Individual 2', 'Individual 3', 'Individual 4']) self.assertEqual(round(ind4.arrival_date, 5), 0.04) self.assertEqual(round(ind4.service_start_date, 5), 0.04) self.assertEqual(round(ind4.service_time, 5), 0.1637) self.assertEqual(round(ind4.service_end_date, 5), 0.2037) N.accept(ind5, 0.05) N.accept(ind6, 0.06) N.accept(ind7, 0.07) N.accept(ind8, 0.08) N.accept(ind9, 0.09) N.accept(ind10, 0.1) self.assertEqual([str(obs) for obs in N.individuals], ['Individual 1', 'Individual 2', 'Individual 3', 'Individual 4', 'Individual 5', 'Individual 6', 'Individual 7', 'Individual 8', 'Individual 9', 'Individual 10']) self.assertEqual(round(ind10.arrival_date, 5), 0.1) self.assertEqual(ind10.service_start_date, False) self.assertEqual(round(ind10.service_time, 5), 0.16534)
def test_change_state_accept_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) Q.state = [[0, 0], [0, 0], [2, 1], [0, 0]] N = Q.transitive_nodes[2] N.change_state_accept() self.assertEqual(Q.state, [[0, 0], [0, 0], [3, 1], [0, 0]]) N.change_state_accept() self.assertEqual(Q.state, [[0, 0], [0, 0], [4, 1], [0, 0]])
def test_init_method(self): seed(5) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N = ciw.ArrivalNode(Q) self.assertEqual(round(N.next_event_date, 5), 0.00440) self.assertEqual(N.number_of_individuals, 0) dates_dict = {1: {0: 0.2110410999, 1: 0.1415614623, 2: 0.3923690877}, 2: {0: 0.1218825551, 1: 0.0044003133, 2: 0.2442775601}, 3: {0: 0.0819463473, 1: 0.4135097542, 2: 0.7256307839}, 4: {0: 0.1738823223, 1: 0.3988184145, 2: 0.2987813628}} self.assertEqual({nd:{obs:round(N.next_event_dates_dict[nd][obs], 10) for obs in N.next_event_dates_dict[nd]} for nd in N.next_event_dates_dict}, dates_dict)
def test_base_accept_method_within_simulation(self): params = ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml') Q = ciw.Simulation(params) N = Q.transitive_nodes[2] self.assertEqual(Q.statetracker.state, None) N.accept(ciw.Individual(3, 2), 45.6) self.assertEqual(Q.statetracker.state, None)
def test_change_state_block_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/')) Q.state = [[0, 0], [0, 0], [2, 1], [0, 0]] N = Q.transitive_nodes[2] N.change_state_block() self.assertEqual(Q.state, [[0, 0], [0, 0], [1, 2], [0, 0]]) N.change_state_block() self.assertEqual(Q.state, [[0, 0], [0, 0], [0, 3], [0, 0]])
def test_base_block_method_within_simulation(self): params = ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml') Q = ciw.Simulation(params) N = Q.transitive_nodes[2] self.assertEqual(Q.statetracker.state, None) N.block_individual(ciw.Individual(1), Q.nodes[1]) self.assertEqual(Q.statetracker.state, None)
def test_initialise_next_event_dates_dict_method(self): seed(6) Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N = ciw.ArrivalNode(Q) dates_dict_1 = {1: {0: 0.4362282541, 1: 0.2672232406, 2: 0.3864256273}, 2: {0: 0.1636952311, 1: 0.0714709565, 2: 0.8065738414}, 3: {0: 0.4088480190, 1: 0.0514323248, 2: 0.8132038176}, 4: {0: 1.1573751438, 1: 0.4649276714, 2: 0.8176876727}} dates_dict_2 = {1: {0: 0.0325870775, 1: 0.8054262558, 2: 0.8168179515}, 2: {0: 0.0841671381, 1: 0.0328245299, 2: 0.2196023847}, 3: {0: 0.2519089068, 1: 0.0573597814, 2: 1.5117882121}, 4: {0: 0.8881158889, 1: 0.0560592622, 2: 2.1307650868}} self.assertEqual({nd:{obs:round(N.next_event_dates_dict[nd][obs], 10) for obs in N.next_event_dates_dict[nd]} for nd in N.next_event_dates_dict}, dates_dict_1) N.initialise_next_event_dates_dict() self.assertEqual({nd:{obs:round(N.next_event_dates_dict[nd][obs], 10) for obs in N.next_event_dates_dict[nd]} for nd in N.next_event_dates_dict}, dates_dict_2)
def test_naive_change_state_release_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) B = ciw.NaiveTracker(Q) B.state = [[2, 1], [3, 0], [1, 0], [4, 4]] B.change_state_release(1, 1, 2, False) self.assertEqual(B.state, [[1, 1], [3, 0], [1, 0], [4, 4]]) B.change_state_release(1, 1, 2, True) self.assertEqual(B.state, [[1, 0], [3, 0], [1, 0], [4, 4]])
def test_init_method(self): Q = ciw.Simulation(ciw.load_parameters('ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) N = Q.transitive_nodes[1] s = ciw.Server(N, 3) self.assertEqual(s.id_number, 3) self.assertEqual(s.node, N) self.assertEqual(s.node.id_number, 2) self.assertEqual(s.cust, False) self.assertEqual(s.busy, False) self.assertEqual(s.offduty, False)
def test_matrix_init_method(self): Q = ciw.Simulation(ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml')) B = ciw.MatrixTracker(Q) self.assertEqual(B.simulation, Q) self.assertEqual(B.state, [[[[], [], [], []], [[], [], [], []], [[], [], [], []], [[], [], [], []]], [0, 0, 0, 0]])
def test_kill_server_method(self): Q = ciw.Simulation( ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_server_schedule/parameters.yml' )) N = Q.transitive_nodes[0] s = N.servers[0] self.assertEqual([str(obs) for obs in N.servers], ['Server 1 at Node 1']) N.kill_server(s) N.highest_id += 1 self.assertEqual(N.servers, []) N.next_event_date = 30 N.have_event() self.assertEqual([str(obs) for obs in N.servers], ['Server 2 at Node 1', 'Server 3 at Node 1']) ind = ciw.Individual(666) N.attach_server(N.servers[0], ind) N.servers[0].offduty = True self.assertEqual([obs.busy for obs in N.servers], [True, False]) self.assertEqual([obs.offduty for obs in N.servers], [True, False]) N.detatch_server(N.servers[0], ind) self.assertEqual([str(obs) for obs in N.servers], ['Server 3 at Node 1'])
def test_naive_release_method_within_simulation(self): params = ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml') params['Tracker'] = 'Naive' Q = ciw.Simulation(params) N = Q.transitive_nodes[2] inds = [ciw.Individual(i) for i in xrange(5)] N.individuals = inds for ind in N.individuals: srvr = N.find_free_server() N.attach_server(srvr, ind) Q.statetracker.state = [[4, 1], [3, 0], [5, 1], [0, 0]] self.assertEqual(Q.statetracker.state, [[4, 1], [3, 0], [5, 1], [0, 0]]) N.release(0, Q.nodes[1], 43.11) self.assertEqual(Q.statetracker.state, [[5, 1], [3, 0], [4, 1], [0, 0]]) N.individuals[1].is_blocked = True N.release(1, Q.nodes[1], 46.72) self.assertEqual(Q.statetracker.state, [[6, 1], [3, 0], [4, 0], [0, 0]]) N.release(1, Q.nodes[-1], 46.72) self.assertEqual(Q.statetracker.state, [[6, 1], [3, 0], [3, 0], [0, 0]])
def test_initialise_event_dates_dict_method(self): set_seed(6) Q = ciw.Simulation( ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml' )) N = ciw.ArrivalNode(Q) dates_dict_1 = { 1: { 0: 0.4362282541, 1: 0.2672232406, 2: 0.3864256273 }, 2: { 0: 0.1636952311, 1: 0.0714709565, 2: 0.8065738414 }, 3: { 0: 0.4088480190, 1: 0.0514323248, 2: 0.8132038176 }, 4: { 0: 1.1573751438, 1: 0.4649276714, 2: 0.8176876727 } } dates_dict_2 = { 1: { 0: 0.0325870775, 1: 0.8054262558, 2: 0.8168179515 }, 2: { 0: 0.0841671381, 1: 0.0328245299, 2: 0.2196023847 }, 3: { 0: 0.2519089068, 1: 0.0573597814, 2: 1.5117882121 }, 4: { 0: 0.8881158889, 1: 0.0560592622, 2: 2.1307650868 } } self.assertEqual( { nd: { obs: round(N.event_dates_dict[nd][obs], 10) for obs in N.event_dates_dict[nd] } for nd in N.event_dates_dict }, dates_dict_1) N.initialise_event_dates_dict() self.assertEqual( { nd: { obs: round(N.event_dates_dict[nd][obs], 10) for obs in N.event_dates_dict[nd] } for nd in N.event_dates_dict }, dates_dict_2)
def test_mm1_from_file(self): Q = ciw.Simulation( ciw.load_parameters( 'ciw/tests/datafortesting/logs_test_for_mm1/parameters.yml')) self.assertEqual(Q.transition_matrix, [[[0.0]]])
def test_change_customer_class_method(self): ciw.seed(14) Q = ciw.Simulation( ciw.create_network_from_yml( 'ciw/tests/testing_parameters/params_change_class.yml')) N1 = Q.transitive_nodes[0] ind = ciw.Individual(254, 0) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.previous_class, 0) # Test for case of having priorities ciw.seed(14) parameters_dictionary = ciw.load_parameters( 'ciw/tests/testing_parameters/params_priorities.yml') class_change_matrix = { 'Node 1': [[.5, .5], [.25, .75]], 'Node 2': [[1, 0], [0, 1]] } parameters_dictionary['Class_change_matrices'] = class_change_matrix Q = ciw.Simulation(ciw.create_network(**parameters_dictionary)) N1 = Q.transitive_nodes[0] ind = ciw.Individual(254, 0) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.priority_class, 0) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.priority_class, 0) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.priority_class, 0) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.priority_class, 1) self.assertEqual(ind.previous_class, 0) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.priority_class, 1) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.priority_class, 1) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.priority_class, 1) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.priority_class, 1) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 1) self.assertEqual(ind.priority_class, 1) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.priority_class, 0) self.assertEqual(ind.previous_class, 1) N1.change_customer_class(ind) self.assertEqual(ind.customer_class, 0) self.assertEqual(ind.priority_class, 0) self.assertEqual(ind.previous_class, 0)