-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathnaiveFunc.py
94 lines (71 loc) · 2.67 KB
/
naiveFunc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import time
from schedule_utilities import findOverflow
from schedule_utilities import updateResPool
def naiveFunc(G,flowSet,n_port,T,flownum,queueLength,hostNum,swNum):
start=time.time()
# create resource pool
resource_pool_naive = []
for i in range(n_port):
port_list = []
for j in range(T):
vertex_dict = {
'port': i+1,
'time': j+1,
'capacity': queueLength
}
port_list.append(vertex_dict)
resource_pool_naive.append(port_list)
for i in range(flownum):
curflow=flowSet[i]
curOffset=0
isOverflow=findOverflow(T,curflow,curOffset,resource_pool_naive)
if isOverflow==False:
curflow.schedFlag=1
curflow.offset=0
updateResPool(T,curflow,curOffset,resource_pool_naive)
end=time.time()
excTime=end-start
sucNum=0
for flow in flowSet:
sucNum=sucNum+flow.schedFlag
sucRate=sucNum/flownum
allQueue=T*(n_port-hostNum)*queueLength#除去和host连接的端口
allocatedQueue=0
preNum=0
for sw in range(swNum):
neiborsw=list(G[sw])
neiborsw.sort()
for neighbor in neiborsw:
if neighbor<swNum:
port=preNum+neiborsw.index(neighbor)+1
for j in range(T):
allocatedQueue=allocatedQueue+queueLength-resource_pool_naive[port-1][j]['capacity']
resUtiRate=allocatedQueue/allQueue
allocatedQueue=0
variance=0
for i in range(n_port):
for j in range(T):
allocatedQueue=allocatedQueue+queueLength-resource_pool_naive[i][j]['capacity']
aveQueue=allocatedQueue/T/n_port
for i in range(n_port):
for j in range(T):
variance=variance+(queueLength-resource_pool_naive[i][j]['capacity']-aveQueue)*(queueLength-resource_pool_naive[i][j]['capacity']-aveQueue)
variance=variance/T/n_port
return excTime,sucRate,resUtiRate,variance
def naiveFunc_tabu(flowSet,T,flownum,resource_pool):
start=time.time()
for i in range(flownum):
curflow=flowSet[i]
curOffset=0
isOverflow=findOverflow(T,curflow,curOffset,resource_pool)
if isOverflow==False:
curflow.schedFlag=1
curflow.offset=0
updateResPool(T,curflow,curOffset,resource_pool)
end=time.time()
excTime=end-start
sucNum=0
for flow in flowSet:
sucNum=sucNum+flow.schedFlag
sucRate=sucNum/flownum
return excTime,sucRate