跳到主要内容

基于智能体的建模

一、直观理解:让“异质个体”在环境中互动​

基于智能体的建模(Agent-Based Modeling,ABM)把系统看作许多自主个体(agent) 的集合。每个智能体拥有自己的状态、感知、规则或目标,在环境中移动、交互、学习;宏观现象(隔离、羊群、分层、崩溃)由微观规则涌现出来。

与元胞自动机相比,ABM 中的个体通常可以:

  • 移动(不绑死在固定格点属性上);
  • 拥有异质参数(不同风险偏好、速度、财富);
  • 具备记忆、策略切换甚至简单学习;
  • 与网络邻居而非仅几何邻居交互。

典型故事:市场上的买卖双方按各自预期成交,价格波动来自互动而非外生噪声方程;校园疏散中每个行人避让与跟随,拥堵在瓶颈处自发形成。

二、适用场景与优缺点​

类型说明
适用场景个体异质性关键;局部交互与自适应行为主导;网络结构影响传播;需要机制解释与情景政策实验;聚合方程难以写出。
核心优点表达力强;便于纳入行为规则与制度细节;自然输出空间/网络分布;适合“如果改变规则会怎样”的反事实实验。
局限与缺点参数多、易过拟合;校准与验证困难;计算成本高;结果对实现细节敏感;论文中规则必须写清楚否则不可复现。

使用前应确认:

  1. 是否真的需要个体层机制,而非聚合 SD/ODE 即可;
  2. 智能体类型、状态变量与决策规则能否被简明描述;
  3. 有哪些宏观数据用于校准(增长率、接触分布、价格矩等);
  4. 随机种子、人数、空间尺度的稳健性如何检验。

三、核心原理:环境 + 智能体 + 交互协议​

1. 基本结构​

  • 智能体:状态 si(t)s_i(t),参数 θi\theta_i,决策函数 πi\pi_i;
  • 环境:资源、价格、地理空间、公共信息;
  • 调度:同步更新或随机异步更新;
  • 观测:宏观统计量 Y(t)=A({si(t)})Y(t)=\mathcal{A}(\{s_i(t)\})。

一步典型循环:感知 → 决策 → 行动 → 环境更新 → 记录统计。

2. 与方程模型、CA、DES 的分工​

方法更擅长
ODE/SD聚合反馈与长期趋势
CA齐整格点上的局部空间规则
DES事件驱动的服务/物流流程
ABM异质行为、网络交互、制度规则

3. 校准思想​

常用方式:选择宏观矩(均值、方差、分布分位数),调节规则参数使模拟矩接近数据;或用贝叶斯/ABC 在智能体模型上做推断。绝不能满足于“看起来像”。

四、关键建模决策​

  • 智能体粒度:人、家庭、企业、车辆?
  • 空间/网络:连续平面、格点、小世界/无标度网络?
  • 理性程度:固定启发规则 vs 优化 vs 学习;
  • 随机性来源:初始条件、决策噪声、环境冲击;
  • 终止与实验设计:多次重复、参数扫描、政策开关对照。

规则应尽量少而可解释:每增加一条行为,都要说明经验依据。

五、MATLAB 示例​

示例:Schelling 隔离模型——个体若同类邻居比例过低则搬家,最终形成空间隔离。

%% Schelling 隔离模型(简化 ABM)
rng(8);
n = 40; % 网格
vacancy = 0.2; % 空位比例
tolerance = 0.35; % 同类邻居最低可接受比例
maxSteps = 50;

% 状态: 0 空位, 1 类型A, 2 类型B
cells = ones(n);
cells(rand(n) < 0.5) = 2;
emptyMask = rand(n) < vacancy;
cells(emptyMask) = 0;

similarity = zeros(maxSteps, 1);

for step = 1:maxSteps
% 计算每个占用格的同类邻居比例
unhappy = false(n);
for i = 1:n
for j = 1:n
if cells(i,j) == 0
continue;
end
nb = neighbors8(cells, i, j);
occ = nb(nb > 0);
if isempty(occ)
sim = 1;
else
sim = mean(occ == cells(i,j));
end
if sim < tolerance
unhappy(i,j) = true;
end
end
end

% 宏观隔离度:所有占用者的平均同类比例
sims = [];
for i = 1:n
for j = 1:n
if cells(i,j) == 0, continue; end
nb = neighbors8(cells, i, j);
occ = nb(nb > 0);
if ~isempty(occ)
sims(end+1) = mean(occ == cells(i,j)); %#ok<AGROW>
end
end
end
similarity(step) = mean(sims);

% 不满意者随机搬到空位
[ui, uj] = find(unhappy);
[ei, ej] = find(cells == 0);
if isempty(ui) || isempty(ei)
similarity(step:end) = similarity(step);
break;
end
ord = randperm(numel(ui));
for k = 1:numel(ui)
if isempty(ei), break; end
a = ord(k);
pick = randi(numel(ei));
cells(ei(pick), ej(pick)) = cells(ui(a), uj(a));
cells(ui(a), uj(a)) = 0;
ei(pick) = []; ej(pick) = [];
end
end

figure;
subplot(1,2,1);
imagesc(cells);
colormap([1 1 1; 0.2 0.4 0.9; 0.9 0.3 0.2]);
axis equal tight off;
title(sprintf("最终格局 (tolerance=%.2f)", tolerance));
subplot(1,2,2);
plot(1:maxSteps, similarity, "LineWidth", 1.5);
xlabel("时间步"); ylabel("平均同类邻居比例");
title("隔离度演化"); grid on;

function nb = neighbors8(gridMap, i, j)
n = size(gridMap, 1);
ii = max(1, i-1):min(n, i+1);
jj = max(1, j-1):min(n, j+1);
block = gridMap(ii, jj);
% 去掉中心元胞自身
ci = i - ii(1) + 1;
cj = j - jj(1) + 1;
block(ci, cj) = NaN;
nb = block(~isnan(block));
end

第二个更轻量的示例:二维随机游走智能体的聚集统计。

%% 多个智能体在方盒内随机游走
rng(11);
nAgent = 200;
box = 1;
pos = rand(nAgent, 2) * box;
steps = 100;
stepSize = 0.05;
centerDist = zeros(steps, 1);

for t = 1:steps
pos = pos + stepSize * randn(nAgent, 2);
pos = min(max(pos, 0), box); % 反射边界简化为裁剪
center = mean(pos, 1);
centerDist(t) = mean(sqrt(sum((pos - center).^2, 2)));
end

figure;
plot(centerDist, "LineWidth", 1.5);
xlabel("时间步"); ylabel("到群体中心的平均距离");
title("随机游走智能体的散布程度");
grid on;

六、如何解释结果​

完整报告包括:

  1. 智能体类型、状态、感知范围与决策规则(可用伪代码);
  2. 环境与交互拓扑;
  3. 初始化、人数、时间尺度、随机种子;
  4. 宏观指标定义与基线/政策情景对比;
  5. 多次重复下的均值与变异;
  6. 敏感性:关键参数变化是否改变定性结论;
  7. 局限:未建模的行为、规模外推风险。

好的 ABM 论文让读者能按规则复现涌现机制,而不是只展示最终动画。

七、常见误区​

1. 规则过于复杂导致不可识别​

参数比数据还多时,任何宏观曲线都能被“调出来”,解释力反而下降。

2. 不做重复与稳健性检查​

一次随机运行的图案可能是噪声实现。

3. 用 ABM 替代本可用解析/ODE 解决的问题​

增加机制细节不是加分项,能简单则简单。

4. 校准缺失​

“定性像那么回事”不等于模型正确。

5. 实现细节不写清​

更新次序、边界、冲突解决方式都会改变结果,必须文档化。

八、小结​

基于智能体的建模从异质个体的规则与交互出发,解释宏观涌现,适合行为、网络与空间机制并重的问题。它的优势是表达力,代价是校准与复现的高要求。

在数学建模中使用 ABM 的稳妥策略是:规则尽量少、指标可观测、情景可对照、结果可重复,并在可能时与方程模型或 CA 交叉验证。