非常好,我们来系统地解释 μ(t) 和 σ(t) 的来源,给出:

  1. 数学定义与推导公式

  2. 代码实现对应每一步公式


🧠 1. 数学定义

你给的数据是:在每个时间段内有多少人“进入”(Enter Count),每个时间段的“持续时间”(Duration)也给定了。


✅ 平均到达间隔时间 μ(t)

定义:在一个时间段内的平均到达间隔时间(mean interarrival time)是:

μi=DurationiEnter Counti\mu_i = \frac{\text{Duration}_i}{\text{Enter Count}_i}

含义:这表示在该时间段内,每个顾客平均间隔多久到达一次。


✅ 标准差 σ(t)

你若无详细原始顾客数据,标准差无法直接从数据计算,所以我们采用如下假设:

由于你没有提供每个顾客的实际到达时间,而是聚合统计数据,我们用经验方法:

σi=α⋅μi\sigma_i = \alpha \cdot \mu_i

其中 是一个经验参数,默认我们设定为 0.5(可调整为你对数据波动的预估比例)。


🔁 所以最终你有:

\mu(t_i) = \frac{d_i}{e_i}, \quad \sigma(t_i) = 0.5 \cdot \mu(t_i)

其中:

  • 是第 个时间段的持续时间(分钟);

  • 是第 个时间段的进入人数;

  • 是该时间段的中心时刻。


🧪 2. 对应 Python 代码

# 假设 df 已经含有 "Duration (min)" 和 "Enter Count"
 
# 平均间隔时间 μ(t_i)
df["mu"] = df["Duration (min)"] / df["Enter Count"]
 
# 标准差 σ(t_i) 设置为 μ(t_i) 的 50%
df["sigma"] = df["mu"] * 0.5
 
# 该时间段的中心时间,用于拟合 μ(t) 和 σ(t) 的连续变化
df["center_t"] = df["Start Minute"] + df["Duration (min)"] / 2

这三行代码完全对应上述三个数学公式。


✅ 接下来怎么做?

你可以:

  1. center_t, mu, sigma 拟合出 μ(t)、σ(t) 的平滑函数(用 spline 拟合);

  2. 在任意时间 使用该函数得到:

    • 当前的顾客到达间隔均值;

    • 构造一个正态分布 表示 G(t)。


如果你想基于这套 G(t)/M/c 做完整的排队仿真系统(比如求每分钟队列长度、等待时间等),我可以直接写出完整的模拟逻辑。是否需要?

非常专业的问题,这里我会从数学原理和代码实现两方面解释我们所使用的**“拟合平滑函数”方法**,重点讲我们使用的 UnivariateSpline 是如何工作的。


🧠 数学原理:样条拟合(Spline Fitting)

我们的目标是:
根据一系列离散数据点 ,构建一个平滑的函数 ,使其:

  • 尽量拟合原始数据点;

  • 同时函数本身要足够平滑,不出现震荡或折线。

✅ 所以,我们的问题是:

给定 个点 ,构造一个函数 ,使得:

∑i=1n(yi−f(ti))2+λ∫(f′′(t))2dt最小\sum_{i=1}^{n} \left(y_i - f(t_i)\right)^2 + \lambda \int \left(f”(t)\right)^2 dt \quad \text{最小}


📌 解释一下这个目标函数:

  • 第一项 :是对拟合误差的惩罚,逼近原始数据;

  • 第二项 :是对函数“弯曲度”的惩罚,确保函数是“平滑的”;

  • 是平滑因子(也叫惩罚系数),越大越平滑(不拟合噪声)越小越精确拟合数据(可能更波动)

这就叫做 平滑样条拟合(smoothing spline fitting)


🛠 Python 中如何实现:scipy.interpolate.UnivariateSpline

我们使用的是:

from scipy.interpolate import UnivariateSpline
 
spline = UnivariateSpline(t, y, s=平滑参数)

对应上面数学公式中:

  • t:

  • y:

  • s: smoothing factor,对应上文中的

    • s:更精确拟合数据,波动大;

    • s:更平滑,拟合度下降;

    • s=0:变成插值函数,严格穿过所有点(不推荐用于真实数据)。


✅ 我们这次代码里是这样用的:

mu_spline = UnivariateSpline(df["center_t"], df["mu"], s=0.1)
sigma_spline = UnivariateSpline(df["center_t"], df["sigma"], s=0.1)

这构造了两个函数:

  • :给任意时间点返回拟合出的 interarrival time;

  • :给任意时间点返回该时间段的间隔波动;

你可以在之后随时使用:

mu_spline(37.8)   # 返回 t=37.8 分钟时的 μ
sigma_spline(37.8)  # 返回 σ

🎓 总结:

项目内容
目标从离散时间数据中恢复连续函数 μ(t), σ(t)
方法平滑样条函数(Smoothing Spline)
数学公式 最小化
控制参数平滑因子 s(越小拟合越紧,越大越平滑)
工具scipy.interpolate.UnivariateSpline

如果你想试试其他方法(如多项式回归、Gaussian Process Regression、局部加权回归 LOESS),也可以告诉我,我能详细帮你解释每种方法的优劣。是否继续?