Example #1
0
 def test_write_individual_record_method(self):
     ciw.seed(7)
     Q = ciw.Simulation(ciw.create_network_from_yml(
         'ciw/tests/testing_parameters/params.yml'))
     N = Q.transitive_nodes[0]
     ind = ciw.Individual(6)
     Q.current_time = 3
     N.accept(ind)
     ind.service_start_date = 3.5
     ind.service_end_date = 5.5
     ind.exit_date = 9
     N.write_individual_record(ind)
     self.assertEqual(ind.data_records[0].arrival_date, 3)
     self.assertEqual(ind.data_records[0].waiting_time, 0.5)
     self.assertEqual(ind.data_records[0].service_start_date, 3.5)
     self.assertEqual(ind.data_records[0].service_time, 2)
     self.assertEqual(ind.data_records[0].service_end_date, 5.5)
     self.assertEqual(ind.data_records[0].time_blocked, 3.5)
     self.assertEqual(ind.data_records[0].exit_date, 9)
     self.assertEqual(ind.data_records[0].customer_class, 0)
Example #2
0
 def test_block_individual_method(self):
     seed(4)
     Q = ciw.Simulation(
         ciw.load_parameters(
             'ciw/tests/datafortesting/logs_test_for_deadlock_sim/parameters.yml'
         ))
     inds = [ciw.Individual(i + 1) for i in range(7)]
     N1 = Q.transitive_nodes[0]
     N1.individuals = inds[:6]
     N2 = Q.transitive_nodes[1]
     N2.accept(inds[6], 2)
     self.assertEqual(inds[6].is_blocked, False)
     self.assertEqual(N1.blocked_queue, [])
     self.assertEqual(Q.digraph.edges(), [])
     N2.block_individual(inds[6], N1)
     self.assertEqual(inds[6].is_blocked, True)
     [(2, 7)]
     self.assertEqual(Q.digraph.edges(),
                      [('Server 1 at Node 2', 'Server 2 at Node 1'),
                       ('Server 1 at Node 2', 'Server 1 at Node 1')])
Example #3
0
 def test_finish_service_method(self):
     ciw.seed(4)
     Q = ciw.Simulation(
         ciw.create_network('ciw/tests/testing_parameters/params.yml'))
     N = Q.transitive_nodes[0]
     inds = [ciw.Individual(i + 1) for i in range(3)]
     for current_time in [0.01, 0.02, 0.03]:
         N.accept(inds[int(current_time * 100 - 1)], current_time)
     self.assertEqual([str(obs) for obs in N.all_individuals],
                      ['Individual 1', 'Individual 2', 'Individual 3'])
     self.assertEqual([[str(obs) for obs in pr_cls]
                       for pr_cls in N.individuals],
                      [['Individual 1', 'Individual 2', 'Individual 3']])
     N.update_next_event_date(0.03)
     self.assertEqual(round(N.next_event_date, 5), 0.03604)
     N.finish_service()
     self.assertEqual([str(obs) for obs in N.all_individuals],
                      ['Individual 1', 'Individual 3'])
     self.assertEqual([[str(obs) for obs in pr_cls]
                       for pr_cls in N.individuals],
                      [['Individual 1', 'Individual 3']])
Example #4
0
 def test_matrix_release_method_within_simulation(self):
     params = ciw.create_network_from_yml(
         'ciw/tests/testing_parameters/params.yml')
     Q = ciw.Simulation(params, tracker='Matrix')
     N = Q.transitive_nodes[2]
     inds = [ciw.Individual(i) for i in range(5)]
     N.individuals = [inds]
     for ind in N.individuals[0]:
         srvr = N.find_free_server()
         N.attach_server(srvr, ind)
     Q.statetracker.state = [[[[],  [2], [], []],
                              [[],  [],  [], []],
                              [[1], [],  [], []],
                              [[],  [],  [], []]],
                              [5, 3, 6, 0]]
     Q.statetracker.increment = 3
     self.assertEqual(Q.statetracker.state, [[[[],  [2], [], []],
                                              [[],  [],  [], []],
                                              [[1], [],  [], []],
                                              [[],  [],  [], []]],
                                              [5, 3, 6, 0]])
     N.release(0, Q.nodes[1], 43.11)
     self.assertEqual(Q.statetracker.state, [[[[],  [2], [], []],
                                              [[],  [],  [], []],
                                              [[1], [],  [], []],
                                              [[],  [],  [], []]],
                                              [6, 3, 5, 0]])
     N.all_individuals[1].is_blocked = True
     N.release(1, Q.nodes[1], 46.72)
     self.assertEqual(Q.statetracker.state, [[[[], [1], [], []],
                                              [[], [],  [], []],
                                              [[], [],  [], []],
                                              [[], [],  [], []]],
                                              [7, 3, 4, 0]])
     N.release(1, Q.nodes[-1], 48.39)
     self.assertEqual(Q.statetracker.state, [[[[], [1], [], []],
                                              [[], [],  [], []],
                                              [[], [],  [], []],
                                              [[], [],  [], []]],
                                              [7, 3, 3, 0]])
Example #5
0
 def test_kill_server_method(self):
     Q = ciw.Simulation(
         ciw.create_network_from_yml(
             'ciw/tests/testing_parameters/params_schedule.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)
     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'])
Example #6
0
 def test_release_method(self):
     set_seed(4)
     Q = ciw.Simulation(
         ciw.load_parameters(
             'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml'
         ))
     N = Q.transitive_nodes[0]
     inds = [ciw.Individual(i + 1) for i in xrange(3)]
     for current_time in [0.01, 0.02, 0.03]:
         N.accept(inds[int(current_time * 100 - 1)], current_time)
     self.assertEqual([str(obs) for obs in N.individuals],
                      ['Individual 1', 'Individual 2', 'Individual 3'])
     N.update_next_event_date(0.03)
     self.assertEqual(round(N.next_event_date, 5), 0.03604)
     N.individuals[1].exit_date = 0.04
     N.update_next_event_date(N.next_event_date + 0.00001)
     self.assertEqual(round(N.next_event_date, 5), 0.03708)
     N.release(1, Q.transitive_nodes[1], N.next_event_date)
     self.assertEqual([str(obs) for obs in N.individuals],
                      ['Individual 1', 'Individual 3'])
     N.update_next_event_date(N.next_event_date + 0.00001)
     self.assertEqual(round(N.next_event_date, 5), 0.06447)
Example #7
0
 def test_write_individual_record_method(self):
     set_seed(7)
     Q = ciw.Simulation(
         ciw.load_parameters(
             'ciw/tests/datafortesting/logs_test_for_simulation/parameters.yml'
         ))
     N = Q.transitive_nodes[0]
     ind = ciw.Individual(6)
     N.accept(ind, 3)
     ind.service_start_date = 3.5
     ind.exit_date = 9
     N.write_individual_record(ind)
     self.assertEqual(ind.data_records[1][0].arrival_date, 3)
     self.assertEqual(ind.data_records[1][0].wait, 0.5)
     self.assertEqual(ind.data_records[1][0].service_start_date, 3.5)
     self.assertEqual(round(ind.data_records[1][0].service_time, 5),
                      0.07894)
     self.assertEqual(round(ind.data_records[1][0].service_end_date, 5),
                      3.57894)
     self.assertEqual(round(ind.data_records[1][0].blocked, 5), 5.42106)
     self.assertEqual(ind.data_records[1][0].exit_date, 9)
     self.assertEqual(ind.data_records[1][0].customer_class, 0)
Example #8
0
 def test_change_customer_class_method(self):
     set_seed(14)
     Q = ciw.Simulation(
         ciw.load_parameters(
             'ciw/tests/datafortesting/logs_test_for_dynamic_classes/parameters.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, 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, 1)
     self.assertEqual(ind.previous_class, 1)
     N1.change_customer_class(ind)
     self.assertEqual(ind.customer_class, 0)
     self.assertEqual(ind.previous_class, 1)
Example #9
0
 def test_block_individual_method(self):
     ciw.seed(4)
     Q = ciw.Simulation(ciw.create_network_from_yml(
         'ciw/tests/testing_parameters/params_deadlock.yml'),
         deadlock_detector='StateDigraph')
     inds = [ciw.Individual(i + 1) for i in range(7)]
     N1 = Q.transitive_nodes[0]
     N1.individuals = [inds[:6]]
     N2 = Q.transitive_nodes[1]
     N2.accept(inds[6], 2)
     self.assertEqual(inds[6].is_blocked, False)
     self.assertEqual(N1.blocked_queue, [])
     self.assertEqual(Q.deadlock_detector.statedigraph.edges(), [])
     N2.block_individual(inds[6], N1)
     self.assertEqual(inds[6].is_blocked, True)
     [(2, 7)]
     self.assertEqual(set(Q.deadlock_detector.statedigraph.edges()),
         set([('Server 1 at Node 2', 'Server 2 at Node 1'),
              ('Server 1 at Node 2', 'Server 5 at Node 1'),
              ('Server 1 at Node 2', 'Server 3 at Node 1'),
              ('Server 1 at Node 2', 'Server 1 at Node 1'),
              ('Server 1 at Node 2', 'Server 4 at Node 1')]))
Example #10
0
    def test_next_node_method(self):
        ciw.seed(6)
        Q = ciw.Simulation(
            ciw.create_network_from_yml(
                'ciw/tests/testing_parameters/params.yml'))
        node = Q.transitive_nodes[0]
        ind = ciw.Individual(22)
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Exit Node')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Exit Node')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')

        ciw.seed(54)
        Q = ciw.Simulation(
            ciw.create_network_from_yml(
                'ciw/tests/testing_parameters/params.yml'))
        node = Q.transitive_nodes[2]
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 4')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 3')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
        self.assertEqual(str(node.next_node(ind)), 'Node 2')
Example #11
0
 def test_matrix_block_method_within_simulation(self):
     params = ciw.create_network_from_yml(
         'ciw/tests/testing_parameters/params.yml')
     Q = ciw.Simulation(params, tracker='Matrix')
     N = Q.transitive_nodes[2]
     Q.statetracker.state = [[[[],  [2], [], []],
                              [[],  [],  [], []],
                              [[1], [],  [], []],
                              [[],  [],  [], []]],
                              [5, 3, 6, 0]]
     Q.statetracker.increment = 3
     self.assertEqual(Q.statetracker.state, [[[[],  [2], [], []],
                                              [[],  [],  [], []],
                                              [[1], [],  [], []],
                                              [[],  [],  [], []]],
                                              [5, 3, 6, 0]])
     N.block_individual(ciw.Individual(1), Q.nodes[1])
     self.assertEqual(Q.statetracker.state, [[[[],     [2], [], []],
                                              [[],     [],  [], []],
                                              [[1, 3], [],  [], []],
                                              [[],     [],  [], []]],
                                              [5, 3, 6, 0]])
Example #12
0
 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)
Example #13
0
 def test_begin_service_if_possible_release_method(self):
     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 range(30)]
     Q.transitive_nodes[0].individuals = inds
     ind = Q.transitive_nodes[0].individuals[Q.transitive_nodes[0].c - 1]
     ind.service_time = 3.14
     ind.arrival_date = 100.0
     self.assertEqual(
         Q.digraph.nodes(),
         ['Server 2 at Node 1', 'Server 1 at Node 2', 'Server 1 at Node 1'])
     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)
Example #14
0
    def test_release_method(self):
        ciw.seed(4)
        Q = ciw.Simulation(
            ciw.create_network_from_yml(
                'ciw/tests/testing_parameters/params.yml'))
        N = Q.transitive_nodes[0]
        inds = [ciw.Individual(i + 1) for i in range(3)]
        for current_time in [0.01, 0.02, 0.03]:
            Q.current_time = current_time
            N.accept(inds[int(current_time * 100 - 1)])
        self.assertEqual([str(obs) for obs in N.all_individuals],
                         ['Individual 1', 'Individual 2', 'Individual 3'])
        self.assertEqual([[str(obs) for obs in pr_cls]
                          for pr_cls in N.individuals],
                         [['Individual 1', 'Individual 2', 'Individual 3']])
        Q.current_time = 0.03
        N.update_next_event_date()
        self.assertEqual(round(N.next_event_date, 5), 0.03604)

        N.servers[1].next_end_service_date = float('inf')
        N.release(1, Q.transitive_nodes[1])
        self.assertEqual([str(obs) for obs in N.all_individuals],
                         ['Individual 1', 'Individual 3'])
        self.assertEqual([[str(obs) for obs in pr_cls]
                          for pr_cls in N.individuals],
                         [['Individual 1', 'Individual 3']])
        N.update_next_event_date()
        self.assertEqual(round(N.next_event_date, 5), 0.03708)

        N.servers[0].next_end_service_date = float('inf')
        N.release(0, Q.transitive_nodes[1])
        self.assertEqual([str(obs) for obs in N.all_individuals],
                         ['Individual 3'])
        self.assertEqual([[str(obs) for obs in pr_cls]
                          for pr_cls in N.individuals], [['Individual 3']])
        N.update_next_event_date()
        self.assertEqual(round(N.next_event_date, 5), 0.06447)
Example #15
0
 def test_begin_service_if_possible_accept_method(self):
     ciw.seed(50)
     Q = ciw.Simulation(ciw.create_network_from_yml(
         'ciw/tests/testing_parameters/params_deadlock.yml'),
                        deadlock_detector='StateDigraph')
     ind = ciw.Individual(1)
     self.assertEqual(
         set(Q.deadlock_detector.statedigraph.nodes()),
         set([
             '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)
Example #16
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]])
Example #17
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'])
Example #18
0
    def test_timedependent_function_dist(self):
        params = {
            'arrival_distributions':
            [TimeDependentDist1(), TimeDependentDist2()],
            'service_distributions':
            [TimeDependentDist1(), TimeDependentDist2()],
            'number_of_servers': [1, 1],
            'routing': [[0.1, 0.1], [0.1, 0.1]]
        }
        Q = ciw.Simulation(ciw.create_network(**params))
        N1 = Q.transitive_nodes[0]
        N2 = Q.transitive_nodes[1]
        ind = ciw.Individual(0)
        ciw.seed(5)

        samples = []
        for t in [3.0, 9.0, 9.0, 11.0, 11.0]:
            samples.append(
                round(N1.simulation.service_times[N1.id_number][0]._sample(t),
                      2))
        expected = [3.0, 3.0, 3.0, 5.0, 5.0]
        self.assertEqual(samples, expected)

        samples = []
        for t in [4.0, 4.0, 17.0, 22.0, 22.0]:
            samples.append(
                round(N2.simulation.service_times[N2.id_number][0]._sample(t),
                      2))
        expected = [2.0, 2.0, 8.5, 8.0, 8.0]
        self.assertEqual(samples, expected)

        samples = []
        for t in [3.0, 9.0, 9.0, 11.0, 11.0]:
            Q.current_time = t
            samples.append(round(N1.get_service_time(ind), 2))
        expected = [3.0, 3.0, 3.0, 5.0, 5.0]
        self.assertEqual(samples, expected)

        samples = []
        for t in [4.0, 4.0, 17.0, 22.0, 22.0]:
            Q.current_time = t
            samples.append(round(N2.get_service_time(ind), 2))
        expected = [2.0, 2.0, 8.5, 8.0, 8.0]
        self.assertEqual(samples, expected)

        samples = []
        for t in [3.0, 9.0, 9.0, 11.0, 11.0]:
            samples.append(
                round(
                    N1.simulation.inter_arrival_times[N1.id_number][0]._sample(
                        t), 2))
        expected = [3.0, 3.0, 3.0, 5.0, 5.0]
        self.assertEqual(samples, expected)

        samples = []
        for t in [4.0, 4.0, 17.0, 22.0, 22.0]:
            samples.append(
                round(
                    N2.simulation.inter_arrival_times[N2.id_number][0]._sample(
                        t), 2))
        expected = [2.0, 2.0, 8.5, 8.0, 8.0]
        self.assertEqual(samples, expected)
Example #19
0
 def test_no_routing(self):
     ind = ciw.Individual(22)
     self.assertEqual(ciw.no_routing(ind), [])
Example #20
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)
Example #21
0
 def test_repr_methodh(self, id_num, customer_class):
     i = ciw.Individual(id_num, customer_class)
     self.assertEqual(str(i), 'Individual ' + str(id_num))
Example #22
0
 def test_repr_method(self):
     i = ciw.Individual(3, 6)
     self.assertEqual(str(i), 'Individual 3')
    def test_limited_processor_sharing(self):
        N = ciw.create_network(
            arrival_distributions=[ciw.dists.NoArrivals()],
            service_distributions=[ciw.dists.Deterministic(1.0)],
            number_of_servers=[float('inf')]
        )
        Q = ciw.Simulation(N, node_class=ciw.PSNode)
        ind1 = ciw.Individual(1, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind1)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        ind2 = ciw.Individual(2, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind2)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 2.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 2.0)
        ind3 = ciw.Individual(3, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind3)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 3.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 3.0)
        self.assertEqual(ind3.with_server, True)
        self.assertEqual(ind3.service_end_date, 3.0)
        ind4 = ciw.Individual(4, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind4)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 4.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 4.0)
        self.assertEqual(ind3.with_server, True)
        self.assertEqual(ind3.service_end_date, 4.0)
        self.assertEqual(ind4.with_server, True)
        self.assertEqual(ind4.service_end_date, 4.0)

        N = ciw.create_network(
            arrival_distributions=[ciw.dists.NoArrivals()],
            service_distributions=[ciw.dists.Deterministic(1.0)],
            number_of_servers=[4]
        )
        Q = ciw.Simulation(N, node_class=ciw.PSNode)
        ind1 = ciw.Individual(1, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind1)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        ind2 = ciw.Individual(2, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind2)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 2.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 2.0)
        ind3 = ciw.Individual(3, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind3)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 3.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 3.0)
        self.assertEqual(ind3.with_server, True)
        self.assertEqual(ind3.service_end_date, 3.0)
        ind4 = ciw.Individual(4, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind4)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 4.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 4.0)
        self.assertEqual(ind3.with_server, True)
        self.assertEqual(ind3.service_end_date, 4.0)
        self.assertEqual(ind4.with_server, True)
        self.assertEqual(ind4.service_end_date, 4.0)

        N = ciw.create_network(
            arrival_distributions=[ciw.dists.NoArrivals()],
            service_distributions=[ciw.dists.Deterministic(1.0)],
            number_of_servers=[3]
        )
        Q = ciw.Simulation(N, node_class=ciw.PSNode)
        ind1 = ciw.Individual(1, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind1)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        ind2 = ciw.Individual(2, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind2)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 2.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 2.0)
        ind3 = ciw.Individual(3, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind3)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 3.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 3.0)
        self.assertEqual(ind3.with_server, True)
        self.assertEqual(ind3.service_end_date, 3.0)
        ind4 = ciw.Individual(4, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind4)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 3.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 3.0)
        self.assertEqual(ind3.with_server, True)
        self.assertEqual(ind3.service_end_date, 3.0)
        self.assertEqual(ind4.with_server, False)

        N = ciw.create_network(
            arrival_distributions=[ciw.dists.NoArrivals()],
            service_distributions=[ciw.dists.Deterministic(1.0)],
            number_of_servers=[2]
        )
        Q = ciw.Simulation(N, node_class=ciw.PSNode)
        ind1 = ciw.Individual(1, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind1)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        ind2 = ciw.Individual(2, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind2)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 2.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 2.0)
        ind3 = ciw.Individual(3, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind3)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 2.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 2.0)
        self.assertEqual(ind3.with_server, False)
        ind4 = ciw.Individual(4, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind4)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 2.0)
        self.assertEqual(ind2.with_server, True)
        self.assertEqual(ind2.service_end_date, 2.0)
        self.assertEqual(ind3.with_server, False)
        self.assertEqual(ind4.with_server, False)

        N = ciw.create_network(
            arrival_distributions=[ciw.dists.NoArrivals()],
            service_distributions=[ciw.dists.Deterministic(1.0)],
            number_of_servers=[1]
        )
        Q = ciw.Simulation(N, node_class=ciw.PSNode)
        ind1 = ciw.Individual(1, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind1)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        ind2 = ciw.Individual(2, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind2)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        self.assertEqual(ind2.with_server, False)
        ind3 = ciw.Individual(3, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind3)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        self.assertEqual(ind2.with_server, False)
        self.assertEqual(ind3.with_server, False)
        ind4 = ciw.Individual(4, customer_class=0, priority_class=0, simulation=Q)
        Q.nodes[1].accept(ind4)
        self.assertEqual(ind1.with_server, True)
        self.assertEqual(ind1.service_end_date, 1.0)
        self.assertEqual(ind2.with_server, False)
        self.assertEqual(ind3.with_server, False)
        self.assertEqual(ind4.with_server, False)
Example #24
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 = {
            'arrival_distributions': {
                'Class 0':
                [ciw.dists.Exponential(0.05),
                 ciw.dists.Exponential(0.04)],
                'Class 1':
                [ciw.dists.Exponential(0.04),
                 ciw.dists.Exponential(0.06)]
            },
            'service_distributions': {
                'Class 0':
                [ciw.dists.Deterministic(5),
                 ciw.dists.Deterministic(5)],
                'Class 1':
                [ciw.dists.Deterministic(10),
                 ciw.dists.Deterministic(10)]
            },
            'routing': {
                'Class 0': [[0.8, 0.1], [0.0, 0.0]],
                'Class 1': [[0.8, 0.1], [0.2, 0.0]]
            },
            'number_of_servers': [4, 3],
            'class_change_matrices': {
                'Node 1': [[.5, .5], [.25, .75]],
                'Node 2': [[1, 0], [0, 1]]
            },
            'priority_classes': {
                'Class 0': 0,
                'Class 1': 1
            }
        }
        Q = ciw.Simulation(
            ciw.create_network_from_dictionary(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)
Example #25
0
    def test_accept_method(self):
        ciw.seed(6)
        Q = ciw.Simulation(
            ciw.create_network_from_yml(
                'ciw/tests/testing_parameters/params.yml'))
        N = Q.transitive_nodes[0]
        N.next_event_date = 0.0
        self.assertEqual(N.all_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)

        Q.current_time = 0.01
        N.accept(ind1)
        self.assertEqual([str(obs) for obs in N.all_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)

        Q.current_time = 0.02
        N.accept(ind2)
        Q.current_time = 0.03
        N.accept(ind3)
        Q.current_time = 0.04
        N.accept(ind4)
        self.assertEqual(
            [str(obs) for obs in N.all_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)

        Q.current_time = 0.05
        N.accept(ind5)
        Q.current_time = 0.06
        N.accept(ind6)
        Q.current_time = 0.07
        N.accept(ind7)
        Q.current_time = 0.08
        N.accept(ind8)
        Q.current_time = 0.09
        N.accept(ind9)
        Q.current_time = 0.1
        N.accept(ind10)
        self.assertEqual([str(obs) for obs in N.all_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(ind10.service_time, False)
 def test_ps_start_waitingcustomers_service_at_release(self):
     N = ciw.create_network(
         arrival_distributions=[ciw.dists.NoArrivals()],
         service_distributions=[ciw.dists.Sequential([1.0, 2.0, 3.0, 4.0])],
         number_of_servers=[3]
     )
     Q = ciw.Simulation(N, node_class=ciw.PSNode)
     self.assertEqual(Q.current_time, 0.0)
     Q.current_time = 0.5
     self.assertEqual(Q.current_time, 0.5)
     ind1 = ciw.Individual(1, customer_class=0, priority_class=0, simulation=Q)
     Q.nodes[1].accept(ind1)
     ind2 = ciw.Individual(2, customer_class=0, priority_class=0, simulation=Q)
     Q.nodes[1].accept(ind2)
     ind3 = ciw.Individual(3, customer_class=0, priority_class=0, simulation=Q)
     Q.nodes[1].accept(ind3)
     self.assertEqual(round(ind1.arrival_date, 10), 0.5)
     self.assertEqual(round(ind1.service_time, 10), 1.0)
     self.assertEqual(round(ind1.time_left, 10), 1.0)
     self.assertEqual(ind1.with_server, True)
     self.assertEqual(round(ind1.date_last_update, 10), 0.5)
     self.assertEqual(round(ind1.service_start_date, 10), 0.5)
     self.assertEqual(round(ind1.service_end_date, 10), 3.5)
     self.assertEqual(round(ind2.arrival_date, 10), 0.5)
     self.assertEqual(round(ind2.service_time, 10), 2.0)
     self.assertEqual(round(ind2.time_left, 10), 2.0)
     self.assertEqual(ind2.with_server, True)
     self.assertEqual(round(ind2.date_last_update, 10), 0.5)
     self.assertEqual(round(ind2.service_start_date, 10), 0.5)
     self.assertEqual(round(ind2.service_end_date, 10), 6.5)
     self.assertEqual(round(ind3.arrival_date, 10), 0.5)
     self.assertEqual(round(ind3.service_time, 10), 3.0)
     self.assertEqual(round(ind3.time_left, 10), 3.0)
     self.assertEqual(ind3.with_server, True)
     self.assertEqual(round(ind3.date_last_update, 10), 0.5)
     self.assertEqual(round(ind3.service_start_date, 10), 0.5)
     self.assertEqual(round(ind3.service_end_date, 10), 9.5)
     Q.current_time = 1.5
     ind4 = ciw.Individual(4, customer_class=0, priority_class=0, simulation=Q)
     Q.nodes[1].accept(ind4)
     self.assertEqual(round(ind1.arrival_date, 10), 0.5)
     self.assertEqual(round(ind1.service_time, 10), 1.0)
     self.assertEqual(round(ind1.time_left, 10), 1.0)
     self.assertEqual(ind1.with_server, True)
     self.assertEqual(round(ind1.date_last_update, 10), 0.5)
     self.assertEqual(round(ind1.service_start_date, 10), 0.5)
     self.assertEqual(round(ind1.service_end_date, 10), 3.5)
     self.assertEqual(round(ind2.arrival_date, 10), 0.5)
     self.assertEqual(round(ind2.service_time, 10), 2.0)
     self.assertEqual(round(ind2.time_left, 10), 2.0)
     self.assertEqual(ind2.with_server, True)
     self.assertEqual(round(ind2.date_last_update, 10), 0.5)
     self.assertEqual(round(ind2.service_start_date, 10), 0.5)
     self.assertEqual(round(ind2.service_end_date, 10), 6.5)
     self.assertEqual(round(ind3.arrival_date, 10), 0.5)
     self.assertEqual(round(ind3.service_time, 10), 3.0)
     self.assertEqual(round(ind3.time_left, 10), 3.0)
     self.assertEqual(ind3.with_server, True)
     self.assertEqual(round(ind3.date_last_update, 10), 0.5)
     self.assertEqual(round(ind3.service_start_date, 10), 0.5)
     self.assertEqual(round(ind3.service_end_date, 10), 9.5)
     self.assertEqual(ind4.with_server, False)
     Q.current_time = 3.5
     Q.nodes[1].release(0, Q.nodes[-1])
     self.assertEqual(round(ind2.arrival_date, 10), 0.5)
     self.assertEqual(round(ind2.service_time, 10), 2.0)
     self.assertEqual(round(ind2.time_left, 10), 1.0)
     self.assertEqual(ind2.with_server, True)
     self.assertEqual(round(ind2.date_last_update, 10), 3.5)
     self.assertEqual(round(ind2.service_start_date, 10), 0.5)
     self.assertEqual(round(ind2.service_end_date, 10), 6.5)
     self.assertEqual(round(ind3.arrival_date, 10), 0.5)
     self.assertEqual(round(ind3.service_time, 10), 3.0)
     self.assertEqual(round(ind3.time_left, 10), 2.0)
     self.assertEqual(ind3.with_server, True)
     self.assertEqual(round(ind3.date_last_update, 10), 3.5)
     self.assertEqual(round(ind3.service_start_date, 10), 0.5)
     self.assertEqual(round(ind3.service_end_date, 10), 9.5)
     self.assertEqual(round(ind4.arrival_date, 10), 1.5)
     self.assertEqual(round(ind4.service_time, 10), 4.0)
     self.assertEqual(round(ind4.time_left, 10), 4.0)
     self.assertEqual(ind4.with_server, True)
     self.assertEqual(round(ind4.date_last_update, 10), 3.5)
     self.assertEqual(round(ind4.service_start_date, 10), 3.5)
     self.assertEqual(round(ind4.service_end_date, 10), 15.5)
     Q.current_time = 6.5
     Q.nodes[1].release(0, Q.nodes[-1])
     self.assertEqual(round(ind3.arrival_date, 10), 0.5)
     self.assertEqual(round(ind3.service_time, 10), 3.0)
     self.assertEqual(round(ind3.time_left, 10), 1.0)
     self.assertEqual(ind3.with_server, True)
     self.assertEqual(round(ind3.date_last_update, 10), 6.5)
     self.assertEqual(round(ind3.service_start_date, 10), 0.5)
     self.assertEqual(round(ind3.service_end_date, 10), 8.5)
     self.assertEqual(round(ind4.arrival_date, 10), 1.5)
     self.assertEqual(round(ind4.service_time, 10), 4.0)
     self.assertEqual(round(ind4.time_left, 10), 3.0)
     self.assertEqual(ind4.with_server, True)
     self.assertEqual(round(ind4.date_last_update, 10), 6.5)
     self.assertEqual(round(ind4.service_start_date, 10), 3.5)
     self.assertEqual(round(ind4.service_end_date, 10), 12.5)
Example #27
0
    def test_release_blocked_individual_method(self):
        Q = ciw.Simulation(ciw.create_network_from_yml(
            'ciw/tests/testing_parameters/params_deadlock.yml'),
            deadlock_detector='StateDigraph')
        N1 = Q.transitive_nodes[0]
        N2 = Q.transitive_nodes[1]
        N1.individuals = [[ciw.Individual(i) for i in range(N1.c + 3)]]
        N2.individuals = [[ciw.Individual(i + 100) for i in range(N2.c + 4)]]
        for ind in N1.all_individuals[:2]:
            N1.attach_server(N1.find_free_server(), ind)
        for ind in N2.all_individuals[:1]:
            N2.attach_server(N2.find_free_server(), ind)

        self.assertEqual([str(obs) for obs in N1.all_individuals],
            ['Individual 0',
             'Individual 1',
             'Individual 2',
             'Individual 3',
             'Individual 4',
             'Individual 5',
             'Individual 6',
             'Individual 7'])
        self.assertEqual([str(obs) for obs in N2.all_individuals],
            ['Individual 100',
             'Individual 101',
             'Individual 102',
             'Individual 103',
             'Individual 104',
             'Individual 105',
             'Individual 106',
             'Individual 107',
             'Individual 108'])
        N1.release_blocked_individual(100)
        self.assertEqual([str(obs) for obs in N1.all_individuals],
            ['Individual 0',
             'Individual 1',
             'Individual 2',
             'Individual 3',
             'Individual 4',
             'Individual 5',
             'Individual 6',
             'Individual 7'])
        self.assertEqual([str(obs) for obs in N2.all_individuals],
            ['Individual 100',
             'Individual 101',
             'Individual 102',
             'Individual 103',
             'Individual 104',
             'Individual 105',
             'Individual 106',
             'Individual 107',
             'Individual 108'])

        N1.blocked_queue = [(1, 1), (2, 100)]
        rel_ind = N1.individuals[0].pop(0)
        N1.detatch_server(rel_ind.server, rel_ind)

        N1.release_blocked_individual(110)
        self.assertEqual([str(obs) for obs in N1.all_individuals],
            ['Individual 2',
             'Individual 3',
             'Individual 4',
             'Individual 5',
             'Individual 6',
             'Individual 7',
             'Individual 1',
             'Individual 100'])
        self.assertEqual([str(obs) for obs in N2.all_individuals],
            ['Individual 101',
             'Individual 102',
             'Individual 103',
             'Individual 104',
             'Individual 105',
             'Individual 106',
             'Individual 107',
             'Individual 108'])