-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathnaiveGreedyFunc.py
113 lines (85 loc) · 3.41 KB
/
naiveGreedyFunc.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import time
from schedule_utilities import minSizeFlow
from schedule_utilities import findOverflow
from schedule_utilities import updateResPool
def naiveGreedyFunc(G,flowSet,n_port,T,flownum,queueLength,hostNum,swNum):
start=time.time()
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=minSizeFlow(flowSet)
offsetList=range(flowSet[curflow].period)
offsetList=sorted(offsetList,reverse=True)
for offset in offsetList:
isOverflow=findOverflow(T,flowSet[curflow],offset,resource_pool_naive)
if isOverflow==False:
flowSet[curflow].schedFlag=1
flowSet[curflow].offset=offset
updateResPool(T,flowSet[curflow],offset,resource_pool_naive)
break
if flowSet[curflow].schedFlag==0:
flowSet[curflow].schedFlag=-1
end=time.time()
excTime=end-start
sucNum=0
for flow in flowSet:
#print(flow.offset)
if flow.schedFlag==1:
sucNum+=1
sucRate=sucNum/flownum
allQueue=T*(n_port-hostNum)*queueLength
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 naiveGreedyFunc_tabu(flowSet,T,flownum,resource_pool_naive):
start=time.time()
for i in range(flownum):
curflow=minSizeFlow(flowSet)
offsetList=range(flowSet[curflow].period)
offsetList=sorted(offsetList,reverse=True)
for offset in offsetList:
isOverflow=findOverflow(T,flowSet[curflow],offset,resource_pool_naive)
if isOverflow==False:
flowSet[curflow].schedFlag=1
flowSet[curflow].offset=offset
updateResPool(T,flowSet[curflow],offset,resource_pool_naive)
break
if flowSet[curflow].schedFlag==0:
flowSet[curflow].schedFlag=-1
end=time.time()
excTime=end-start
sucNum=0
for flow in flowSet:
#print(flow.offset)
if flow.schedFlag==1:
sucNum+=1
sucRate=sucNum/flownum
return excTime,sucRate