示例#1
0
    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)
示例#2
0
文件: test_node.py 项目: muxuezi/Ciw
    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)
示例#3
0
    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)
示例#4
0
    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])
示例#5
0
    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')
示例#6
0
    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)
示例#7
0
    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!')
示例#8
0
    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)])
示例#9
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')
示例#10
0
    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)
示例#11
0
 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]])
示例#12
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)
示例#13
0
 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]])
示例#14
0
文件: test_node.py 项目: muxuezi/Ciw
 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)
示例#15
0
文件: test_node.py 项目: muxuezi/Ciw
    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)
示例#16
0
文件: test_node.py 项目: muxuezi/Ciw
 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')
示例#17
0
文件: test_node.py 项目: muxuezi/Ciw
 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)
示例#18
0
 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')
示例#19
0
 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)
示例#20
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'])
示例#21
0
文件: test_node.py 项目: muxuezi/Ciw
    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)
示例#22
0
 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]])
示例#23
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)
示例#24
0
 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)
示例#25
0
 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]])
示例#26
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)
示例#27
0
 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)
示例#28
0
 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]])
示例#29
0
 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)
示例#30
0
 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]])
示例#31
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'])
示例#32
0
 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]])
示例#33
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)
示例#34
0
 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]]])
示例#35
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)