第十六届“华中杯”大学生数学建模挑战赛(B题)深度剖析|建模完整过程+详细思路+代码全解析

这篇具有很好参考价值的文章主要介绍了第十六届“华中杯”大学生数学建模挑战赛(B题)深度剖析|建模完整过程+详细思路+代码全解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题1

问题1的建模过程如下:

假设信号灯周期固定不变,且已知所有车辆的行车轨迹,我们可以建立如下模型来估计信号灯的红绿周期:

首先,我们需要定义一些符号:

  • T s i g n a l T_{signal} Tsignal:信号灯的红绿周期,单位为秒
  • T t r a c k T_{track} Ttrack:车辆行车轨迹数据的采样间隔,单位为秒
  • t i t_{i} ti:第i个车辆的行车轨迹数据的时间点,单位为秒
  • x i ( t ) x_{i}(t) xi(t):第i个车辆在时间点t时的X坐标,单位为米
  • y i ( t ) y_{i}(t) yi(t):第i个车辆在时间点t时的Y坐标,单位为米
  • v i ( t ) v_{i}(t) vi(t):第i个车辆在时间点t时的速度,单位为米/秒
  • a i ( t ) a_{i}(t) ai(t):第i个车辆在时间点t时的加速度,单位为米/秒²

根据信号灯的红绿周期,我们可以将每个周期分成两个阶段:红灯阶段和绿灯阶段。假设红灯阶段的时长为 T r e d T_{red} Tred,绿灯阶段的时长为 T g r e e n T_{green} Tgreen,且 T r e d + T g r e e n = T s i g n a l T_{red}+T_{green}=T_{signal} Tred+Tgreen=Tsignal

为了估计信号灯的红绿周期,我们需要从车辆行车轨迹数据中找出每个周期的红灯阶段和绿灯阶段。假设某个车辆在某一周期的某个时间点 t i t_{i} ti处于红灯阶段,那么它在 t i + T r e d t_{i}+T_{red} ti+Tred时应该处于绿灯阶段。同理,如果它在 t i t_{i} ti处于绿灯阶段,那么它在 t i + T g r e e n t_{i}+T_{green} ti+Tgreen时应该处于红灯阶段。

因此,我们可以通过以下公式来判断车辆在某个时间点处于红灯阶段还是绿灯阶段:
r i ( t ) = { 1 , i f t i   m o d   T s i g n a l < T r e d 0 , i f t i   m o d   T s i g n a l ≥ T r e d \begin{equation} r_{i}(t)=\left\{ \begin{aligned} 1,\quad if\quad t_{i}\bmod T_{signal}<T_{red}\\ 0,\quad if\quad t_{i}\bmod T_{signal}\geq T_{red} \end{aligned} \right. \end{equation} ri(t)={1,iftimodTsignal<Tred0,iftimodTsignalTred

其中, r i ( t ) r_{i}(t) ri(t)为某个车辆在时间点t是否处于红灯阶段的指示变量。如果 r i ( t ) = 1 r_{i}(t)=1 ri(t)=1,表示该车辆在时间点t处于红灯阶段;如果 r i ( t ) = 0 r_{i}(t)=0 ri(t)=0,表示该车辆在时间点t处于绿灯阶段。

然后,我们可以通过计算每个周期内红灯阶段的时长和绿灯阶段的时长来估计信号灯的红绿周期。假设在某个周期内,有n辆车处于红灯阶段,m辆车处于绿灯阶段,那么该周期的红灯阶段时长和绿灯阶段时长分别为:
T r e d = 1 n ∑ i = 1 n T t r a c k ( r i ( t ) = 1 ) T_{red}=\frac{1}{n}\sum_{i=1}^{n}T_{track}(r_{i}(t)=1) Tred=n1i=1nTtrack(ri(t)=1)
T g r e e n = 1 m ∑ i = 1 m T t r a c k ( r i ( t ) = 0 ) T_{green}=\frac{1}{m}\sum_{i=1}^{m}T_{track}(r_{i}(t)=0) Tgreen=m1i=1mTtrack(ri(t)=0)

其中, T t r a c k ( r i ( t ) = 1 ) T_{track}(r_{i}(t)=1) Ttrack(ri(t)=1)表示在 r i ( t ) = 1 r_{i}(t)=1 ri(t)=1时,第i个车辆的行车轨迹数据的采样间隔。

最后,我们可以通过取所有周期的平均值来估计信号灯的红绿周期:
T s i g n a l = 1 N ∑ j = 1 N ( T r e d + T g r e e n ) T_{signal}=\frac{1}{N}\sum_{j=1}^{N}(T_{red}+T_{green}) Tsignal=N1j=1N(Tred+Tgreen)

其中,N为总周期数。

综上所述,我们可以通过车辆行车轨迹数据来估计信号灯的红绿周期,具体的计算步骤如下:

  1. 遍历所有车辆,根据公式(1)来判断每个时间点处于红灯阶段还是绿灯阶段。
  2. 对每个周期,统计处于红灯阶段的车辆数n和处于绿灯阶段的车辆数m,计算红灯阶段时长 T r e d T_{red} Tred和绿灯阶段时长 T g r e e n T_{green} Tgreen
  3. 对所有周期,计算 T s i g n a l T_{signal} Tsignal的平均值,即为信号灯的红绿周期的估计值。

1.建立模型
假设信号灯的周期为T,车辆行驶速度为v,则车辆通过一个信号灯的周期为T/v,即车辆通过一个信号灯需要的时间。假设一个路口的所有车辆轨迹数据为D,其中包含n辆车,每辆车经过T/v的时间间隔为t1,t2,…,tn,则按照顺序通过信号灯的时间为t1,t1+t2,…,t1+t2+…+tn,记为s1,s2,…,sn。则根据信号灯周期T的定义,可以得到以下公式:
T = 1 n ∑ i = 1 n s i T=\frac{1}{n}\sum_{i=1}^{n}s_i T=n1i=1nsi
其中,n为车辆数,s为经过信号灯的时间间隔。

2.估计信号灯的红绿周期
根据步骤1中的公式,可以通过D中所有车辆经过信号灯的时间间隔的平均值来估计信号灯的红绿周期T。即:
T = 1 n ∑ i = 1 n s i T=\frac{1}{n}\sum_{i=1}^{n}s_i T=n1i=1nsi

3.填入表1
根据步骤2中求得的信号灯周期T,可以填入表1中相应的位置。

4.影响因素讨论
(1) 样本车辆比例:样本车辆比例越大,表示数据的覆盖范围越广,可以更准确的估计信号灯的周期。
(2) 车流量:车流量越大,表示数据量越大,可以更准确的估计信号灯的周期。
(3) 定位误差:定位误差会影响车辆经过信号灯的时间间隔的精确度,从而影响信号灯周期的估计精度。定位误差越小,估计的信号灯周期越准确。

5.求解方法
根据步骤2中的公式,可以通过求取所有车辆经过信号灯的时间间隔的平均值来估计信号灯的周期。如果数据量大,可以采用数值求解的方法,通过迭代计算来求取最优解。如果数据量较小,也可以采用解析求解的方法,通过对步骤2中的公式进行化简,得到更简洁的表达式来求解信号灯周期。

6.结论
通过以上建模和求解方法,可以根据车辆行驶轨迹数据来估计信号灯的周期,为电子地图服务商提供更准确的信号灯信息,从而为司机提供更好的导航服务。同时,根据影响因素的讨论,可以提出相应的改进措施来提高信号灯周期的估计精度。

python示例代码如下:

import pandas as pd
import numpy as np

# 读取轨迹数据文件
df = pd.read_csv('附件1.csv')

# 预处理数据,去除重复数据和异常数据
df = df.drop_duplicates()
df = df[df['X'] >= 0]
df = df[df['Y'] >= 0]

# 将轨迹数据按照时间戳从小到大排序
df = df.sort_values(by='Time')

# 定义函数来判断车辆是否在信号灯的影响范围内
def in_range(x, y):
    if x <= 100 and y <= 100:
        return True
    else:
        return False

# 遍历每个车辆的轨迹数据,记录每个时间点车辆的位置和信号灯状态
# 1表示红灯,0表示绿灯
status = []
for index, row in df.iterrows():
    if in_range(row['X'], row['Y']):
        if row['X'] <= 50:
            status.append(1)
        else:
            status.append(0)
    else:
        status.append(-1)

# 计算每个周期内红灯和绿灯的时间
t1 = 0
t2 = 0
for i in range(len(status)):
    if status[i] == 1:
        t1 += 1
    elif status[i] == 0:
        t2 += 1
    else:
        continue

# 计算信号灯周期T
T = t1 + t2

# 输出结果
print("路口信号灯的周期为{}秒,其中红灯时间为{}秒,绿灯时间为{}秒。".format(T, t1, t2))

问题2

问题2的建模过程如下:

在建立模型时,我们可以假设信号灯的周期为 T T T,而每个车辆在通过路口时,会记录下其经过路口的时间 t i t_i ti。根据题目描述,我们假设所有的信号灯只有红、绿两种状态,且每次变换状态的时刻 t i t_i ti都是整数倍的 T T T。因此,我们可以根据每个车辆通过路口的时间 t i t_i ti来判断其所处的信号灯状态。

首先,我们可以定义一个函数 f ( t ) f(t) f(t)来表示信号灯状态的变化,如果在 t t t时刻,信号灯为绿灯,则 f ( t ) = 1 f(t)=1 f(t)=1,如果为红灯,则 f ( t ) = 0 f(t)=0 f(t)=0。根据题目所给的数据,我们可以得到每个车辆通过路口时,信号灯的状态变化序列 { f ( t i ) } \{f(t_i)\} {f(ti)}

接着,我们需要对信号灯的周期 T T T进行估计。由于信号灯的周期是固定不变的,我们可以假设在某段时间内,通过某个路口的所有车辆的平均速度 v v v是固定的。那么,在这段时间内,通过路口的每辆车所花费的时间 t i t_i ti应该是相同的,即 t i = d i v t_i=\frac{d_i}{v} ti=vdi,其中 d i d_i di为第 i i i辆车通过路口所走的距离。

根据题目所给的数据,我们可以得到每个车辆通过路口所走的距离 d i d_i di,因此,我们可以得到每个车辆通过路口所花费的时间 t i t_i ti。由于我们假设信号灯的状态变化时刻 t i t_i ti为整数倍的 T T T,因此我们可以通过求解最小二乘法来估计出信号灯的周期 T T T,具体的公式如下:

T = 1 N ∑ i = 1 N ( t i − d i v ) 2 T=\frac{1}{N}\sum_{i=1}^N(t_i-\frac{d_i}{v})^2 T=N1i=1N(tivdi)2

其中, N N N为通过该路口的车辆数量, t i t_i ti为第 i i i辆车通过路口所花费的时间, d i d_i di为第 i i i辆车通过路口所走的距离, v v v为通过该路口的所有车辆的平均速度。

在估计信号灯的周期 T T T时,我们假设通过某个路口的所有车辆的平均速度 v v v是固定的。但实际上,通过该路口的车辆的平均速度 v v v是会受到车流量的影响的。因此,如果车流量较大,会导致通过该路口的车辆的平均速度 v v v变慢,从而影响到信号灯周期的估计精度。因此,我们可以引入一个车流量的参数 α \alpha α,来表示车流量对信号灯周期估计的影响。具体的公式如下:

T = 1 N ∑ i = 1 N ( t i − d i v − α ) 2 T=\frac{1}{N}\sum_{i=1}^N(t_i-\frac{d_i}{v-\alpha})^2 T=N1i=1N(tivαdi)2

其中, N N N为通过该路口的车辆数量, t i t_i ti为第 i i i辆车通过路口所花费的时间, d i d_i di为第 i i i辆车通过路口所走的距离, v v v为通过该路口的所有车辆的平均速度, α \alpha α为车流量对信号灯周期估计的影响参数。

另外,由于轨迹数据存在定位误差,误差大小未知。因此,我们还可以引入一个定位误差的参数 β \beta β,来表示定位误差对信号灯周期估计的影响。具体的公式如下:

T = 1 N ∑ i = 1 N ( t i − d i v − α − β ) 2 T=\frac{1}{N}\sum_{i=1}^N(t_i-\frac{d_i}{v-\alpha-\beta})^2 T=N1i=1N(tivαβdi)2

其中, N N N为通过该路口的车辆数量, t i t_i ti为第 i i i辆车通过路口所花费的时间, d i d_i di为第 i i i辆车通过路口所走的距离, v v v为通过该路口的所有车辆的平均速度, α \alpha α为车流量对信号灯周期估计的影响参数, β \beta β为定位误差对信号灯周期估计的影响参数。

因此,我们可以通过求解最小二乘法来估计出信号灯的周期 T T T,并通过调整车流量参数 α \alpha α和定位误差参数 β \beta β来提高信号灯周期估计的精度。

  1. 建立模型
    假设每个信号灯都有固定的红绿周期T,我们可以通过观察车辆的行车轨迹来估计信号灯的周期。假设路口有N个车道,每个车道有M辆车同时通行,车辆的行车轨迹可以表示为一个N*M的矩阵。如果我们将这个矩阵按照时间点和车道来排序,那么在每个时间点,每个车道上都会有一辆车通过,这样就可以观察到车辆通过路口的时间间隔,从而估计信号灯的周期。

  2. 公式解释
    假设第i个车道上第j辆车通过路口的时间点为 t i j t_{ij} tij,那么在第k个时间点,第i个车道上通过的第j辆车的时间点为 t i j k t_{ij}^{k} tijk,则该车道的周期可以表示为:
    T i = 1 M ∑ j = 1 M ( t i j k + 1 − t i j k ) T_i = \frac{1}{M}\sum_{j=1}^{M}(t_{ij}^{k+1} - t_{ij}^{k}) Ti=M1j=1M(tijk+1tijk)
    其中, k = 0 , 1 , 2 , . . . , N − 1 k=0,1,2,...,N-1 k=0,1,2,...,N1,即我们选择N个时间点来估计周期, M M M为每个时间点通过的车辆数。

  3. 影响因素分析
    (1) 样本车辆比例
    样本车辆比例指的是我们能够获取的车辆轨迹数据占所有车辆的比例。当样本车辆比例较低时,我们观察到的车辆通过路口的时间间隔可能不够充分,从而导致估计的周期不准确。因此,样本车辆比例越高,我们估计的周期越准确。
    (2) 车流量
    车流量指的是单位时间内通过路口的车辆数量。当车流量较大时,路口的拥堵情况会影响车辆通过的时间间隔,从而导致估计的周期不准确。因此,车流量越大,我们估计的周期越不准确。
    (3) 定位误差
    定位误差指的是车辆的实际位置与我们观察到的位置之间的偏差。当定位误差较大时,我们观察到的时间间隔可能不准确,从而导致估计的周期不准确。因此,定位误差越小,我们估计的周期越准确。

  4. 公式推导
    假设每个车道上通过的车辆的时间间隔服从正态分布,即:
    t i j k + 1 − t i j k ∼ N ( T i , σ 2 ) t_{ij}^{k+1} - t_{ij}^{k} \sim N(T_i, \sigma^2) tijk+1tijkN(Ti,σ2)
    其中, T i T_i Ti为该车道的周期, σ 2 \sigma^2 σ2为方差。则该车道的周期可以表示为:
    T i = 1 M N ∑ j = 1 M ∑ k = 0 N − 1 ( t i j k + 1 − t i j k ) T_i = \frac{1}{MN}\sum_{j=1}^{M}\sum_{k=0}^{N-1}(t_{ij}^{k+1} - t_{ij}^{k}) Ti=MN1j=1Mk=0N1(tijk+1tijk)
    将每个车道的周期加权求和,得到总的周期:
    T = 1 N ∑ i = 1 N w i T i T = \frac{1}{N}\sum_{i=1}^{N}w_iT_i T=N1i=1NwiTi
    其中, w i w_i wi为第i个车道上通过的车辆数占总车辆数的比例。

python示例代码如下:

import numpy as np
import pandas as pd
from scipy.signal import find_peaks
from scipy.signal import argrelextrema

# 读取数据文件并转换为DataFrame格式
data = pd.read_csv('data.csv')

# 将数据分组,按照车辆ID和时间点进行分组
grouped_data = data.groupby(['车辆ID', '时间点'])

# 计算每辆车在每个时间点的位置变化量
diff_data = grouped_data['当前位置X坐标', '当前位置Y坐标'].diff()

# 计算每辆车在每个时间点的速度
speed_data = diff_data / 1 # 1秒采样一次

# 计算每个时间点所有车辆的平均速度
mean_speed = speed_data.groupby('时间点').mean()

# 找出平均速度的极大值和极小值,即信号灯周期的开始和结束时间点
peaks, _ = find_peaks(mean_speed, height=0, distance=5) # distance为两个极大值之间的最小距离

# 根据极大值和极小值的位置计算信号灯周期
period = np.diff(peaks)

# 输出结果
print("信号灯周期为:", period)

问题3

第三个问题是针对附件3中6个路口的样本车辆轨迹数据,判断这些路口相应方向的信号灯周期在这段时间内是否有变化,如果有变化,求出变化的时刻和新旧周期参数,并指明识别出周期变化所需的时间和条件。

解决问题三,首先,我们要根据附件3中6个路口的样本车辆轨迹数据,判断车辆在路口的行驶方向,即直行、左转、右转等。由于附件3中的样本车辆轨迹数据是连续的,并且时间间隔为1秒,可以通过计算车辆在相邻两个时间点的位置变化来判断车辆的行驶方向。具体的方法是,对于每一个时间点,我们可以计算车辆的速度方向,如果车辆在该时间点的速度方向和下一个时间点的速度方向一致,则车辆在该时间点为直行;如果车辆在该时间点的速度方向和下一个时间点的速度方向相差90度,则车辆在该时间点为左转;如果车辆在该时间点的速度方向和下一个时间点的速度方向相差270度,则车辆在该时间点为右转。

根据上述方法,我们可以得到每个时间点的车辆行驶方向,进而可以判断车辆是否受到信号灯的控制。如果车辆在直行方向受到信号灯的控制,则在每个周期内,车辆应该会经过信号灯两次,一次为绿灯,一次为红灯。同理,如果车辆在左转或右转方向受到信号灯的控制,则在每个周期内,车辆也会经过信号灯两次,一次为绿灯,一次为红灯。因此,我们可以根据车辆经过信号灯的次数来判断信号灯的周期。如果车辆经过信号灯的次数为偶数,则信号灯的周期为该时间段内车辆经过信号灯的平均时间间隔;如果车辆经过信号灯的次数为奇数,则信号灯的周期为该时间段内车辆经过信号灯的最小公倍数。

为了判断信号灯的周期是否发生变化,我们可以将时间段内的车辆行驶轨迹按照不同的时间段进行分段,然后分别计算每个时间段内车辆经过信号灯的次数,进而判断信号灯的周期是否发生变化。如果某个时间段内车辆经过信号灯的次数和上一个时间段内车辆经过信号灯的次数相差较大,则可以判断信号灯的周期发生了变化。

假设时间段的时间间隔为T,那么识别出信号灯周期发生变化所需的时间为2T,即需要至少两个时间段的数据来判断信号灯的周期是否发生了变化。同时,为了提高判断的准确性,可以设置一个阈值,当某个时间段内车辆经过信号灯的次数和上一个时间段内车辆经过信号灯的次数相差超过该阈值时,才判断信号灯的周期发生了变化。

综上所述,我们可以通过分析车辆行驶方向和经过信号灯的次数来判断信号灯的周期,并通过比较不同时间段内的数据来判断信号灯周期是否发生变化。最后,根据发生变化的时刻和新旧周期参数,可以得出周期变化所需的时间和条件。

建模过程如下:
首先,建立模型来估计信号灯周期。假设信号灯的周期为T秒,每个周期内,信号灯的状态会从红变为绿,再变回红。因此,每个周期内,信号灯的状态变化一次。假设某个路口的信号灯状态在t=0时刻变为绿灯,则在t=T/2时刻,信号灯状态会变为红灯。因此,可以用一个sin函数来表示信号灯的状态变化:

s ( t ) = A sin ⁡ ( ω t + φ ) s(t)=A\sin(\omega t+\varphi) s(t)=Asin(ωt+φ)

其中,A为信号灯状态的幅度, ω \omega ω为信号灯状态变化的频率, φ \varphi φ为信号灯状态变化的相位差。对于一个周期内的信号灯状态变化,可以表示为:

s ( t ) = A sin ⁡ ( 2 π t T + φ ) s(t)=A\sin\left(\frac{2\pi t}{T}+\varphi\right) s(t)=Asin(T2πt+φ)

为了估计信号灯的周期,需要用到车辆的行车轨迹数据。假设某一条车道上的车辆行驶的速度为 v v v,则车辆在t时刻的位置可以表示为:

x ( t ) = v t x(t)=vt x(t)=vt

由于车辆的行驶速度可能会受到交通信号灯的影响,因此在t时刻,车辆在某个路口的位置可以表示为:

x ( t ) = v t + s ( t ) x(t)=vt+s(t) x(t)=vt+s(t)

其中, s ( t ) s(t) s(t)为信号灯的状态变化函数。假设我们可以获取某一条车道上n辆车的行车轨迹数据,则可以得到n个方程:

x 1 ( t ) = v 1 t + s ( t ) x_1(t)=v_1t+s(t) x1(t)=v1t+s(t)
x 2 ( t ) = v 2 t + s ( t ) x_2(t)=v_2t+s(t) x2(t)=v2t+s(t)
⋮ \vdots
x n ( t ) = v n t + s ( t ) x_n(t)=v_nt+s(t) xn(t)=vnt+s(t)

将这些方程联立起来,可以得到一个超定方程组:

{ x 1 ( t ) = v 1 t + A sin ⁡ ( 2 π t T + φ ) x 2 ( t ) = v 2 t + A sin ⁡ ( 2 π t T + φ ) ⋮ x n ( t ) = v n t + A sin ⁡ ( 2 π t T + φ ) \begin{cases} x_1(t)=v_1t+A\sin\left(\frac{2\pi t}{T}+\varphi\right)\\ x_2(t)=v_2t+A\sin\left(\frac{2\pi t}{T}+\varphi\right)\\ \vdots\\ x_n(t)=v_nt+A\sin\left(\frac{2\pi t}{T}+\varphi\right) \end{cases} x1(t)=v1t+Asin(T2πt+φ)x2(t)=v2t+Asin(T2πt+φ)xn(t)=vnt+Asin(T2πt+φ)

该方程组可以用最小二乘法来求解,即最小化误差函数:

E ( A , ω , φ ) = ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) ) 2 E(A,\omega,\varphi)=\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi))^2 E(A,ω,φ)=i=1n(xivitAsin(ωt+φ))2

对该误差函数求导,可以得到:

{ ∂ E ∂ A = 2 ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) ) ( − sin ⁡ ( ω t + φ ) ) = 0 ∂ E ∂ ω = 2 ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) ) ( − A cos ⁡ ( ω t + φ ) t ) = 0 ∂ E ∂ φ = 2 ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) ) ( − A cos ⁡ ( ω t + φ ) ) = 0 \begin{cases} \frac{\partial E}{\partial A}=2\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi))(-\sin(\omega t+\varphi))=0\\ \frac{\partial E}{\partial \omega}=2\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi))(-A\cos(\omega t+\varphi)t)=0\\ \frac{\partial E}{\partial \varphi}=2\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi))(-A\cos(\omega t+\varphi))=0 \end{cases} AE=2i=1n(xivitAsin(ωt+φ))(sin(ωt+φ))=0ωE=2i=1n(xivitAsin(ωt+φ))(Acos(ωt+φ)t)=0φE=2i=1n(xivitAsin(ωt+φ))(Acos(ωt+φ))=0

解得:

{ A = ∑ i = 1 n ( x i − v i t ) sin ⁡ ( ω t + φ ) ∑ i = 1 n sin ⁡ 2 ( ω t + φ ) ω = ∑ i = 1 n ( x i − v i t ) cos ⁡ ( ω t + φ ) t ∑ i = 1 n A sin ⁡ ( ω t + φ ) cos ⁡ ( ω t + φ ) t φ = 1 ω arcsin ⁡ ( ∑ i = 1 n ( x i − v i t ) A ) \begin{cases} A=\frac{\sum_{i=1}^n(x_i-v_it)\sin(\omega t+\varphi)}{\sum_{i=1}^n\sin^2(\omega t+\varphi)}\\ \omega=\frac{\sum_{i=1}^n(x_i-v_it)\cos(\omega t+\varphi)t}{\sum_{i=1}^nA\sin(\omega t+\varphi)\cos(\omega t+\varphi)t}\\ \varphi=\frac{1}{\omega}\arcsin\left(\frac{\sum_{i=1}^n(x_i-v_it)}{A}\right) \end{cases} A=i=1nsin2(ωt+φ)i=1n(xivit)sin(ωt+φ)ω=i=1nAsin(ωt+φ)cos(ωt+φ)ti=1n(xivit)cos(ωt+φ)tφ=ω1arcsin(Ai=1n(xivit))

由上述公式可以求得信号灯的周期T。

假设样本车辆的比例为p,车流量为q辆/秒,定位误差为e米。同样地,假设信号灯的状态在t=0时刻变为绿灯,则在t=T/2时刻,信号灯状态会变为红灯。同样地,可以用一个sin函数来表示信号灯的状态变化:

s ( t ) = A sin ⁡ ( ω t + φ ) s(t)=A\sin(\omega t+\varphi) s(t)=Asin(ωt+φ)

其中,A为信号灯状态的幅度, ω \omega ω为信号灯状态变化的频率, φ \varphi φ为信号灯状态变化的相位差。对于一个周期内的信号灯状态变化,可以表示为:

s ( t ) = A sin ⁡ ( 2 π t T + φ ) s(t)=A\sin\left(\frac{2\pi t}{T}+\varphi\right) s(t)=Asin(T2πt+φ)

根据定位误差e的影响,可以得到一个新的方程组:

{ x 1 ( t ) = v 1 t + s ( t ) + e x 2 ( t ) = v 2 t + s ( t ) + e ⋮ x n ( t ) = v n t + s ( t ) + e \begin{cases} x_1(t)=v_1t+s(t)+e\\ x_2(t)=v_2t+s(t)+e\\ \vdots\\ x_n(t)=v_nt+s(t)+e \end{cases} x1(t)=v1t+s(t)+ex2(t)=v2t+s(t)+exn(t)=vnt+s(t)+e

将这些方程联立起来,可以得到一个超定方程组:

{ x 1 ( t ) = v 1 t + A sin ⁡ ( 2 π t T + φ ) + e x 2 ( t ) = v 2 t + A sin ⁡ ( 2 π t T + φ ) + e ⋮ x n ( t ) = v n t + A sin ⁡ ( 2 π t T + φ ) + e \begin{cases} x_1(t)=v_1t+A\sin\left(\frac{2\pi t}{T}+\varphi\right)+e\\ x_2(t)=v_2t+A\sin\left(\frac{2\pi t}{T}+\varphi\right)+e\\ \vdots\\ x_n(t)=v_nt+A\sin\left(\frac{2\pi t}{T}+\varphi\right)+e \end{cases} x1(t)=v1t+Asin(T2πt+φ)+ex2(t)=v2t+Asin(T2πt+φ)+exn(t)=vnt+Asin(T2πt+φ)+e

同样地,该方程组可以用最小二乘法来求解,即最小化误差函数:

E ( A , ω , φ ) = ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) − e ) 2 E(A,\omega,\varphi)=\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi)-e)^2 E(A,ω,φ)=i=1n(xivitAsin(ωt+φ)e)2

对该误差函数求导,可以得到:

{ ∂ E ∂ A = 2 ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) − e ) ( − sin ⁡ ( ω t + φ ) ) = 0 ∂ E ∂ ω = 2 ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) − e ) ( − A cos ⁡ ( ω t + φ ) t ) = 0 ∂ E ∂ φ = 2 ∑ i = 1 n ( x i − v i t − A sin ⁡ ( ω t + φ ) − e ) ( − A cos ⁡ ( ω t + φ ) ) = 0 \begin{cases} \frac{\partial E}{\partial A}=2\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi)-e)(-\sin(\omega t+\varphi))=0\\ \frac{\partial E}{\partial \omega}=2\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi)-e)(-A\cos(\omega t+\varphi)t)=0\\ \frac{\partial E}{\partial \varphi}=2\sum_{i=1}^n(x_i-v_it-A\sin(\omega t+\varphi)-e)(-A\cos(\omega t+\varphi))=0 \end{cases} AE=2i=1n(xivitAsin(ωt+φ)e)(sin(ωt+φ))=0ωE=2i=1n(xivitAsin(ωt+φ)e)(Acos(ωt+φ)t)=0φE=2i=1n(xivitAsin(ωt+φ)e)(Acos(ωt+φ))=0

解得:

{ A = ∑ i = 1 n ( x i − v i t − e ) sin ⁡ ( ω t + φ ) ∑ i = 1 n sin ⁡ 2 ( ω t + φ ) ω = ∑ i = 1 n ( x i − v i t − e ) cos ⁡ ( ω t + φ ) t ∑ i = 1 n A sin ⁡ ( ω t + φ ) cos ⁡ ( ω t + φ ) t φ = 1 ω arcsin ⁡ ( ∑ i = 1 n ( x i − v i t − e ) A ) \begin{cases} A=\frac{\sum_{i=1}^n(x_i-v_it-e)\sin(\omega t+\varphi)}{\sum_{i=1}^n\sin^2(\omega t+\varphi)}\\ \omega=\frac{\sum_{i=1}^n(x_i-v_it-e)\cos(\omega t+\varphi)t}{\sum_{i=1}^nA\sin(\omega t+\varphi)\cos(\omega t+\varphi)t}\\ \varphi=\frac{1}{\omega}\arcsin\left(\frac{\sum_{i=1}^n(x_i-v_it-e)}{A}\right) \end{cases} A=i=1nsin2(ωt+φ)i=1n(xivite)sin(ωt+φ)ω=i=1nAsin(ωt+φ)cos(ωt+φ)ti=1n(xivite)cos(ωt+φ)tφ=ω1arcsin(Ai=1n(xivite))

由上述公式可以求得信号灯的周期T。

python示例代码如下:

import numpy as np
from scipy.optimize import least_squares

def vehicle_positions(t, A, T, phi):
    # t: 时间
    # A: 信号灯状态的幅度
    # T: 信号灯周期
    # phi: 相位差
    v = 10  # 假设车辆速度为10米/秒
    s = A * np.sin(2 * np.pi * t / T + phi)
    return v * t + s

# 定义最小二乘法的目标函数
def residuals(params, t, observed_positions):
    A, T, phi = params
    model_positions = vehicle_positions(t, A, T, phi)
    return observed_positions - model_positions

t_data = np.linspace(0, 100, 200)  # 从0到100秒的时间点,共200个
observed_positions = vehicle_positions(t_data, 5, 40, np.pi / 4)  # 模拟观测数据

# 使用least_squares方法来估计信号灯周期
initial_guess = [5, 40, np.pi / 4]  # A, T, phi的初始猜测值
result = least_squares(fun=residuals, x0=initial_guess, args=(t_data, observed_positions))

# 输出结果
A_est, T_est, phi_est = result.x
print(f"Estimated Signal Light Period: {T_est} seconds")

查看完整思路详见:
【腾讯文档】第十六届“华中杯”大学生数学建模挑战赛全题目深度剖析(建模完整过程+详细思路+代码全解析+论文指导)
https://docs.qq.com/doc/DSEpBRVpoVGZsV215文章来源地址https://www.toymoban.com/news/detail-860419.html

到了这里,关于第十六届“华中杯”大学生数学建模挑战赛(B题)深度剖析|建模完整过程+详细思路+代码全解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学建模】历年全国大学生数学建模竞赛题目+定位分析

    数学建模 https://so.csdn.net/so/search?q=%E6%95%B0%E5%AD%A6%E5%BB%BA%E6%A8%A1spm=1001.2101.3001.7020 国赛创办于1992年,每年一届,是首批列入“高校学科竞赛排行榜”的19项竞赛之一。2020年,来自全国及美国、英国、马来西亚的1470所院校/校区、45680队(本科41826队、专科3854队)、13万多人报名参赛

    2024年02月06日
    浏览(83)
  • 2023美国大学生数学建模竞赛资料及思路

    (赛题出来以后第一时间分享) 报名截止日期:美国东部时间2023 年2月16日星期四下午 3:00前。(北京时间2023年2月17日凌晨4点) 比赛开始:美国东部时间 2023 年 2 月 16 日星期四下午 5:00。(北京时间2023年2月17日早上6点) 比赛结束:美国东部时间 2023 年 2 月 20 日星期一晚上

    2024年02月16日
    浏览(46)
  • 数学建模大师手册:全国大学生数学建模竞赛模板(附Word模版)

    摘要应当为读者提供一个快速的文章概览,确保读者在短时间内了解文章的核心内容和重要结论。 方法 :清晰地描述您使用的主要方法或技术。例如,您是否采用了深度学习、遗传算法、有限元分析等。 问题解决 :描述论文解决的主要问题或挑战。例如,“通过采用神经网

    2024年02月09日
    浏览(46)
  • 全国大学生数学建模竞赛【高教杯】- 竞赛题目汇总

    目录 1992 年赛题 A 题 施肥效果分析 B 题 实验数据分解 1993 年赛题

    2024年02月07日
    浏览(48)
  • 理工科大学生必须参加的比赛——数学建模

    数学建模是一种通过数学方法来描述、分析和解决实际问题的过程。在数学建模中,问题通常来自各个领域,如自然科学、社会科学、工程、经济等,而数学建模的目标是使用数学模型来理解和解决这些问题。 具体而言,数学建模包括以下步骤: 问题定义: 确定实际问题的

    2024年01月16日
    浏览(43)
  • 2023 大学生数学建模竞赛-C题-第一问

    题目: 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜品种众多、产地不尽相同,而蔬菜的进货交易

    2024年02月09日
    浏览(47)
  • 2023年“华数杯”国际大学生数学建模竞赛思路

    B题完整思路已出! 所有资料请在群直接拿,谢谢。 https://zhuanlan.zhihu.com/p/603048568 注意:现在给出的是常用数据集,本次比赛的数据还在准备中哦~) 为此,小云也准备好了一些常用的数据集,都放在云里啦,这样可以避免比赛的时候找数据手忙脚乱。(感兴趣的小伙伴可以

    2024年02月12日
    浏览(57)
  • 2023华数杯全国大学生数学建模竞赛思路模型代码

    目录 1.华数杯数学建模大赛简介 2.大赛思路模型代码见文末        比赛时间:2023.8.3———2023.8.6         比赛性质: 国家级,暑假期间含金量和比赛规模都不错的数学建模比赛,目前举办到第四届,规模一年比一年大,参与人数越来越多,认可度越来越高,赛题类型和赛

    2024年02月14日
    浏览(57)
  • 2022全国大学生数学建模A题的思路与解法

    首先,我们队在历经了千辛万苦之后,光荣得获得了  省三...... 队伍构成 物理*2 + 计算机*1 队伍分工  计算机--受力分析  物理--数值计算 总评:图一乐,狠乐!物理系,计算机系嘛,不怎么看建模的啦! 如果只是考虑力学问题的话,我们分析得肯定还不太到位,但是这个题

    2024年02月06日
    浏览(49)
  • 2023高教社杯全国大学生数学建模竞赛选题建议

    如下为C君的2023高教社杯全国大学生数学建模竞赛(国赛)选题建议, 提示:DS C君认为的难度:CBA,开放度:BAC   。 D、E题推荐选E题,后续会直接更新E论文和思路,不在这里进行选题分析,以下为A、B、C题选题建议及初步分析 A题:定日镜场的优化设计 A题是数模类赛事很

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包