别再死记硬背了!用几何动画和Python代码,5分钟搞懂Jain‘s Fairness Index
用几何动画和Python代码5分钟理解Jain公平指数想象一下你正在管理一个网络服务器突然发现某些用户的下载速度明显快于其他用户。这种不公平的资源分配不仅影响用户体验还可能导致网络拥塞。如何量化这种不公平程度这就是Jain公平指数要解决的问题。1. 从二维几何看公平性本质让我们从一个简单的例子开始两条数据流共享带宽资源。假设总带宽为1两条流分别获得x₁和x₂的带宽满足x₁ x₂ 1。在二维坐标系中我们可以绘制出所有可能的分配方案import numpy as np import matplotlib.pyplot as plt x np.linspace(0, 1, 100) y 1 - x plt.plot(x, y) plt.xlabel(x₁) plt.ylabel(x₂) plt.title(带宽分配可能性) plt.grid(True) plt.show()这段代码会生成一条从(0,1)到(1,0)的直线代表所有可能的分配方案。最公平的点在哪里显然是中点(0.5, 0.5)。Jain指数的二维形式为F (x₁ x₂)² / (2*(x₁² x₂²))当x₁ x₂ 0.5时F (0.5 0.5)² / (2*(0.25 0.25)) 1当分配完全不公时如x₁1, x₂0F (1 0)² / (2*(1 0)) 0.52. 三维空间中的公平性可视化扩展到三条流时我们进入三维空间。资源分配点位于平面x₁ x₂ x₃ 1上。最公平的点是(1/3, 1/3, 1/3)。我们可以用Python创建这个三维可视化from mpl_toolkits.mplot3d import Axes3D fig plt.figure() ax fig.add_subplot(111, projection3d) x np.linspace(0, 1, 100) y np.linspace(0, 1, 100) X, Y np.meshgrid(x, y) Z 1 - X - Y ax.plot_surface(X, Y, Z, alpha0.5) ax.scatter([1/3], [1/3], [1/3], colorred, s100) ax.set_xlabel(x₁) ax.set_ylabel(x₂) ax.set_zlabel(x₃) plt.title(三维资源分配平面) plt.show()红点代表最公平的分配。距离这个点越远公平性越差。Jain指数在三维情况下变为F (x₁ x₂ x₃)² / (3*(x₁² x₂² x₃²))3. 高维空间与向量夹角解释对于n条流的情况虽然无法可视化但数学原理相同。Jain指数可以解释为两个向量夹角的余弦平方资源分配向量x (x₁, x₂, ..., xₙ)全1向量1 (1, 1, ..., 1)Jain指数实际上是F cos²θ (x·1)² / (|x|² * |1|²)这个几何解释揭示了公平性的本质资源分配向量与公平方向的偏离程度。我们可以用NumPy计算任意维度的Jain指数def jain_index(allocations): sum_x np.sum(allocations) sum_x_squared np.sum(np.square(allocations)) n len(allocations) return (sum_x ** 2) / (n * sum_x_squared) # 示例4条流的分配 print(jain_index([0.6, 0.2, 0.1, 0.1])) # 输出约0.5954. 动态可视化与TCP拥塞控制让我们创建一个动画展示TCP拥塞控制中带宽分配的动态变化from matplotlib.animation import FuncAnimation fig, ax plt.subplots() ax.set_xlim(0, 1) ax.set_ylim(0, 1) line, ax.plot([], [], b-) def init(): line.set_data([], []) return line, def update(frame): # 模拟TCP流动态变化 x1 0.3 0.2 * np.sin(frame/10) x2 1 - x1 line.set_data([0, x1, 1], [1, x2, 0]) # 计算并显示当前Jain指数 j jain_index([x1, x2]) ax.set_title(f动态分配 Jain指数{j:.3f}) return line, ani FuncAnimation(fig, update, frames100, init_funcinit, blitTrue) plt.show()这个动画展示了两个TCP流竞争带宽时公平性如何随时间变化。在实际网络中良好的拥塞控制算法会使系统趋向公平分配。