1

我想做一个知道拥塞的dikstra算法

我正在监视从中获取值http://localhost:8008/metric/ALL/flows/json

这是我的代码:

def checkCost(self):
    # flag=1
    while (1):
    #print "ok haha"
        url = 'http://localhost:8008/metric/ALL/flows/json'
        r = requests.get(url)
        vals = r.json()
        valueNumber=0
        for v in vals:
            mname  = v["metricValue"]
            message = '%s  \n' % (mname)
            valueNumber=float(message)
            # print message

我的拓扑:

我有每条路径的权重值:

s1 -> s2 = 2
s1 -> s3 = 2
s1 -> s4 = 1
s2 -> s3 = 2
s3 -> s4 = 2
s4 -> s5 = 1
def dijalg(self,G,source,wG=None,huge=1e30000):
    dist={}
    pred={}
    Q = priorityDictionary()
    Q[source] = 0
    #print (G.edge)
    if wG == None:
        for u in G.edge:
            dist[u]={}
            for v in G.edge:
                #print type(v)
                #print G.has_edge
                if G.has_edge(u,v):
                    if (u==1):
                        if (v==2):
                            dist[u][v] = 2
                        elif (v==3):
                            dist[u][v] = 2
                        elif (v==4):
                            dist[u][v] = 1
                    if (u==2):
                        if (v==1):
                            dist[u][v] = 2
                        elif (v==3):
                            dist[u][v] = 2
                    if (u==3):
                        if (v==1):
                            dist[u][v] = 2
                        elif (v==4):
                            dist[u][v] = 1
                    if (u==4):
                        if (v==1):
                            dist[u][v] = 1
                        elif (v==3):
                            dist[u][v] = 1
                        elif (v==5):
                            dist[u][v] = 1
                    if (u==5):
                        if (v==4):
                            dist[u][v] = 1
                else:
                    dist[u][v]=huge
            dist[u][u]=0

如果 valuenumber 的值大于 1000000kbit,则成本将为 +10,他们将搜索另一条路径。

例如

s4 -> s1大于 1000000kbit
所以如果 s5 需要到 s1 的路径,它会想要做 s5->s4->s1。但是,如果我有一个valuenumber > 1000000kbit加权成本值将上升 10 的条件,那么 s4 -> s1 中的成本实际上将为 11,而 s5 将搜索另一条路径。

我对如何对值数进行此测试感到困惑,有人可以帮忙吗?

4

0 回答 0