--- title: "大规模多智能体网络流量模型" subtitle: "验证与评估实验计划(待执行)" author: "参赛团队:待填写" date: "2026年8月" toc: true toc-title: "目录" number-sections: true --- # 本次修订说明 **修订日期:2026年8月13日** 本版本在实验总体框架中加入了可立即执行的模拟实验方案,主要改动如下: - 在“验证总体框架”后新增 **1.3 模拟实验设计流程**; - 将模拟过程拆分为场景定义、LLM 行为画像生成、画像校验、结构化日志生成、训练/验证/测试隔离、参数估计、快速实验和结果输出八个环节; - 设置简单问答、工具研究和多 Agent 协作分析三类初始任务场景; - 规定 LLM 输出固定 JSON 画像,并在缺少 API Key 或请求失败时使用版本化本地画像回退; - 明确训练集用于估计参数、验证集用于选择分布和调整参数、测试集只用于最终评估,避免任务级数据泄漏; - 增加预测验证、模型基线、到达率压力和超时重试四类快速实验的输入输出说明; - 规定保存原始事件 CSV、行为画像 JSON、估计参数 JSON、实验结果 CSV、图表、配置文件和随机种子; - 强调最终报告必须把模拟结果标注为“模拟数据”,获得真实日志后使用同一实验管线重新验证。 配套实验工程位于 `agent_traffic_experiments/`,当前已经能够自动生成数据并输出预测对比图、压力曲线和重试流量放大热力图。 # 文档说明 本文是验证与评估报告的前置计划,不包含尚未实际获得的准确率、性能或显著性结论。实验执行后,应将本计划中的“预期图表、数据表和验收标准”替换或补充为真实结果,并保留失败实验和误差解释。 实验目标是回答四个问题: 1. 仿真程序是否正确实现了数学模型? 2. 模型能否预测真实或半真实 Agent 网络的流量与延迟? 3. 双层状态机、队列、拓扑和重试模块是否确有必要? 4. 模型能否在更大规模网络中保持可接受的运行开销与稳定性? # 1 验证总体框架 ## 1.1 验证层次 | 层次 | 核心问题 | 主要方法 | 输出 | |---|---|---|---| | V1 实现正确性 | 事件、消息和流量是否算对 | 手工算例、单元测试、守恒检查 | 对账表 | | V2 参数可信度 | 参数是否由日志稳定估计 | 分布拟合、Bootstrap、训练/验证/测试划分 | 参数表与区间 | | V3 预测准确性 | 能否预测测试场景 | 实测或重放对比 | 误差指标与拟合图 | | V4 模型有效性 | 完整模型是否优于简化模型 | 基线和消融实验 | 对比表 | | V5 鲁棒与扩展性 | 高负载、故障和大规模下表现如何 | 压力、故障、敏感性和规模实验 | 容量与性能曲线 | ## 1.2 实验原则 - 所有实验配置、随机种子和软件版本可追踪; - 训练数据不得进入测试集; - 每个随机场景至少重复多次,并报告均值和 95% 置信区间; - 真实数据、合成数据和假设参数必须清楚标注; - 不仅报告平均值,还报告 P95、P99 和最差场景; - 不删除对模型不利的异常结果,应分析其原因和适用边界。 ## 1.3 模拟实验设计流程 在真实日志尚不足以覆盖全部任务类型、网络规模和故障条件时,先通过受约束的大模型模拟构建实验数据,快速验证模型与代码闭环。流程如下。 ```text 任务与场景设计 ↓ LLM生成行为画像 ↓ 画像合法性校验与默认参数回退 ↓ 本地随机引擎扩展结构化事件日志 ↓ 按任务划分训练集 / 验证集 / 测试集 ↓ 训练集估计状态机参数 ↓ 验证集选择分布和调整参数 ↓ 测试集聚合为模拟实测值 ↓ 完整模型、无上下文模型、静态均值基线对比 ↓ 压力实验与重试放大实验 ↓ 自动输出数据表、参数文件、指标和图表 ``` ### 1.3.1 第一步:定义模拟场景 首轮至少设置三类具有复杂度梯度的任务: | 任务类型 | 主要特点 | 预期通信行为 | |---|---|---| | 简单问答 | 单节点推理为主 | 消息少、时延短、很少调用工具 | | 工具研究 | 需要搜索或数据查询 | 工具调用率高、响应消息较大 | | 多 Agent 协作分析 | 任务拆分和结果汇总 | 子任务多、路径长、队列和重试影响明显 | 同时定义 Agent 数量、工具数量、并发容量、队列容量、链路带宽和基础时延。 ### 1.3.2 第二步:LLM生成行为画像 大模型不直接输出海量日志,而是为每类任务生成有限的行为参数:工具调用概率、拆分概率、平均子任务数、处理时间、请求/响应大小、超时率和失败率。输出必须采用固定 JSON 字段,并经过范围检查。 若没有 API Key 或模型调用失败,使用版本化的内置画像回退,以保证实验可离线复现;报告中记录本次实际使用的是 LLM 画像还是本地回退画像。 ### 1.3.3 第三步:生成结构化日志 本地程序根据画像运行受约束的随机状态机,为每个任务生成外部到达、Agent 请求、工具请求、工具响应、Agent 返回、超时、重试和最终响应事件。日志必须保留: - 任务 ID、消息 ID、父消息 ID、请求响应关联 ID 和发送尝试 ID; - 任务类型、任务阶段和消息类型; - 来源节点、逻辑目标节点、实际下一跳和状态转移; - 时间戳、状态持续时间和队列长度; - 消息大小、成功状态和重试次数。 ### 1.3.4 第四步:训练与测试隔离 按完整任务划分训练集、验证集与测试集。训练集只用于估计参数;验证集用于选择持续时间和消息大小分布、调整模型参数;测试集不得用于调参,只按任务聚合得到内部字节数、端到端延迟、消息数、工具调用数、重试数和成功率,作为最终模拟实验的对照值。 ### 1.3.5 第五步:快速实验 | 实验 | 自变量 | 主要输出 | |---|---|---| | 预测验证 | 任务类型 | 流量、延迟、消息数预测误差 | | 基线对比 | 模型版本 | MAE、RMSE、MAPE | | 压力实验 | 外部任务到达率 | 吞吐量、P95延迟、峰值队列、丢弃率 | | 重试实验 | 超时概率、重试上限 | 成功率、平均重试数、流量放大系数 | ### 1.3.6 第六步:结果输出与使用边界 程序自动输出原始事件 CSV、行为画像 JSON、估计参数 JSON、实验结果 CSV 和图表。模拟实验主要用于验证模型机制、筛选关键参数和形成比赛报告的初步图表,所有结果必须标注“模拟数据”。获得真实运行日志后,保持相同实验管线,用真实数据重新估参和复验。 # 2 实验环境与复现规范 ## 2.1 待记录环境 | 项目 | 记录内容 | |---|---| | 硬件 | CPU型号、核数、内存、操作系统 | | 软件 | Python及依赖版本、仿真器提交版本 | | 配置 | 拓扑文件、参数文件、任务场景文件 | | 随机性 | 主随机种子、重复实验种子列表 | | 运行 | 开始时间、结束时间、预热期、仿真时长 | | 输出 | 原始事件日志、聚合指标、图表脚本 | ## 2.2 目录建议 ```text experiments/ configs/ # 场景、拓扑和参数 raw_logs/ # 原始Agent或仿真事件日志 processed/ # 清洗后的标准数据 scripts/ # 运行、统计和绘图脚本 results/ # 每次实验的机器可读结果 figures/ # 报告图表 manifests/ # 环境、版本、种子与校验信息 ``` ## 2.3 数据划分 如有真实任务日志,建议按任务而非单条消息划分,避免同一任务的消息同时出现在训练集和测试集。 - 训练集:60%,用于参数估计; - 验证集:20%,用于选择分布和超参数; - 测试集:20%,只用于最终评估。 若数据具有明显时间漂移,应采用前段训练、后段测试的时间切分,并额外报告随机切分结果。 # 3 指标体系 ## 3.1 预测误差 对节点流量、链路流量、吞吐量和平均延迟计算: $$ MAE=\frac{1}{n}\sum_{i=1}^{n}|\hat y_i-y_i| $$ $$ RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(\hat y_i-y_i)^2} $$ $$ MAPE=\frac{100\%}{n}\sum_{i=1}^{n} \left|\frac{\hat y_i-y_i}{y_i+\varepsilon}\right| $$ 对于真实值接近零的对象,MAPE 不稳定,应同时报告 MAE、SMAPE 或加权 MAPE。 ## 3.2 分布与尾部指标 - 平均延迟、中位数、P90、P95、P99; - 队列长度分布及最大值; - 消息大小和状态持续时间分布距离; - 可选使用 KS 统计量或 Wasserstein 距离比较分布。 ## 3.3 热点识别 将利用率或流量处于前 $k\%$ 的节点/链路定义为热点,计算 Precision、Recall、F1 和 Top-K 命中率。 ## 3.4 仿真性能 - 总运行时间; - 峰值内存; - 每秒处理事件数; - 单任务平均事件数; - 节点规模增加时的时间与内存增长率。 ## 3.5 稳定性与可靠性 - 任务成功率和失败率; - 超时率和平均重试次数; - 流量放大系数; - 队列是否在仿真后段持续增长; - 故障恢复时间和受影响任务比例。 # 4 实验E1:三节点手工算例与单元验证 ## 4.1 目的 验证消息生成、状态转换、链路累计、节点收发流量、超时取消和重试计数是否正确。 ## 4.2 场景 ```text 外部 → A → B → C → B → A ``` 消息大小依次为 2、3、1、4、2 KB。关闭随机性并固定所有处理时间。分别运行: 1. 正常工具调用; 2. 不调用工具直接返回; 3. 第一次工具调用超时、第二次成功; 4. 超过最大重试次数并失败; 5. B 节点无处理资源,消息进入队列。 ## 4.3 检查项 - 节点 A/B/C 入站和出站消息数; - A-B、B-C 链路累计字节数; - 消息路径和跳数; - `destination` 与逐跳 `next_hop` 的一致性; - 队列入队、出队和并发资源释放; - 节点资源状态 $q_v$ 与各消息处理上下文状态 $q_m$ 的一致性; - 响应成功后对应超时事件失效; - 任务完成或失败后不存在悬挂请求。 ## 4.4 通过标准 确定性计数应与手工结果完全一致;浮点时间误差应低于预设容差;所有守恒检查通过。 # 5 实验E2:参数估计与分布拟合 ## 5.1 目的 检验从小规模日志估计转移概率、持续时间、消息大小和失败参数的稳定性。 ## 5.2 步骤 1. 清洗并按任务还原调用链; 2. 统计各状态的转移计数和样本量; 3. 对持续时间和消息大小比较经验分布、对数正态、Gamma 等候选; 4. 使用验证集选择分布; 5. 对参数进行 Bootstrap,计算 95% 置信区间; 6. 检查任务类型、阶段和负载分层后的样本稀疏问题; 7. 为低样本组启用平滑或上级参数回退。 ## 5.3 输出表 | 参数 | 分组条件 | 样本量 | 估计值/分布 | 95%区间 | 来源 | 置信度 | |---|---|---:|---|---|---|---| | P(Think→CallTool) | 待填写 | | | | 真实/合成 | | | T_Think | 待填写 | | | | 真实/合成 | | | S_request | 待填写 | | | | 真实/合成 | | | p_timeout | 待填写 | | | | 压测/日志 | | ## 5.4 判定原则 不预设必须选择某种理论分布。若参数分布拟合较差,正式仿真使用经验抽样,并在报告中说明样本覆盖范围。 # 6 实验E3:小规模预测准确性 ## 6.1 目的 使用训练集估计参数,在未参与估参的测试任务上预测流量、延迟和调用次数。 ## 6.2 场景建议 - 节点规模:3、5、10; - 任务类型:至少 2 类; - 任务阶段:简单任务与工具密集任务; - 负载:低、中、高三个档位; - 每个场景包含足够任务,并运行多次随机仿真。 ## 6.3 比较对象 - 各节点消息率和字节率; - 各链路累计流量; - 平均、P95、P99 延迟; - 平均工具调用数、下游消息数和重试数; - 吞吐量、失败率和平均队列长度。 ## 6.4 预期图表 1. 预测值—实测值散点图及 $y=x$ 参考线; 2. 各节点流量误差条形图; 3. 实测与预测延迟累积分布曲线; 4. 不同负载下的 MAPE/MAE 对比; 5. 任务级流量放大系数箱线图。 ## 6.5 初步验收目标 在没有比赛官方阈值时,不应预先承诺固定精度。可使用以下内部目标推动迭代:完整模型在多数主要指标上优于所有基线;测试误差的置信区间稳定;高负载误差上升能够得到合理解释。最终报告填写真实数值。 # 7 实验E4:基线模型对比 ## 7.1 基线定义 | 编号 | 基线 | 描述 | |---|---|---| | B0 | 静态平均倍数 | 外部流量乘以固定放大系数 | | B1 | 纯拓扑随机游走 | 仅按连接和固定路由概率传播 | | B2 | 简单排队模型 | 到达率和服务率驱动,不表达任务状态 | | B3 | 单层状态机 | 节点行为和跨节点传播不分层 | | M | 完整模型 | 双层状态机、分层参数、队列和重试闭环 | ## 7.2 公平性要求 - 各模型使用相同训练任务和测试任务; - 可共享的外部到达率、平均消息大小和节点总处理能力 $\mu$ 保持一致; - 不允许完整模型使用测试集参数; - 同时比较精度和运行开销,避免只比较预测误差。 ## 7.3 结果表模板 | 模型 | 节点流量MAPE | 链路流量MAPE | 平均延迟误差 | P95误差 | 运行时间 | |---|---:|---:|---:|---:|---:| | B0 | | | | | | | B1 | | | | | | | B2 | | | | | | | B3 | | | | | | | M | | | | | | # 8 实验E5:消融实验 ## 8.1 消融项 | 消融版本 | 移除内容 | 要验证的假设 | |---|---|---| | A1 | 移除任务阶段修正 | 阶段信息能提升行为预测 | | A2 | 移除局部拓扑和邻居负载 | 拓扑负载影响目标选择与热点 | | A3 | 使用固定平均处理时间 | 长尾分布影响尾延迟 | | A4 | 移除节点队列 | 队列是高负载延迟的关键来源 | | A5 | 移除失败与重试 | 重试影响流量放大与稳定性 | | A6 | 固定节点类型替代能力向量 | 能力表示改善异构节点泛化 | ## 8.2 分析方式 比较完整模型与各消融版本在低、中、高负载下的误差变化。若某模块对所有场景几乎没有贡献,应检查参数是否未被正确使用,或重新评估模块复杂度是否值得保留。 # 9 实验E6:压力与容量拐点 ## 9.1 自变量 逐步提高外部到达率: $$ \lambda\in\{0.2,0.4,0.6,0.8,1.0,1.2,1.5\}\times C_{baseline} $$ 其中 $C_{baseline}$ 是基准系统的估计处理能力。每个负载档运行足够长的预热期和统计期。 ## 9.2 观测指标 - 吞吐量; - 平均、P95、P99 延迟; - 关键节点队列长度; - 超时率、失败率和重试率; - 节点与链路利用率; - 流量放大系数。 ## 9.3 容量拐点定义 可结合以下现象定义容量拐点:吞吐量不再随到达率线性增长;队列在统计期持续增长;P95 延迟突增;失败率超过业务阈值;重试导致内部流量明显非线性增加。 ## 9.4 预期图表 - 到达率—吞吐量曲线; - 到达率—P95/P99 延迟曲线; - 时间—队列长度曲线; - 到达率—超时率/重试率曲线; - 到达率—流量放大系数曲线。 # 10 实验E7:故障与重试放大 ## 10.1 场景矩阵 | 因素 | 建议水平 | |---|---| | 节点故障比例 | 0%、1%、5%、10% | | 链路带宽下降 | 0%、25%、50%、75% | | 基础超时概率 | 0、0.02、0.05、0.10、0.20 | | 最大重试次数 | 0、1、2、3、5 | | 退避策略 | 无退避、固定退避、指数退避 | | 目标选择 | 固定节点、负载感知、故障感知 | ## 10.2 关键问题 1. 哪种重试上限在成功率和额外流量之间更均衡? 2. 指数退避能否减轻拥塞雪崩? 3. 负载感知或故障感知路由能否缩小影响范围? 4. 哪些热点节点故障会造成最大任务失败率? ## 10.3 结果展示 使用热力图展示“超时概率 × 重试上限”对成功率和流量放大系数的影响;使用拓扑图展示故障前后的热点迁移;使用时间曲线展示拥塞与恢复过程。 # 11 实验E8:拓扑和调度策略对比 ## 11.1 拓扑 - 星型:中心协调节点连接所有执行节点; - 树型:分层协调和任务拆分; - 随机稀疏图:一般协作网络; - 小世界:高聚类、少量远程连接; - 无标度图:少量枢纽节点拥有高连接度。 ## 11.2 策略 - 最短跳数; - 随机可行邻居; - 最短队列; - 能力匹配优先; - 综合能力、距离、负载和可靠性的加权策略。 ## 11.3 指标 比较平均跳数、流量集中度、最大节点利用率、任务延迟、成功率和重路由次数。重点讨论不同拓扑是否会形成单点瓶颈,以及负载感知策略是否以额外跳数换取更低尾延迟。 # 12 实验E9:规模扩展与计算性能 ## 12.1 规模设置 ```text 10、100、1 000、10 000、100 000 个仿真节点 ``` 对每个规模控制平均度数、任务到达率与节点数量的比例,并分别报告低负载和中负载结果。若 100000 节点无法在现有硬件完成,应如实报告达到的最大规模、瓶颈和优化方向。 ## 12.2 测量 - 初始化时间; - 仿真运行时间; - 峰值内存; - 每秒事件数; - 事件总数; - 结果聚合时间; - 不同规模下的预测指标稳定性。 ## 12.3 对比版本 如实现条件允许,对比: 1. 固定时间步与离散事件; 2. 全量节点与同构节点聚合; 3. 不同优先队列实现; 4. 单线程与分区并行版本。 # 13 实验E10:敏感性与不确定性分析 ## 13.1 关键参数 - 工具调用概率; - 下游任务数量; - 消息大小均值与方差; - 节点处理速度; - 链路带宽和时延; - 超时概率与重试上限; - 外部任务突发程度。 ## 13.2 方法 第一阶段使用单因素局部敏感性分析;第二阶段可使用拉丁超立方抽样或 Sobol 方法分析全局敏感性。对高不确定参数从其估计区间中抽样,输出预测指标的置信区间,而不是只给单点预测。 ## 13.3 输出 - 参数敏感性排序; - 龙卷风图; - 参数变化与输出变化曲线; - 预测区间随样本量的变化; - 最需要补采数据的参数列表。 # 14 数据质量与守恒检查 每次实验自动执行以下检查: - 每条消息有且仅有一个 task_id 和 message_id; - 除外部输入、最终输出和丢弃外,发送消息数与接收/在途消息数守恒; - 节点并发数不超过上限,队列长度不为负; - 链路累计字节数等于经过该链路消息大小之和; - 已完成请求不会再次触发有效超时; - 任务完成后未完成子请求数为零或被明确标记为取消; - 聚合指标能够由原始事件日志重新计算。 # 15 报告图表清单 最终《验证与评估报告》至少包含: 1. 实验环境与数据集统计表; 2. 参数估计及置信区间表; 3. 三节点手工对账表; 4. 完整模型与基线的误差对比表; 5. 预测值—实测值散点图; 6. 延迟 CDF 或分位数对比图; 7. 消融实验条形图; 8. 到达率—吞吐量—尾延迟曲线; 9. 超时率—重试次数—流量放大热力图; 10. 拓扑热点图; 11. 节点规模—运行时间/内存曲线; 12. 敏感性排序图; 13. 失败案例及误差来源表。 # 16 执行排期 | 周期 | 任务 | 完成判据 | |---|---|---| | 第1阶段 | 仿真器最小闭环与E1 | 手工算例全部通过 | | 第2阶段 | 日志模式、合成数据与E2 | 参数表可自动生成 | | 第3阶段 | E3基准预测与E4基线 | 获得第一版误差结果 | | 第4阶段 | E5消融与E6压力 | 明确模块贡献和容量拐点 | | 第5阶段 | E7故障、E8拓扑 | 得到重试与路由结论 | | 第6阶段 | E9规模、E10敏感性 | 完成性能和不确定性分析 | | 第7阶段 | 报告整合与复现检查 | 图表可一键复现、结论有数据支撑 | # 17 最终报告写作模板 正式报告建议按以下顺序组织: 1. 验证目标与实验环境; 2. 数据来源、清洗和参数估计; 3. 实现正确性验证; 4. 预测准确性与基线对比; 5. 消融实验; 6. 压力、故障和拓扑实验; 7. 大规模仿真性能; 8. 敏感性和不确定性; 9. 失败案例、模型边界与改进; 10. 结论。 每项结论采用“实验条件—观察数据—结论—适用范围”的格式。例如,不应只写“指数退避更好”,而应写明在哪些负载、超时率和重试次数下改善了哪些指标,以及是否牺牲了任务完成时间。 # 结论 本实验计划通过实现正确性、参数可信度、预测精度、基线对比、消融、压力、故障、拓扑、规模和敏感性十类实验,形成从代码到结论的完整证据链。执行过程中应优先完成三节点对账和小规模预测,再逐步扩展到高负载及大规模场景;所有结果必须保留参数来源、随机种子和复现配置,确保最终参赛报告可信、透明且可重复。