예제 #1
0
    def test_NullQueue_data_collection(self):
        adj = {
            0: {
                1: {
                    'edge_type': 1
                }
            },
            1: {
                2: {
                    'edge_type': 2
                },
                3: {
                    'edge_type': 2
                },
                4: {
                    'edge_type': 2
                }
            }
        }
        g = qt.adjacency2graph(adj)

        qcl = {1: qt.QueueServer, 2: qt.NullQueue}

        qn = qt.QueueNetwork(g, q_classes=qcl)
        qn.initialize(edges=(0, 1))
        qn.start_collecting_data(edge_type=2)
        qn.max_agents = 5000
        qn.simulate(n=10000)
        data = qn.get_queue_data()

        # Data collected by NullQueues do not have departure and
        # service start times in the data

        self.assertFalse(data[:, (1, 2)].any())
예제 #2
0
    def test_QueueNetwork_greedy_routing(self):

        lam = np.random.randint(1, 10) + 0.0
        rho = np.random.uniform(0.75, 1)
        nSe = np.random.randint(1, 10)
        mu = lam / (3 * rho * nSe)

        def arr(t):
            return t + np.random.exponential(1 / lam)

        def ser(t):
            return t + np.random.exponential(1 / mu)

        def ser_id(t):
            return t

        adj = {
            0: {1: {'edge_type': 1}},
            1: {
                2: {'edge_type': 2},
                3: {'edge_type': 2},
                4: {'edge_type': 2}
            }
        }
        g = qt.adjacency2graph(adj)

        qcl = {1: qt.QueueServer, 2: qt.QueueServer}
        arg = {
            1: {
                'arrival_f': arr,
                'service_f': ser_id,
                'AgentFactory': qt.GreedyAgent
            },
            2: {
                'service_f': ser,
                'num_servers': nSe
            }
        }

        qn = qt.QueueNetwork(g, q_classes=qcl, q_args=arg)
        qn.initialize(edges=(0, 1))
        qn.max_agents = 5000

        num_events = 1000
        ans = np.zeros(num_events, bool)
        e01 = qn.g.edge_index[(0, 1)]
        edg = qn.edge2queue[e01].edge
        c = 0

        while c < num_events:
            qn.simulate(n=1)
            if qn.next_event_description() == ('Departure', e01):
                d0 = qn.edge2queue[e01]._departures[0].desired_destination(qn, edg)
                a1 = np.argmin([qn.edge2queue[e].number_queued() for e in qn.out_edges[1]])
                d1 = qn.out_edges[1][a1]
                ans[c] = d0 == d1
                c += 1

        self.assertTrue(ans.all())
예제 #3
0
    def test_QueueNetwork_greedy_routing(self):

        lam = np.random.randint(1, 10) + 0.0
        rho = np.random.uniform(0.75, 1)
        nSe = np.random.randint(1, 10)
        mu = lam / (3 * rho * nSe)

        def arr(t):
            return t + np.random.exponential(1 / lam)

        def ser(t):
            return t + np.random.exponential(1 / mu)

        def ser_id(t):
            return t

        adj = {
            0: {1: {'edge_type': 1}},
            1: {
                2: {'edge_type': 2},
                3: {'edge_type': 2},
                4: {'edge_type': 2}
            }
        }
        g = qt.adjacency2graph(adj)

        qcl = {1: qt.QueueServer, 2: qt.QueueServer}
        arg = {
            1: {
                'arrival_f': arr,
                'service_f': ser_id,
                'AgentFactory': qt.GreedyAgent
            },
            2: {
                'service_f': ser,
                'num_servers': nSe
            }
        }

        qn = qt.QueueNetwork(g, q_classes=qcl, q_args=arg)
        qn.initialize(edges=(0, 1))
        qn.max_agents = 5000

        num_events = 1000
        ans = np.zeros(num_events, bool)
        e01 = qn.g.edge_index[(0, 1)]
        edg = qn.edge2queue[e01].edge
        c = 0

        while c < num_events:
            qn.simulate(n=1)
            if qn.next_event_description() == ('Departure', e01):
                d0 = qn.edge2queue[e01]._departures[0].desired_destination(qn, edg)
                a1 = np.argmin([qn.edge2queue[e].number_queued() for e in qn.out_edges[1]])
                d1 = qn.out_edges[1][a1]
                ans[c] = d0 == d1
                c += 1

        self.assertTrue(ans.all())
예제 #4
0
    def test_adjacency2graph_matrix_etype(self):
        # Test adjacency argument using ndarrays work
        adj = {0: {1: {}}, 1: {2: {}, 3: {}}, 2: {0: {}}, 3: {}}
        ety = np.array([[0, 5, 0, 0], [0, 0, 9, 14], [0, 0, 0, 0],
                        [0, 0, 0, 0]])

        g = qt.adjacency2graph(adj, edge_type=ety, adjust=1)
        ans = qt.graph2dict(g)
        self.assertEqual(ans, self.expected_response0)
예제 #5
0
def draw3():

    adj = {0 : [1], 1: [2, 3], 3: [0]}
    eTy = {0: {1: 1}, 1: {2: 2, 3: 4}, 3: {0: 1}}
    g = qt.adjacency2graph(adj, edge_type=eTy)
    ans = qt.graph2dict(g)
    print(ans)                
    nx.draw_networkx(g)
    plt.axis('off')
    plt.show()
예제 #6
0
    def test_adjacency2graph_matrix_adjacency(self):

        # Test adjacency argument using ndarray work
        adj = np.array([[0, 1, 0, 0], [0, 0, 1, 1], [1, 0, 0, 0], [0, 0, 0,
                                                                   0]])
        ety = {0: {1: 5}, 1: {2: 9, 3: 14}}

        g = qt.adjacency2graph(adj, edge_type=ety, adjust=2)
        ans = qt.graph2dict(g)

        self.assertTrue(ans == self.expected_response1)
    def test_adjacency2graph_matrix_etype(self):
        # Test adjacency argument using ndarrays work
        adj = {0: {1: {}}, 1: {2: {}, 3: {}}, 2: {0: {}}, 3: {}}
        ety = np.array([[0, 5, 0, 0],
                        [0, 0, 9, 14],
                        [0, 0, 0, 0],
                        [0, 0, 0, 0]])

        g = qt.adjacency2graph(adj, edge_type=ety, adjust=1)
        ans = qt.graph2dict(g)
        self.assertEqual(ans, self.expected_response0)
    def test_adjacency2graph_matrix_adjacency(self):

        # Test adjacency argument using ndarray work
        adj = np.array([[0, 1, 0, 0],
                        [0, 0, 1, 1],
                        [1, 0, 0, 0],
                        [0, 0, 0, 0]])
        ety = {0: {1: 5}, 1: {2: 9, 3: 14}}

        g = qt.adjacency2graph(adj, edge_type=ety, adjust=2)
        ans = qt.graph2dict(g)

        self.assertTrue(ans == self.expected_response1)
def createQueueGraph(num_checkIns,num_pollBooths,checkIn_rate,polling_rate,precinctPop):

    #Create graph adjacent graph nodes 
    adja_list = {0:[1],1:[k for k in range(2,2+num_checkIns)]}
    for k in range(2,2+num_checkIns):
        adja_list.update({k:[l for l in range(2+num_checkIns,2+num_checkIns+num_pollBooths)]})

    #Create graph edges, of type 1, 2, or 3, depending on the type of queue 
    edge_list = {0: {1:1}, 1:{k: 2 for k in range(2, 2+num_checkIns)}}
    for k in range(2,2+num_checkIns):
       edge_list.update({k:{l: 3 for l in range(2+num_checkIns,2+num_checkIns+num_pollBooths)}})
    
    #Generate graph
    g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)

    return g
예제 #10
0
def draw2():

    adj1 = {
        0: {1: {}},
        1: {2: {},
            3: {}},
        3: {0: {}}}
    eTy = {0: {1: 1}, 1: {2: 2, 3: 4}, 3: {0: 1}}
    # A loop will be added to vertex 2
    g = qt.adjacency2graph(adj1, edge_type=eTy)
    ans = qt.graph2dict(g)
    print(ans)

    nx.draw_networkx(g)
    plt.axis('off')
    plt.show()
예제 #11
0
    def test_NullQueue_data_collection(self):
        adj = {
            0: {1: {'edge_type': 1}},
            1: {2: {'edge_type': 2},
                3: {'edge_type': 2},
                4: {'edge_type': 2}}
        }
        g = qt.adjacency2graph(adj)

        qcl = {1: qt.QueueServer, 2: qt.NullQueue}

        qn = qt.QueueNetwork(g, q_classes=qcl)
        qn.initialize(edges=(0, 1))
        qn.start_collecting_data(edge_type=2)
        qn.max_agents = 5000
        qn.simulate(n=10000)
        data = qn.get_queue_data()

        # Data collected by NullQueues do not have departure and
        # service start times in the data

        self.assertFalse(data[:, (1, 2)].any())
예제 #12
0
    def test_QueueNetwork_add_arrival(self):

        adj = {0: [1], 1: [2, 3]}
        g = qt.adjacency2graph(adj)
        qn = qt.QueueNetwork(g)
        mat = qt.generate_transition_matrix(g)
        qn.set_transitions(mat)

        qn.initialize(edges=(0, 1))
        qn.start_collecting_data(edge=[(1, 2), (1, 3)])

        qn.simulate(150000)

        data = qn.get_queue_data(edge=[(1, 2), (1, 3)])
        e0, e1 = qn.out_edges[1]

        p0 = np.sum(data[:, 5] == e0, dtype=float) / data.shape[0]
        p1 = np.sum(data[:, 5] == e1, dtype=float) / data.shape[0]

        trans = qn.transitions(False)

        self.assertAlmostEqual(trans[1][2], p0, 2)
        self.assertAlmostEqual(trans[1][3], p1, 2)
예제 #13
0
    def test_QueueNetwork_add_arrival(self):

        adj = {0: [1], 1: [2, 3]}
        g = qt.adjacency2graph(adj)
        qn = qt.QueueNetwork(g)
        mat = qt.generate_transition_matrix(g)
        qn.set_transitions(mat)

        qn.initialize(edges=(0, 1))
        qn.start_collecting_data(edge=[(1, 2), (1, 3)])

        qn.simulate(150000)

        data = qn.get_queue_data(edge=[(1, 2), (1, 3)])
        e0, e1 = qn.out_edges[1]

        p0 = np.sum(data[:, 5] == e0, dtype=float) / data.shape[0]
        p1 = np.sum(data[:, 5] == e1, dtype=float) / data.shape[0]

        trans = qn.transitions(False)

        self.assertAlmostEqual(trans[1][2], p0, 2)
        self.assertAlmostEqual(trans[1][3], p1, 2)
예제 #14
0
def simulation(adja_list,edge_list,matrix_seed,graph_seed):

    s = matrix_seed
    ss = graph_seed
    
    g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)
    qn = qt.QueueNetwork(g=g, q_classes=q_classes, q_args=q_args, seed=ss, blocking='BAS')

    # mat = create_mat(g,s)
    # qn.set_transitions(mat)
    # print(qn.transitions(True))
    # mat = {0: {1: 1.0}, 1: {2: 0.0, 3: 1.0, 4: 0.0}, 
    #             2: {5: 1.0}, 3: {5: 0.0, 6: 0.0, 7: 1.0}, 4: {6: 1.0},
    #             5: {7: 1.0}, 6: {7: 1.0}, 7: {8: 1.0}, 8: {8: 1.0}}
    # qn.set_transitions(mat)
    """
    mat = qt.generate_transition_matrix(g, seed=96)
    qn.set_transitions(mat)
    """

    # qn.draw(fname="sim.png", figsize=(12, 3), bbox_inches='tight')
    # plt.show()

    qn.initialize(edge_type=1)
    qn.clear_data()
    
    
    qn.start_collecting_data(edge_type=1)
    qn.start_collecting_data(edge_type=2)
    qn.start_collecting_data(edge_type=3)
    qn.start_collecting_data(edge_type=4)
    qn.start_collecting_data(edge_type=5)
    qn.start_collecting_data(edge_type=6)
    qn.start_collecting_data(edge_type=7)
    qn.start_collecting_data(edge_type=8)
    qn.start_collecting_data(edge_type=9)
    qn.start_collecting_data(edge_type=10)
    qn.start_collecting_data(edge_type=11)
    qn.start_collecting_data(edge_type=12)
    qn.simulate(t=100)
    
    """
    len(data2), means the total job in server 2
    """
    np.set_printoptions(suppress=True)
    data1 = qn.get_queue_data(edge_type=1)
    data2 = qn.get_queue_data(edge_type=2)
    data3 = qn.get_queue_data(edge_type=3)
    data4 = qn.get_queue_data(edge_type=4)
    data5 = qn.get_queue_data(edge_type=5)
    data6 = qn.get_queue_data(edge_type=6)
    data7 = qn.get_queue_data(edge_type=7)
    data8 = qn.get_queue_data(edge_type=8)
    data9 = qn.get_queue_data(edge_type=9)
    data10 = qn.get_queue_data(edge_type=10)
    data11 = qn.get_queue_data(edge_type=11)
    data12 = qn.get_queue_data(edge_type=12)

    dataa1 = qn.get_agent_data(edge_type=1,return_header=False)
    dataa12 = qn.get_agent_data(edge_type=12,return_header=False)
   


    total_job_num = len(data1)
    job_pool = 0
    each_total_job = []                     # a list with each server's total job
    each_thoughtput = []                    # a list with each server's throught
    
    
    # print("==========edge_type=1================")
    # print(data1)
    # print("==========edge_type=2================")
    # print(data2)
    # print("==========edge_type=3================")
    # print(data3)
    # print("==========edge_type=4================")
    # print(data4)
    # print("==========edge_type=5================")
    # print(data5)
    # print("==========edge_type=6================")
    # print(data6)
    # print("==========edge_type=7================")
    # print(data7)
    # print("==========edge_type=8================")
    # print(data8)
    # print("==========edge_type=9================")
    # print(data9)
    # print("==========edge_type=10================")
    # print(data10)
    # print("==========edge_type11================")
    # print(data11)
    # print("==========edge_type=12================")
    # print(data12)
  
  
    # print("totol job of server1: ", len(data1))
    # print("totol job of server2: ", len(data2))
    # print("totol job of server3: ", len(data3))
    # print("totol job of server4: ", len(data4))
    # print("totol job of server5: ", len(data5))
    # print("totol job of server6: ", len(data6))
    # print("totol job of server7: ", len(data7))
    # print("totol job of server8: ", len(data8))
    # print("totol job of server9: ", len(data9))
    # print("totol job of server10: ", len(data10))
    # print("totol job of server11: ", len(data11))
    # print("totol job of server12: ", len(data12),"\n")
    

    # each_total_job.append(len(data1))
    # each_total_job.append(len(data2))
    # each_total_job.append(len(data3))
    # each_total_job.append(len(data4))
    # each_total_job.append(len(data5))
    # each_total_job.append(len(data6))
    # each_total_job.append(len(data7))
    # each_total_job.append(len(data8))
    # each_total_job.append(len(data9))
    # each_total_job.append(len(data10))
    # each_total_job.append(len(data11))
    # each_total_job.append(len(data12))


    for i in range(len(data1)):
        if data1[i][2] != 0.:
            job_pool = job_pool +1
    each_thoughtput.append(job_pool)            
    # print("TOTAL NUMBER OF JOBS IN THIS SIMULATION: ",job_pool)

    counter = 0
    for i in range(len(data2)):
        if data2[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter)      
    # print("through put of server2: ",counter)

    counter = 0
    for i in range(len(data3)):
        if data3[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server3: ",counter)

    counter = 0
    for i in range(len(data4)):
        if data4[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server4: ",counter)

    counter = 0
    for i in range(len(data5)):
        if data5[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server5: ",counter)

    counter = 0
    for i in range(len(data6)):
        if data6[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server6: ",counter)

    counter = 0
    for i in range(len(data7)):
        if data7[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server7: ",counter)

    counter = 0
    for i in range(len(data8)):
        if data8[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server8: ",counter)

    counter = 0
    for i in range(len(data9)):
        if data9[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server9: ",counter)
    
    counter = 0
    for i in range(len(data10)):
        if data10[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server9: ",counter)
   
    counter = 0
    for i in range(len(data11)):
        if data11[i][2] != 0.:
            counter = counter +1
    each_thoughtput.append(counter) 
    # print("through put of server11: ",counter)

    container = len(data12)
    each_thoughtput.append(container)
    # print("CONTAINER HAS RECIEVED: ",container,"\n")
    
   
    # data_caculate(each_total_job,each_thoughtput)
    drop = delay_and_drop_caculate(dataa1,dataa12,(job_pool-container))
    # save_data1(data1)

    print("total job in container: ",container)
    print("compared with the container        ","the drop rate of this simulation: ", drop/container,"\n")
    print("the transition matrix is: ", qn.transitions(False))
예제 #15
0
 def test_graph2dict(self):
     adj = generate_adjacency()
     g1 = qt.adjacency2graph(adj, adjust=2)
     aj1 = qt.graph2dict(g1)
     g2 = qt.adjacency2graph(aj1, adjust=2)
     self.assertTrue(nx.is_isomorphic(g1, g2))
예제 #16
0
 def test_adjacency2graph_errors(self):
     with self.assertRaises(TypeError):
         qt.adjacency2graph([])
예제 #17
0
q_args = {
    1: {
        "num_servers": 1000,
        "arrival_f": lambda t: t + np.random.exponential(500),
        "service_f": lambda t: t,
        "AgentFactory": qt.ResourceAgent,
        "qbuffer": 1000,
        "active_cap": np.infty
    },
    2: {
        "num_servers": np.infty,
        "service_f": lambda t: t + np.random.exponential(1)
    }
}

net = qt.QueueNetwork(g=qt.adjacency2graph(adjacency=adj_list,
                                           edge_type=edg_list),
                      q_classes=q_cls,
                      q_args=q_args,
                      seed=66)
net.initialize(edges=(0, 1))
print(net.num_events)
# net.animate(t=horizon,
#             figsize=(5, 5),
#             filename='plots/qt_animation/test.mp4',
#             frames=1000,
#             fps=30,
#             writer='ffmpeg',
#             vertex_size=30)
net.start_collecting_data()
for _ in range(1000):
    net._simulate_next_event(slow=False)
예제 #18
0
 def test_adjacency2graph_errors(self):
     with self.assertRaises(TypeError):
         qt.adjacency2graph([])
예제 #19
0
def simulation(adja_list, edge_list, matrix_seed, graph_seed):

    s = matrix_seed
    ss = graph_seed

    g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)
    qn = qt.QueueNetwork(g=g,
                         q_classes=q_classes,
                         q_args=q_args,
                         seed=ss,
                         blocking='BAS')

    # mat = create_mat(g,s)
    # qn.set_transitions(mat)
    """
    mat = qt.generate_transition_matrix(g, seed=96)
    qn.set_transitions(mat)
    """

    qn.draw(fname="sim.png", figsize=(12, 3), bbox_inches='tight')
    # plt.show()

    qn.initialize(edge_type=1)
    qn.clear_data()

    qn.start_collecting_data(edge_type=1)
    qn.start_collecting_data(edge_type=2)
    qn.start_collecting_data(edge_type=3)
    qn.start_collecting_data(edge_type=4)
    qn.start_collecting_data(edge_type=5)
    qn.start_collecting_data(edge_type=6)
    qn.start_collecting_data(edge_type=7)
    qn.start_collecting_data(edge_type=8)
    qn.start_collecting_data(edge_type=9)
    qn.start_collecting_data(edge_type=10)
    qn.start_collecting_data(edge_type=11)
    qn.start_collecting_data(edge_type=12)
    qn.simulate(t=0.3)
    """
    len(data2), means the total job in server 2
    """
    np.set_printoptions(suppress=True)
    data1 = qn.get_queue_data(edge_type=1)
    data2 = qn.get_queue_data(edge_type=2)
    data3 = qn.get_queue_data(edge_type=3)
    data4 = qn.get_queue_data(edge_type=4)
    data5 = qn.get_queue_data(edge_type=5)
    data6 = qn.get_queue_data(edge_type=6)
    data7 = qn.get_queue_data(edge_type=7)
    data8 = qn.get_queue_data(edge_type=8)
    data9 = qn.get_queue_data(edge_type=9)
    data10 = qn.get_queue_data(edge_type=10)
    data11 = qn.get_queue_data(edge_type=11)
    data12 = qn.get_queue_data(edge_type=12)

    dataa1 = qn.get_agent_data(edge_type=1)
    dataa2 = qn.get_agent_data(edge_type=2)
    dataa3 = qn.get_agent_data(edge_type=3)
    dataa4 = qn.get_agent_data(edge_type=4)
    dataa5 = qn.get_agent_data(edge_type=5)
    dataa6 = qn.get_agent_data(edge_type=6)
    dataa7 = qn.get_agent_data(edge_type=7)
    dataa8 = qn.get_agent_data(edge_type=8)
    dataa9 = qn.get_agent_data(edge_type=9)
    dataa10 = qn.get_agent_data(edge_type=10)
    dataa11 = qn.get_agent_data(edge_type=11)
    dataa12 = qn.get_agent_data(edge_type=12)

    total_job_num = len(data1)
    job_pool = 0
    each_total_job = []  # a list with each server's total job
    each_thoughtput = []  # a list with each server's throught

    print("==========edge_type=1================")
    print(data1)
    print("==========edge_type=2================")
    print(data2)
    print("==========edge_type=3================")
    print(data3)
    print("==========edge_type=4================")
    print(data4)
    print("==========edge_type=5================")
    print(data5)
    print("==========edge_type=6================")
    print(data6)
    print("==========edge_type=7================")
    print(data7)
    print("==========edge_type=8================")
    print(data8)
    print("==========edge_type=9================")
    print(data9)
    print("==========edge_type=10================")
    print(data10)
    print("==========edge_type11================")
    print(data11)
    print("==========edge_type=12================")
    print(data12)

    print("totol job of server1: ", len(data1))
    print("totol job of server2: ", len(data2))
    print("totol job of server3: ", len(data3))
    print("totol job of server4: ", len(data4))
    print("totol job of server5: ", len(data5))
    print("totol job of server6: ", len(data6))
    print("totol job of server7: ", len(data7))
    print("totol job of server8: ", len(data8))
    print("totol job of server9: ", len(data9))
    print("totol job of server10: ", len(data10))
    print("totol job of server11: ", len(data11))
    print("totol job of server12: ", len(data12), "\n")

    print("==========agent=1================")
    print(dataa1)
    print("==========agent=2================")
    print(dataa2)
    print("==========agent=3================")
    print(dataa3)
    print("==========agent=4================")
    print(dataa4)
    print("==========agent=5================")
    print(dataa5)
    print("==========agent=6================")
    print(dataa6)
    print("==========agent=7================")
    print(dataa7)
    print("==========agent=8================")
    print(dataa8)
    print("==========agent=9================")
    print(dataa9)
    print("==========agent=10================")
    print(dataa10)
    print("==========agent11================")
    print(dataa11)
    print("==========agent=12================")
    print(dataa12)

    each_total_job.append(len(data1))
    each_total_job.append(len(data2))
    each_total_job.append(len(data3))
    each_total_job.append(len(data4))
    each_total_job.append(len(data5))
    each_total_job.append(len(data6))
    each_total_job.append(len(data7))
    each_total_job.append(len(data8))
    each_total_job.append(len(data9))
    each_total_job.append(len(data10))
    each_total_job.append(len(data11))
    each_total_job.append(len(data12))

    for i in range(len(data1)):
        if data1[i][2] != 0.:
            job_pool = job_pool + 1
    each_thoughtput.append(job_pool)
    print("TOTAL NUMBER OF JOBS IN THIS SIMULATION: ", job_pool)

    counter = 0
    for i in range(len(data2)):
        if data2[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server2: ", counter)

    counter = 0
    for i in range(len(data3)):
        if data3[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server3: ", counter)

    counter = 0
    for i in range(len(data4)):
        if data4[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server4: ", counter)

    counter = 0
    for i in range(len(data5)):
        if data5[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server5: ", counter)

    counter = 0
    for i in range(len(data6)):
        if data6[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server6: ", counter)

    counter = 0
    for i in range(len(data7)):
        if data7[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server7: ", counter)

    counter = 0
    for i in range(len(data8)):
        if data8[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server8: ", counter)

    counter = 0
    for i in range(len(data9)):
        if data9[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server9: ", counter)

    counter = 0
    for i in range(len(data10)):
        if data10[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server9: ", counter)

    counter = 0
    for i in range(len(data11)):
        if data11[i][2] != 0.:
            counter = counter + 1
    each_thoughtput.append(counter)
    print("through put of server11: ", counter)

    container = len(data12)
    each_thoughtput.append(container)
    print("CONTAINER HAS RECIEVED: ", container, "\n")
    print("the through put of the map / the total number of jobs in map: ",
          container / job_pool, "\n")

    data_caculate(each_total_job, each_thoughtput)
예제 #20
0
    # edge_list = {0: {1:1,2:1,4:1}, 1: {0:1,3:1}, 2: {0:1,5:1,6:1}, 3:{1:1,4:1,8:1},
    #                 4:{0:1,3:1,6:1,9:1}, 5:{2:1,7:1}, 6:{2:1,4:1,7:1,10:1}, 7:{5:1,6:1,11:1},
    #                 8:{3:1,9:1,12:1}, 9:{4:1,8:1,10:1,13:1,14:1}, 10:{6:1,9:1,11:1,14:1},
    #                 11:{7:1,10:1,15:1}, 12:{8:1,13:1}, 13:{9:1,12:1,14:1}, 14:{9:1,10:1,13:1,15:1},
    #                 15:{11:1,14:1}}

    # adja_list = {0: [1], 1: [2,3,4], 2:[5,6] }
    # edge_list = {0: {1:1}, 1: {2:2,3:2,4:2}, 2: {5:3,6:3}}

    # adja_list = {0: [1,2,3], 1: [2, 4], 2:[1,3,4],3:[2, 4] }
    # edge_list = {0: {1:1, 2:1, 3:1}, 1: {2:2 ,4:3}, 2: {1:2,3:2,4:3}, 3: {2:2 ,4:3}}

    adja_list = {0: [1], 1: [2, 3]}
    edge_list = {0: {1: 1}, 1: {2: 2, 3: 3}}

    g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)
    qn = qt.QueueNetwork(g=g, q_classes=q_classes, q_args=q_args, seed=13)
    qn.draw(fname="sim.png", figsize=(12, 3), bbox_inches='tight')

    pos = nx.spring_layout(g)
    nx.draw_networkx_nodes(g,
                           pos,
                           node_color='green',
                           edge_color='orange',
                           alpha=0.6)
    nx.draw_networkx_edges(g,
                           pos,
                           node_color='green',
                           edge_color='orange',
                           alpha=0.6)
    nx.draw_networkx_labels(g, pos)
예제 #21
0
import functools

import numpy as np
import queueing_tool as qt


# Make an adjacency list
adja_list = {0: {1: {}}, 1: {k: {} for k in range(2, 22)}}

# Make an object that has the same dimensions as your adjacency list that
# specifies the type of queue along each edge.
edge_list = {0: {1: 1}, 1: {k: 2 for k in range(2, 22)}}

# Creates a networkx directed graph using the adjacency list and edge list
g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)

# Make a mapping between the edge types and the queue classes that sit on each
# edge. Do not use 0 as a key, it's used to map to NullQueues.
q_classes = {0: qt.NullQueue, 1: qt.QueueServer, 2: qt.QueueServer}


# Define the parameters for each of the queues
def rate(t):
    return 25 + 350 * np.sin(np.pi * t / 2)**2


def ser_f(t):
    return t + np.random.exponential(0.2 / 2.5)


def identity(t):
예제 #22
0
def simulation(adja_list, edge_list, matrix_seed, graph_seed):

    s = matrix_seed
    ss = graph_seed

    g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)
    qn = qt.QueueNetwork(g=g,
                         q_classes=q_classes,
                         q_args=q_args,
                         seed=ss,
                         blocking='BAS')

    # mat = data_pool_trans_matrix
    # mat = np.asarray(mat)
    # print("gogogoogogoogogo")
    # print(mat)
    # qn.set_transitions(mat)

    if data_pool_trans_matrix is not None:
        mat = renew_transition_matrix_2nd()
        print(mat)
        qn.set_transitions(mat)
    else:
        pass

    # print(qn.transitions(True))
    """
    mat = qt.generate_transition_matrix(g, seed=96)
    qn.set_transitions(mat)
    """

    # qn.draw(fname="sim.png", figsize=(12, 3), bbox_inches='tight')
    # plt.show()

    qn.initialize(edge_type=1)
    qn.clear_data()

    qn.start_collecting_data(edge_type=1)
    qn.start_collecting_data(edge_type=2)
    qn.start_collecting_data(edge_type=3)
    qn.start_collecting_data(edge_type=4)
    qn.start_collecting_data(edge_type=5)
    qn.start_collecting_data(edge_type=6)
    qn.start_collecting_data(edge_type=7)
    qn.start_collecting_data(edge_type=8)
    qn.start_collecting_data(edge_type=9)
    qn.start_collecting_data(edge_type=10)
    qn.start_collecting_data(edge_type=11)
    qn.start_collecting_data(edge_type=12)
    qn.simulate(t=100)
    """
    len(data2), means the total job in server 2
    """
    np.set_printoptions(suppress=True)
    data1 = qn.get_queue_data(edge_type=1)
    data2 = qn.get_queue_data(edge_type=2)
    data3 = qn.get_queue_data(edge_type=3)
    data4 = qn.get_queue_data(edge_type=4)
    data5 = qn.get_queue_data(edge_type=5)
    data6 = qn.get_queue_data(edge_type=6)
    data7 = qn.get_queue_data(edge_type=7)
    data8 = qn.get_queue_data(edge_type=8)
    data9 = qn.get_queue_data(edge_type=9)
    data10 = qn.get_queue_data(edge_type=10)
    data11 = qn.get_queue_data(edge_type=11)
    data12 = qn.get_queue_data(edge_type=12)

    dataa1 = qn.get_agent_data(edge_type=1, return_header=False)
    dataa12 = qn.get_agent_data(edge_type=12, return_header=False)
    """

                ========>  重要資料作業區 <============

    """

    total_job_num = len(data1)
    job_pool = 0
    each_total_job = []  # a list with each server's total job
    each_thoughtput = []  # a list with each server's throughtput
    """

                ========>  重要資料作業區 <============

    """

    # print("==========edge_type=1================")
    # print(data1)
    # print("==========edge_type=2================")
    # print(data2)
    # print("==========edge_type=3================")
    # print(data3)
    # print("==========edge_type=4================")
    # print(data4)
    # print("==========edge_type=5================")
    # print(data5)
    # print("==========edge_type=6================")
    # print(data6)
    # print("==========edge_type=7================")
    # print(data7)
    # print("==========edge_type=8================")
    # print(data8)
    # print("==========edge_type=9================")
    # print(data9)
    # print("==========edge_type=10================")
    # print(data10)
    # print("==========edge_type11================")
    # print(data11)
    # print("==========edge_type=12================")
    # print(data12)

    # print("totol job of server1: ", len(data1))
    # print("totol job of server2: ", len(data2))
    # print("totol job of server3: ", len(data3))
    # print("totol job of server4: ", len(data4))
    # print("totol job of server5: ", len(data5))
    # print("totol job of server6: ", len(data6))
    # print("totol job of server7: ", len(data7))
    # print("totol job of server8: ", len(data8))
    # print("totol job of server9: ", len(data9))
    # print("totol job of server10: ", len(data10))
    # print("totol job of server11: ", len(data11))
    # print("totol job of server12: ", len(data12),"\n")

    # each_total_job.append(len(data1))
    # each_total_job.append(len(data2))
    # each_total_job.append(len(data3))
    # each_total_job.append(len(data4))
    # each_total_job.append(len(data5))
    # each_total_job.append(len(data6))
    # each_total_job.append(len(data7))
    # each_total_job.append(len(data8))
    # each_total_job.append(len(data9))
    # each_total_job.append(len(data10))
    # each_total_job.append(len(data11))
    # each_total_job.append(len(data12))

    for i in range(len(data1)):
        if data1[i][2] != 0.:
            job_pool = job_pool + 1
    each_thoughtput.append(job_pool)
    # print("TOTAL NUMBER OF JOBS IN THIS SIMULATION: ",job_pool)

    # counter = 0
    # for i in range(len(data2)):
    #     if data2[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server2: ",counter)

    # counter = 0
    # for i in range(len(data3)):
    #     if data3[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server3: ",counter)

    # counter = 0
    # for i in range(len(data4)):
    #     if data4[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server4: ",counter)

    # counter = 0
    # for i in range(len(data5)):
    #     if data5[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server5: ",counter)

    # counter = 0
    # for i in range(len(data6)):
    #     if data6[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server6: ",counter)

    # counter = 0
    # for i in range(len(data7)):
    #     if data7[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server7: ",counter)

    # counter = 0
    # for i in range(len(data8)):
    #     if data8[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server8: ",counter)

    # counter = 0
    # for i in range(len(data9)):
    #     if data9[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server9: ",counter)

    # counter = 0
    # for i in range(len(data10)):
    #     if data10[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server9: ",counter)

    # counter = 0
    # for i in range(len(data11)):
    #     if data11[i][2] != 0.:
    #         counter = counter +1
    # each_thoughtput.append(counter)
    # # print("through put of server11: ",counter)

    container = len(data12)
    each_thoughtput.append(container)
    # print("CONTAINER HAS RECIEVED: ",container,"\n")
    """

                ========>  重要資料作業區 <============

    """
    # server_delay = {}
    server_delay["server2"] = particular_server_delay(data2)
    server_delay["server3"] = particular_server_delay(data3)
    server_delay["server4"] = particular_server_delay(data4)
    server_delay["server5"] = particular_server_delay(data5)
    server_delay["server6"] = particular_server_delay(data6)
    server_delay["server7"] = particular_server_delay(data7)
    server_delay["server8"] = particular_server_delay(data8)
    server_delay["server9"] = particular_server_delay(data9)
    server_delay["server10"] = particular_server_delay(data10)
    server_delay["server11"] = particular_server_delay(data11)

    # server_delayy = []
    # server_delayy.append(particular_server_delay(data2))
    # server_delayy.append(particular_server_delay(data3))
    # server_delayy.append(particular_server_delay(data4))
    # server_delayy.append(particular_server_delay(data5))
    # server_delayy.append(particular_server_delay(data6))
    # server_delayy.append(particular_server_delay(data7))
    # server_delayy.append(particular_server_delay(data8))
    # server_delayy.append(particular_server_delay(data9))
    # server_delayy.append(particular_server_delay(data10))
    # server_delayy.append(particular_server_delay(data11))

    # debug(each_total_job,each_thoughtput)                                   # for reward
    drop = delay_and_drop_caculate(dataa1, dataa12,
                                   (job_pool - container))  # for drop rate

    # check_distributtion(data1)

    print("total job in container: ", container)
    print("compared with the container        ",
          "the drop rate of this simulation: ", drop / container, "\n")
    improve_data(server_delay)
    # print(improve_data(server_delayy))
    """
예제 #23
0
파일: q_sim.py 프로젝트: mfatihaktas/fun
  
  data  = q.fetch_data()
  s0[k] = np.std(data[:,1] - data[:, 0] )
  w0 = np.hstack((w0, data[:,1] - data[:, 0] ) )
  
  q.clear()

# """
# The queueing network definition
adjacency = {
  0: {1: {'edge_type': 1} },
  1: {k: {'edge_type': 2} for k in range(2, 2 + nc) }
}

# edge_type = {0: {1: 1}, 1: {k: 2 for k in range(2, 22)}}
g = qt.adjacency2graph(adjacency)

qclass = {1: qt.QueueServer, 2: qt.QueueServer }
qargs  = {1: {'nServers': 1, 'deactive_t': h,
              'arrival_f': arr, 
              'service_f': lambda t: t,
              'AgentClass': qt.GreedyAgent},
          2: {'nServers': 1,
              'service_f': ser} }

qn = qt.QueueNetwork(adjacency, q_classes=qclass, q_args=qargs)
w1 = np.array([] )
s1 = np.zeros(N)

for k in range(N) :
  qn.start_collecting_data(eType=2)
예제 #24
0
def simulation(adja_list, edge_list, matrix_seed, graph_seed):

    # adja_list = {0: [1,2,3], 1: [4],2 :[4,5,6],3:[5],4:[6],5:[6],6:[7]}
    # edge_list = {0: {1:1,2:1,3:1}, 1: {4:2}, 2:{4:3,6:4,5:5}, 3:{5:6}, 4:{6:7},5:{6:8},6:{7:9}}

    s = matrix_seed
    ss = graph_seed

    g = qt.adjacency2graph(adjacency=adja_list, edge_type=edge_list)
    qn = qt.QueueNetwork(g=g,
                         q_classes=q_classes,
                         q_args=q_args,
                         seed=ss,
                         blocking='BAS')

    # mat = create_mat(g,s)
    # qn.set_transitions(mat)
    """
    mat = qt.generate_transition_matrix(g, seed=96)
    qn.set_transitions(mat)
    """

    qn.draw(fname="sim.png", figsize=(12, 3), bbox_inches='tight')
    # plt.show()

    qn.initialize(edge_type=1)
    qn.clear_data()

    qn.start_collecting_data(edge_type=1)
    qn.start_collecting_data(edge_type=2)
    qn.start_collecting_data(edge_type=3)
    qn.start_collecting_data(edge_type=4)
    qn.start_collecting_data(edge_type=5)
    qn.start_collecting_data(edge_type=6)
    qn.start_collecting_data(edge_type=7)
    qn.start_collecting_data(edge_type=8)
    qn.start_collecting_data(edge_type=9)
    qn.simulate(t=0.2)

    np.set_printoptions(suppress=True)
    data1 = qn.get_queue_data(edge_type=1)
    data2 = qn.get_queue_data(edge_type=2)
    data3 = qn.get_queue_data(edge_type=3)
    data4 = qn.get_queue_data(edge_type=4)
    data5 = qn.get_queue_data(edge_type=5)
    data6 = qn.get_queue_data(edge_type=6)
    data7 = qn.get_queue_data(edge_type=7)
    data8 = qn.get_queue_data(edge_type=8)
    data9 = qn.get_queue_data(edge_type=9)

    print("==========edge_type=1================")
    print(data1)
    print("==========edge_type=2================")
    # print(data2)
    # print("==========edge_type=3================")
    # print(data3)
    # print("==========edge_type=4================")
    # print(data4)
    # print("==========edge_type=5================")
    # print(data5)
    # print("==========edge_type=6================")
    # print(data6)
    # print("==========edge_type=7================")
    # print(data7)
    # print("==========edge_type=8================")
    # print(data8)
    # print("==========edge_type=9================")
    # print(data9,"\n")

    print("totol job of server1: ", len(data1))
    print("totol job of server2: ", len(data2))
    print("totol job of server3: ", len(data3))
    print("totol job of server4: ", len(data4))
    print("totol job of server5: ", len(data5))
    print("totol job of server6: ", len(data6))
    print("totol job of server7: ", len(data7))
    print("totol job of server8: ", len(data8))
    print("totol job of server9: ", len(data9), "\n")

    through_put = 0
    total_job_num = len(data1)

    counter = 0
    for i in range(len(data4)):
        if data4[i][2] != 0.:
            counter = counter + 1
    through_put = through_put + counter
    print("through put of server4: ", counter)

    counter = 0
    for i in range(len(data7)):
        if data7[i][2] != 0.:
            counter = counter + 1
    through_put = through_put + counter
    print("through put of server7: ", counter)

    counter = 0
    for i in range(len(data8)):
        if data8[i][2] != 0.:
            counter = counter + 1
    through_put = through_put + counter
    print("through put of server8: ", counter, "\n")

    print(
        "the through put of server4,7,8 is equal to the total number of job in server 9:",
        through_put)
    print("the through put of the map / the total number of jobs in map: ",
          through_put / total_job_num)
예제 #25
0
 def test_graph2dict(self):
     adj = generate_adjacency()
     g1 = qt.adjacency2graph(adj, adjust=2)
     aj1 = qt.graph2dict(g1)
     g2 = qt.adjacency2graph(aj1, adjust=2)
     self.assertTrue(nx.is_isomorphic(g1, g2))