Skip to content

Commit b48cacf

Browse files
committed
update with demo
1 parent 665a040 commit b48cacf

File tree

1 file changed

+58
-53
lines changed

1 file changed

+58
-53
lines changed

16-mcm-b/NetFlow.py

Lines changed: 58 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,70 @@
33

44
inf = float('inf')
55

6-
m = 4
76

8-
# 参数
9-
OD = np.array([
10-
[0,0,0,1000],
11-
[0,0,0,0],
12-
[0,0,0,0],
13-
[0,0,0,0]
14-
])
15-
T0 = np.array([
16-
[inf,2,1,1.5],
17-
[inf,inf,inf,2],
18-
[inf,inf,inf,1],
19-
[inf,inf,inf,inf]
20-
])
21-
C = np.array([
22-
[1,500,100,100],
23-
[1,1,1,500],
24-
[1,1,1,100],
25-
[1,1,1,1]
26-
])
27-
alpha, beta = 1, 2
7+
def netflow(OD, T0, C, n=30, alpha=1, beta=2):
8+
m = len(T0)
289

29-
# 初始化
30-
T = np.array(T0)
31-
Q = np.zeros_like(T0)
10+
# 初始化
11+
T = np.array(T0)
12+
Q = np.zeros_like(T0)
3213

14+
def updateQ(COD, P):
15+
P = np.array(P)
16+
for i in range(m):
17+
for j in range(m):
18+
path = P[i, j]
19+
for k in range(len(path)-1):
20+
s, t = path[k], path[k+1]
21+
Q[s, t] += COD[i, j]
3322

34-
def updateQ(COD, P):
35-
P = np.array(P)
36-
for i in range(m):
37-
for j in range(m):
38-
path = P[i, j]
39-
for k in range(len(path)-1):
40-
s, t = path[k], path[k+1]
41-
Q[s, t] += COD[i, j]
23+
def updateT():
24+
return T0*(1+alpha*((Q/C)**beta))
4225

43-
def updateT():
44-
return T0*(1+alpha*((Q/C)**beta))
26+
for i in range(n):
27+
_, P = Floyd(T)
28+
updateQ(OD/n, P)
29+
T = updateT()
4530

46-
# 分组批次
47-
n = 20
31+
return Q, T
4832

49-
for i in range(n):
50-
# print(f'turns {i}/{n}')
51-
_, P = Floyd(T)
52-
updateQ(OD/n, P)
53-
# print(Q)
54-
T = updateT()
55-
# print(T)
5633

57-
def evalue():
58-
value = 0
59-
i = 0
60-
for v in T.flatten():
61-
if v < inf:
62-
value += v
63-
i += 1
64-
return value/i
34+
if __name__ == "__main__":
35+
# 参数设定
36+
T0 = np.array([
37+
[inf, 2, 1, inf],
38+
[inf, inf, inf, 2],
39+
[inf, inf, inf, 1],
40+
[inf, inf, inf, inf]
41+
])
42+
OD = np.array([
43+
[0, 0, 0, 1000],
44+
[0, 0, 0, 0],
45+
[0, 0, 0, 0],
46+
[0, 0, 0, 0]
47+
])
48+
C = np.array([
49+
[1, 500, 100, 100],
50+
[1, 1, 1, 500],
51+
[1, 1, 1, 100],
52+
[1, 1, 1, 1]
53+
])
6554

66-
print(Q)
67-
print(evalue())
55+
def evalue(T):
56+
sum,i=0,0
57+
for v in T.flatten():
58+
if v < inf:
59+
sum +=v
60+
i += 1
61+
return sum/i
62+
63+
print('增加道路1-4之前:')
64+
Q, T = netflow(OD,T0,C)
65+
print('Q=', Q)
66+
print('evalue=',evalue(T))
67+
68+
print('增加道路1-4之后:')
69+
T0[0,3] = 1.5
70+
Q, T = netflow(OD,T0,C)
71+
print('Q=', Q)
72+
print('evalue=',evalue(T))

0 commit comments

Comments
 (0)