2005:我在硅谷种AI-第5集:图书馆座位博弈论
摘要: 《第5集:图书馆座位博弈论》讲述了科学家陆眠利用AI模型解决斯坦福图书馆期末抢座难题的故事。通过收集区域占用率、天气、考试周等数据,他构建多元线性回归模型预测座位空闲概率(R²=0.68),并用Matlab生成动态热力图辅助学生规划学习时间。残差分析揭示了模型在极端情况下的偏差,最终方案不仅减少座位纠纷,还意外缓解了学生焦虑。本集融合算法原理(最小二乘法、残差诊断)与社会影响,展现AI解决
笔言: 推荐AI相关我正在写故事: 我在蒸汽纪元证真理 【AI数学基础】和重生1995:我的数学模型能暴击【数学模型】
故事大纲(25集结构版)
核心设定:
主角陆眠,2025年谷歌Brain部门“反内卷”科学家,在演示极简可解释AI工具时遭遇数据回流异常,穿越回2005年2月的斯坦福AI实验室——面前只有Matlab 7.0、CRT显示器和一部诺基亚手机,但脑中装载着未来二十年简洁优雅的算法智慧。
第5集:图书馆座位博弈论
- 痛点:期末图书馆抢座大战
- 特征:课程表、天气、考试周标记
- 模型:多元线性回归+残差分析
- 可视化创新:用Matlab制作动态热力图,展示“座位空闲概率云”
- 社会影响:学生们开始科学安排学习时间,意外缓解了焦虑情绪
下面是我个定制:
《2005:我在硅谷种AI》两个主题曲(大家评选一下):
种春天A版: 歌曲地址
种春天B版: 歌曲地址

第5集:图书馆座位博弈论
期末的座位战争
斯坦福格林图书馆的拱形大厅里,弥漫着一种特殊的紧张气息——不是源于深奥的哲学辩论或艰难的数学证明,而是源于一种更原始的竞争:座位争夺战。
每年十二月初,随着期末考试的临近,这座拥有两千个座位的图书馆会变成战场。学生们像侦察兵一样在各楼层巡逻,寻找空座位或即将空出的座位。冲突时有发生:
“我离开去洗手间才十分钟!”经济学系的安娜指着她留下的书包和摊开的书,“你凭什么占我的座位?”
“‘离开超过十五分钟视为放弃’——图书馆规则第7条。”计算机系的丹尼尔不为所动,“而且你的笔记本上写的最后时间是……11:20,现在是11:35。”
这样的争执每天上演几十次。图书馆管理员霍华德先生疲惫不堪:“上周五,两个博士生差点为靠窗的座位打起来。那可是博士啊!”
陆眠目睹了这一幕。他本想在图书馆安静地读几篇论文,但花了四十五分钟才在角落里找到一个摇摇晃晃的凳子——真正的座位早已被占领或被“幽灵物品”(一本旧书、一个空咖啡杯)标记了所有权。
“有没有可能,”他问霍华德,“预测哪些座位会在什么时候空出来?这样学生可以科学安排时间,而不是盲目巡逻。”
霍华德苦笑:“我们试过在入口放‘空位计数器’,但学生抱怨不准确——二楼东区可能满员,但三楼西区有空位。而且,空位瞬间就会被占。”
“不是预测现在哪里有空位,”陆眠说,“而是预测未来一小时内,每个区域有多少概率会出现空位。就像天气预报的降水概率。”
“这怎么可能?”
“用数据。”陆眠望向那些埋头苦读的学生,“每一个坐下、起身、离开的行为,背后都有规律。”
数据收集:观察两千个座位的“呼吸”
陆眠获得了图书馆管理系统的有限访问权限——不是实时监控摄像头(隐私限制),而是刷卡进入记录和座位预约系统的匿名日志。
原始数据很粗糙:
- 学生A,卡号XXXX,进入时间9:07,离开时间14:32
- 座位预约:区域3B-12,学生B,10:00-13:00
- 每日总人次:期末周平均每天4800人次
“但我们需要的是区域级别的占用率变化。”陆眠将图书馆划分为16个区域(基于建筑结构和历史数据),每小时统计一次占用率。
他设计了一个简单的数据收集方案:招募十个志愿者,每隔一小时记录一次各区域的空座位数,连续记录两周。
数据集结构:
每行代表一个区域在一个小时段内的状态:
- 区域编号(1-16)
- 日期和时间(如“12月3日 10:00-11:00”)
- 星期几(1=周一,…,7=周日)
- 小时段(8-9, 9-10, …, 21-22)
- 天气代码(1=晴,2=阴,3=雨,4=雪)
- 温度区间(1=<10°C,2=10-20°C,3=>20°C)
- 是否为考试周(0/1)
- 当天是否有大型考试(0/1)
- 前一小时的占用率
- 标签:当前小时段的空闲座位比例(0-1)
最终得到2688条记录(16区域×14天×12小时段)。
多元线性回归:为每个特征分配“发言权”
模型直观比喻
“想象我们要预测一个地区的房价。”陆眠在白板上画图,“影响因素很多:面积、学区、房龄、交通……每个因素都有不同的权重。多元线性回归就是找出每个因素的正确权重。”
模型公式:
空闲比例 = β₀ + β₁×(区域) + β₂×(小时段) + β₃×(星期几) + β₄×(天气) + ... + ε
其中β₀是截距,β₁,β₂,…是特征权重,ε是误差项。
“我们的目标是通过数据‘学习’出这些β值,使得预测值与真实值的差距最小。”
最小二乘法:寻找最佳拟合线
“最小二乘法的思想很简单:找一条直线(在多元中是超平面),使得所有数据点到这条直线的垂直距离的平方和最小。”
陆眠写下目标函数:
最小化 Σ(真实值ᵢ - 预测值ᵢ)²
代码段1:多元线性回归的矩阵解
function [beta, predictions, residuals] = multiple_linear_regression(X, y)
% X: n×m矩阵,n个样本,m个特征(已添加截距列)
% y: n×1向量,标签
% 最小二乘解:β = (XᵀX)⁻¹Xᵀy
beta = (X' * X) \ (X' * y);
% 预测值
predictions = X * beta;
% 残差 = 真实值 - 预测值
residuals = y - predictions;
% 计算R²
SS_total = sum((y - mean(y)).^2);
SS_residual = sum(residuals.^2);
R2 = 1 - SS_residual / SS_total;
fprintf('R² = %.4f\n', R2);
fprintf('均方根误差(RMSE) = %.4f\n', sqrt(mean(residuals.^2)));
end
陆眠将数据预处理后输入模型。特征矩阵X包括:
- 区域(独热编码,16个区域变成15个二值特征)
- 小时段(1-12)
- 星期几(1-7)
- 天气(3个二值特征)
- 温度区间(2个二值特征)
- 考试周(0/1)
- 大型考试(0/1)
- 前一小时占用率
模型运行结果:R² = 0.68,RMSE = 0.12。
“这意味着模型解释了68%的方差,”陆眠解释,“平均预测误差在12个百分点。比如预测某区域空闲率40%,实际可能在28%-52%之间。”
残差分析:聆听模型的“沉默之声”
发现模式:残差不应是随机的吗?
陆眠绘制了残差图——残差(真实值-预测值)与预测值的散点图。
“如果模型完美,残差应该随机分布在零线附近,没有明显模式。”他展示图形,“但我们的图显示:当预测空闲率很低(<20%)或很高(>80%)时,残差倾向于正值和负值。”
代码段2:残差分析与诊断图
function analyze_residuals(predictions, residuals, X)
% 创建4个子图的诊断图
figure('Position', [100, 100, 1200, 800]);
% 子图1:残差 vs 预测值
subplot(2,2,1);
scatter(predictions, residuals, 20, 'filled');
hold on;
plot([min(predictions), max(predictions)], [0, 0], 'r--', 'LineWidth', 2);
xlabel('预测值');
ylabel('残差');
title('残差 vs 预测值');
grid on;
% 子图2:残差的正态概率图
subplot(2,2,2);
probplot(residuals);
title('残差正态性检验');
grid on;
% 子图3:残差 vs 时间序列(按数据顺序)
subplot(2,2,3);
plot(1:length(residuals), residuals, 'b-');
hold on;
plot([1, length(residuals)], [0, 0], 'r--', 'LineWidth', 2);
xlabel('样本序号');
ylabel('残差');
title('残差序列图');
grid on;
% 子图4:残差直方图
subplot(2,2,4);
histogram(residuals, 30, 'Normalization', 'probability');
xlabel('残差');
ylabel('频率');
title('残差分布');
grid on;
% 计算自相关(检测时间依赖性)
[acf, lags] = xcorr(residuals, 20, 'coeff');
figure;
stem(lags(21:end), acf(21:end), 'filled');
xlabel('滞后');
ylabel('自相关系数');
title('残差自相关图');
grid on;
hold on;
plot([-20, 20], [0.1, 0.1], 'r--');
plot([-20, 20], [-0.1, -0.1], 'r--');
end
“残差图告诉我们两件事。”陆眠分析,“第一,模型在极端情况下预测不准——因为人们的行为在座位很满或很空时会有不同:如果座位很满,人们可能更不愿意离开;如果很空,人们可能更随意。”
“第二,残差自相关图显示滞后1和滞后2有显著相关——这意味着当前小时的预测误差会影响下一小时的预测误差。座位占用有惯性。”
特征工程:捕捉时间的秘密
时间序列特征:比时钟更深刻的节奏
艾米莉指着数据说:“我们应该加入更多时间特征。比如‘是否为一天中的第一个学习时段’‘是否为午餐后时段’。”
陆眠同意,并增加了:
- 是否上午时段(8-12)
- 是否下午时段(13-17)
- 是否晚上时段(18-22)
- 距离最近考试结束的小时数(考试结束后,大量学生涌向图书馆)
但最关键的发现来自傅里叶级数转换。
“时间具有周期性,”陆眠解释,“一周七天,一天二十四小时。我们可以用正弦余弦函数捕捉这种周期性。”
代码段3:时间周期性特征
function X_with_time_features = add_time_features(X_raw, hour_of_day, day_of_week)
% hour_of_day: 0-23
% day_of_week: 1-7
% 小时周期性:24小时周期
X_with_time_features = X_raw;
X_with_time_features(:, end+1) = sin(2 * pi * hour_of_day / 24);
X_with_time_features(:, end+1) = cos(2 * pi * hour_of_day / 24);
% 周周期性:7天周期
X_with_time_features(:, end+1) = sin(2 * pi * day_of_week / 7);
X_with_time_features(:, end+1) = cos(2 * pi * day_of_week / 7);
% 交互特征:小时和周日的交互
X_with_time_features(:, end+1) = (hour_of_day / 24) .* (day_of_week / 7);
fprintf('添加了5个时间周期性特征\n');
end
加入这些特征后,R²提升到0.73,RMSE降到0.11。
模型改进:应对“残差的启示”
加权最小二乘法:处理异方差性
残差图显示,当预测空闲率接近0或1时,残差方差较小;在中间值时方差较大。这是异方差性——违反了线性回归的同方差假设。
解决方案:加权最小二乘法(WLS),给不同数据点不同的权重。
代码段4:加权最小二乘回归
function [beta_wls, predictions_wls] = weighted_least_squares(X, y)
% 先用普通最小二乘得到初始预测
beta_ols = (X' * X) \ (X' * y);
predictions_ols = X * beta_ols;
residuals_ols = y - predictions_ols;
% 估计方差函数:残差绝对值与预测值的关系
% 假设方差与预测值的某种函数成正比
abs_residuals = abs(residuals_ols);
% 拟合方差模型(这里用简单的线性关系)
% 注意:实际应用中可能需要更稳健的估计
var_weights = 1 ./ (0.1 + 0.5 * abs(predictions_ols - 0.5)); % 中间值权重小,两端权重大
% 加权最小二乘:β = (XᵀWX)⁻¹XᵀWy
W = diag(var_weights); % 权重矩阵
beta_wls = (X' * W * X) \ (X' * W * y);
predictions_wls = X * beta_wls;
% 计算加权后的R²
w_residuals = y - predictions_wls;
w_SS_residual = sum(var_weights .* w_residuals.^2);
w_SS_total = sum(var_weights .* (y - mean(y)).^2);
w_R2 = 1 - w_SS_residual / w_SS_total;
fprintf('加权R² = %.4f\n', w_R2);
end
自回归误差校正
针对残差的自相关性,陆眠添加了滞后特征:前一小时的残差作为新特征加入模型。
“这相当于让模型‘记住’前一小时的预测误差,并在下一小时调整。”
改进后,R²达到0.76,RMSE=0.10。
可视化创新:概率云图与动态热力图
从数字到直觉:概率云图
预测值是一堆数字,但学生需要直观指导。陆眠开发了“概率云图”系统:
- 图书馆平面图划分为16个彩色区域
- 每个区域根据预测空闲率着色:深红(<20%)→ 橙 → 黄 → 浅绿 → 深绿(>80%)
- 每个区域显示预测空闲率和“置信区间”(基于模型标准误差)
代码段5:生成图书馆热力图
function generate_library_heatmap(predictions, confidence_intervals, time_label)
% predictions: 16×1向量,每个区域的预测空闲率
% confidence_intervals: 16×2矩阵,每个区域的置信区间上下界
% time_label: 时间标签,如"12月5日 14:00-15:00"
% 加载图书馆平面图背景
library_map = imread('library_floorplan.jpg');
figure('Position', [50, 50, 1400, 800]);
imshow(library_map);
hold on;
% 定义16个区域的位置(矩形坐标)
region_positions = load('region_positions.mat'); % 预定义
% 颜色映射:红-黄-绿
colormap_custom = [linspace(1,0,100)' linspace(0,1,100)' zeros(100,1); % 红到黄
linspace(0,0,100)' linspace(1,0,100)' zeros(100,1)]; % 黄到绿
for i = 1:16
pred = predictions(i);
ci_low = confidence_intervals(i, 1);
ci_high = confidence_intervals(i, 2);
% 将预测值映射到颜色索引
color_idx = round(pred * 199) + 1; % 1-200
region_color = colormap_custom(color_idx, :);
% 绘制区域矩形
pos = region_positions(i, :); % [x, y, width, height]
rectangle('Position', pos, 'FaceColor', region_color, 'EdgeColor', 'k', 'LineWidth', 2, 'FaceAlpha', 0.6);
% 添加文本:预测值和置信区间
text_str = sprintf('区域%d\n%.1f%%\n(%.1f-%.1f)', i, pred*100, ci_low*100, ci_high*100);
text(pos(1)+pos(3)/2, pos(2)+pos(4)/2, text_str, ...
'HorizontalAlignment', 'center', 'VerticalAlignment', 'middle', ...
'FontSize', 9, 'FontWeight', 'bold', 'Color', 'k');
end
% 添加颜色条
colorbar('Ticks', 0:0.2:1, 'TickLabels', {'0%', '20%', '40%', '60%', '80%', '100%'});
title(sprintf('图书馆座位空闲概率预测 - %s', time_label), 'FontSize', 16);
% 添加图例说明
annotation('textbox', [0.02, 0.02, 0.3, 0.1], 'String', ...
'深红: 很满 (<20%空闲)\n深绿: 很空 (>80%空闲)\n数字为预测空闲率及95%置信区间', ...
'FontSize', 10, 'BackgroundColor', 'w', 'EdgeColor', 'k');
hold off;
end
动态预测系统
陆眠将模型部署到图书馆入口处的一台老旧电脑上,每15分钟更新一次预测,显示未来三小时的热力图。
“你看,”他指着屏幕,“现在下午2点,区域3、7、12显示深绿——这些区域现在就有空位。但更重要的是,区域8现在是红色,但预测3点会变绿,因为有工程系的大课结束。”
实践效果:从博弈到协作
系统上线第一周,发生了几个有趣的变化:
-
空间再分配:学生不再聚集在“传统好位置”(靠窗、靠近插座),而是分散到预测空闲率高的区域,即使那些区域原来不受欢迎。
-
时间规划:学生开始根据预测安排学习时段。经济系的凯拉说:“我看到区域11在下午4点会变绿,所以我先去健身房,4点再来图书馆——果然有座位。”
-
冲突减少:管理员霍华德先生统计,座位纠纷下降了67%。“因为学生们有了更科学的期望,不再盲目争抢。”
-
意外发现:模型揭示了被忽视的“黄金时段”——周三上午10-11点,图书馆整体空闲率高达45%。“因为很多系在这个时间有必修课。”陆眠分析。
拉吉的挑战与线性回归的哲学
拉吉当然又来探讨理论了。
“线性回归假设特征与目标是线性关系,但现实世界很多关系是非线性的。为什么不用支持向量机回归?或者神经网络?”
陆眠调出特征权重图:“看,区域8的权重是-0.23,区域12的权重是+0.18——这意味着,在其他条件相同的情况下,区域8比区域12更拥挤。霍华德先生一看就明白:区域8靠近咖啡机和洗手间,自然更受欢迎。”
“但SVM给不出这样清晰的解释。我需要告诉图书馆管理员:‘这个复杂的核函数把这个区域映射到高维空间,然后……’他能听懂吗?”
拉吉反驳:“但准确率呢?我试了带RBF核的SVR,RMSE=0.087,比你的0.10好。”
“好13%。”陆眠点头,“但代价是:我的模型训练用3秒,预测用0.01秒;你的SVR训练用42秒,预测用0.3秒。我们每15分钟要预测16个区域未来3小时的情况——你的模型需要14.4秒,我的只需要0.96秒。”
“在2005年的电脑上,”陆眠补充,“这13%的准确率提升,可能意味着系统无法实时运行。有时候,实时性比完美性更重要。”
残差的人文洞察
最深刻的洞见来自对残差的进一步分析。
陆眠发现,模型在某些特定时间持续低估空闲率:周五下午、考试结束后的晚上。
“周五下午,学生们更可能离开校园去放松。考试结束后的晚上,大家去庆祝而不是学习。”艾米莉说,“但我们的特征里没有‘社交倾向’。”
“对,”陆眠说,“这就是模型的局限——它只能从我们给的特征中学习。但残差像模型的‘良心不安’,提醒我们遗漏了什么。”
他修改系统,在显示预测时加上一行小字:
提示:本预测基于历史规律。但你是自由的——可以选择成为打破规律的人。
霍华德先生喜欢这句话:“它提醒学生,数据是工具,不是命运。”
结局:不仅仅是座位预测
期末周结束时,图书馆举行了一个简单的感谢仪式。学生们凑钱给陆眠送了一张礼品卡(他转赠给了志愿者团队),但更重要的是,他们分享了自己的故事:
- 患有社交焦虑的米娅说:“以前我最怕在图书馆找座位,怕和人对视。现在我可以提前知道哪里有空位,直接走过去,不用四处张望。”
- 单亲妈妈兼学生萨拉说:“我每天下午4点必须去接女儿。现在我能精准安排时间,4点前完成学习,不再焦虑。”
- 国际学生阿里说:“语言不通时,这个彩色地图是我的救命稻草。我不需要问人,看颜色就行。”
陆眠在最后的总结中说:
“我们做的不是‘图书馆座位预测系统’,而是‘学生焦虑缓解系统’。技术真正的价值,不是展示预测多准确,而是让人的生活多一份确定,少一份焦虑。”
“好的模型像好的图书馆——不是让你感到自己的渺小,而是让你找到自己的位置。”
片尾彩蛋:算法的涟漪
2010年,斯坦福图书馆升级预约系统时,产品经理坚持要保留“概率热力图”功能,尽管工程师认为“直接显示实时空位更准确”。
“但热力图教会学生规划,而不是抢。”产品经理说——她是2005年那个患有社交焦虑的米娅。
2020年,当疫情要求图书馆限制人数时,预约系统基于类似的回归模型预测“安全时段”,减少了人群聚集。
而在陆眠离开斯坦福多年后,霍华德先生一直保留着系统界面上的那句话:
提示:本预测基于历史规律。但你是自由的——可以选择成为打破规律的人。
他说,那是他见过的最好的技术伦理声明。
第5集知识点总结:
-
多元线性回归:
- 用多个自变量预测一个连续因变量
- 最小二乘法:最小化残差平方和
- 矩阵解:β = (XᵀX)⁻¹Xᵀy
-
模型诊断与改进:
- 残差分析:检查线性、同方差、正态性、独立性假设
- 异方差性:残差方差随预测值变化 → 加权最小二乘法
- 自相关:残差存在时间依赖性 → 加入滞后特征
-
特征工程:
- 独热编码处理分类变量
- 傅里叶变换捕捉时间周期性
- 交互特征、滞后特征
-
模型评估:
- R²:解释的方差比例
- RMSE:均方根误差,衡量预测准确性
- 置信区间:表达预测的不确定性
-
实践智慧:
- 实时性有时比完美性更重要
- 可解释性促进用户信任
- 技术的终极目标是服务人,而不仅仅是优化指标
下一集预告:
数学系百年手写考试卷急需数字化,但OCR技术还停留在初级阶段。陆眠说:“如果5层神经网络能解决,为什么要等8层的AlexNet?”——第6集:手写数字的5层尊严,将深入神经网络的前向传播、反向传播、梯度消失问题,以及在算力限制下的创新。

版权声明
2005:我在硅谷种AI和主题曲和片尾曲以及相关封面图片等 ©[李林][2025]。本作品采用 知识共享 署名-非商业性使用 4.0 国际许可协议 进行授权。
这意味着您可以:
- 在注明原作者并附上原文链接的前提下,免费分享、复制本文档与设计。
- 在个人学习、研究或非营利项目中基于此进行再创作。
这意味着您不可以:
- 将本作品或衍生作品用于任何商业目的,包括企业培训、商业产品开发、宣传性质等。
如需商业用途或宣传性质授权,请务必事先联系作者。
作者联系方式:[1357759132@qq.com]
更多推荐


所有评论(0)