220 likes | 365 Views
优化控制交通 —— 十字路口的交通模型. 背景 —— 十字路口的红绿灯控制的缺陷. 白天内交通灯的时间长短不变 主干道单位时间的车流量一天当中变化很大. 我进攻的方向在哪里? —— 初步试验性实践:. 观察 非常复杂的系统 行人、自行车的影响很小 摩托车会从汽车旁的狭小空间内通过 汽车的运行更有规律 记录 分析 用较简单的函数行吗 有现成的数学理论吗 计算机模拟. 实现 —— 实践化的艰辛与快乐. 程序的结构:理想化的模拟 程序设计遇到的难题 核心 —— 优化:判别优与劣的标准 各部分的确定. 总的方式.
E N D
背景——十字路口的红绿灯控制的缺陷 • 白天内交通灯的时间长短不变 • 主干道单位时间的车流量一天当中变化很大
我进攻的方向在哪里?——初步试验性实践: 观察 • 非常复杂的系统 • 行人、自行车的影响很小 • 摩托车会从汽车旁的狭小空间内通过 • 汽车的运行更有规律 记录 分析 • 用较简单的函数行吗 • 有现成的数学理论吗 • 计算机模拟
实现——实践化的艰辛与快乐 程序的结构:理想化的模拟 程序设计遇到的难题 • 核心——优化:判别优与劣的标准 • 各部分的确定
总的方式 • 把一天分为几个车流量变化不大的时段,在每个时段内采用固定的红绿灯时间 • 不同的时段的红绿灯时间不同。
B 车 道 D 车 道 B车组通行 A车组通行 A车道 C车道 C车道 A车道 C车组通行 D车组通行 D 车 道 B 车 道
当绿灯亮起来后,第一辆车马上启动,其它汽车在它前面的那一辆启动一段时间后才启动。经实测,这段时间平均大概是2秒。当绿灯亮起来后,第一辆车马上启动,其它汽车在它前面的那一辆启动一段时间后才启动。经实测,这段时间平均大概是2秒。 假设车队有N辆车,那么绿灯亮到这辆车启动的时间为 2(n-1)秒,然后它以车队的平均速度V1步/秒匀速行驶, 行驶的距离为n(L+D)步直到开过停车线。 所需总时间为2(n-1)+ n(L+D)/V秒,即2(n-1)+ 2n。
模型的核心 • 在单位时间内,计算所有车辆在通过十字路口浪费的总路程。
每辆车损失的路程可能包含的情况 • A:车从V减速到0损失的行驶路程 • V2/2a(a为加速度); • B:车从0加速到V损失的行驶路程 • V2/2a; • C:车从车队的速度V1加速到A损失的行驶路程 • (V-V1) 2/2a; • D:车从A减速到车队的速度V1损失的行驶路程 • (V-V1) 2/2a; • E:等待红灯时损失的行驶路程 • V*T(T为红灯时间) • F:跟随车队缓慢开过损失的行驶路程 • (V-V1)*T(T跟随车队缓慢行驶的时间)
路程的损失计算模型 计算每辆车的损失路程并累加。我们把汽车分成三种情况: • 绿灯亮起来前已经在车队中的车: A+B+E+F • 绿灯亮起来后到达车队尾的车,但车队的最后一辆车还没有开动: C+D+E+F • 灯亮起来后到达车队尾的车,但车队的最后一辆车已经开动: C+D+F • 车队全部通过后到达的车没有路程损失。
车队行驶通过的模型 车队的最后一辆车开过停车线所需得时间。 • 汽车的启动时间 • 跟随车队行驶的时间
当绿灯亮起来后,第一辆车马上启动,其它汽车在它前面的那一辆启动一段时间后才启动。经实测,这段时间平均大概是2秒。当绿灯亮起来后,第一辆车马上启动,其它汽车在它前面的那一辆启动一段时间后才启动。经实测,这段时间平均大概是2秒。 假设车队有N辆车,那么绿灯亮到这辆车启动的时间为 2(n-1)秒,然后它以车队的平均速度V1步/秒匀速行驶, 行驶的距离为n(L+D)步直到开过停车线。 所需总时间为2(n-1)+ n(L+D)/V秒,即2(n-1)+ 2n。
B 车 道 D 车 道 B车组通行 A车组通行 A车道 C车道 C车道 A车道 C车组通行 D车组通行 D 车 道 B 车 道
车队全部通过时间的计算模型 从绿灯亮到车队全部通过的时间的计算采用分段累计法。 • 先算当前的车队所需的通过时间 t1=2(n-1)+ n(L+D)/V, • 计算在这时间内新到的车组成的车队所需的通过时间 t2=n1(L+D)/V • 循环此过程直到新到的车少于等于1部。
Cls • Dim a(8, 200), w(4), b(8, 200) • velocy = 5: lcar = 5 + 3: lbus = 10 + 3: avelocy = 15:r = 10000000 • For p = 1 To 8 • READ v • Data 9, 9, 5, 7, 5, 6, 7, 8 • v(p) = v / 60 • For i = 1 To 200 • timered = i: timeall = 0: chedui = 1: sa = 0 • 1 n = Int(v(p) * timered): If n < 1 Then GoTo 5 • longeur = n * 8 • While chedui = 1 • Time = longeur / 8 + 2 * (n - 1) • For ncar = 1 To n: s = 0 • s = 12 * (timered + (n - 1) * 8 / 8 + 2 * (n - 1)) + 25 • sa = sa + s • Next ncar • chedui = 0: GoTo 4 • Wend • For ncar = 1 To n: s = 0: t = 0 • a = Rnd(1) • If ((ncar - 1) / v(p) + v(p) * a) < (lastn * 2 * (n - 1)) Then t = (lastn * 2 * (n - 1)) - (ncar / v(p)) • If t = 0 Then nowlong = (n - ncar / (13 / 5 * v(p))) * 8: sa = sa + 4 • If nowlong < 8 Then GoTo 5 • If t <> 0 Then sa = sa + 21: nowlong = lastn * 8 • s = 12 * (t + nowlong / 8) - nowlong • sa = sa + s • Next ncar • Time = longeur / 8 • 4 timeall = timeall + Time: timered = Time: lastn = n: GoTo 1 • 5 a(p, i) = timeall: b(p, i) = sa • Next i • Next p
'FOR p = 1 TO 8 • 'FOR i = 5 TO 100 STEP 5 • 'PRINT b(p, i); • 'NEXT i: PRINT • 'NEXT p • For g1 = 5 To 60 Step 1 • For g2 = 5 To 60 Step 1 • For g3 = 5 To 60 Step 1 • For g4 = 5 To 60 Step 1 • w(1) = g2 + g3 + g4 • w(2) = g4 + g1 + g3 • w(3) = g2 + g4 + g1 • w(4) = g1 + g2 + g3 • lostdistance = 0 • For k = 1 To 8 • If k = 1 Or 2 Then m = 1: a = w(m): runtime = g1: If runtime < a(k, a) Then GoTo 14 • If k = 3 Or 4 Then m = 2: a = w(m): runtime = g2: If runtime < a(k, a) Then GoTo 13 • If k = 5 Or 6 Then m = 3: a = w(m): runtime = g3: If runtime < a(k, a) Then GoTo 12 • If k = 7 Or 8 Then m = 4: a = w(m): runtime = g4: If runtime < a(k, a) Then GoTo 11 • lostdistance = lostdistance + b(k, w(m)) • Next k • If r > lostdistance Then r = lostdistance: r1 = g1: r2 = g2: r3 = g3: r4 = g4 • 11 Next g4 • 12 Next g3 • 13 Next g2 • 14 Next g1 • Print r1, r2, r3, r4
四、结果与比较。以下是我们在东街口早晨7:15实测的车流量数据:四、结果与比较。以下是我们在东街口早晨7:15实测的车流量数据:
为什么红绿灯时间就不能缩短? • 短的红绿灯时间更灵活,更有效率。
结论——自我反思 • 我的优点在哪里? • 不是最彻底的解决方案 设想一个完美的模型:每时每刻收集车流量和每条车道上车队的长短,用这些信息判断当前的交通状况,预测未来可能的通行方案,再依据此寻找到最有效率的方案以决定当前的通行车队和通行时间长短。