旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用”

实验待证

配合仿真与实验探针的假设探索,等待更多证据或边界检验。

ℹ数字花园

🌿 什么是数字花园与思想演进?

遵循 Maggie Appleton 与 Andy Matuschak 的常青笔记理念:这里不是按时间沉底的流水账,而是持续修剪打磨的知识生态。文章按成熟度经历:

  • 🌱 萌芽 (Seedling): 发散灵感、读书摘录、开放猜想
  • 🌿 演进 (Budding): 结构渐明、初步代码推导、积极修正
  • 🌳 常青 (Evergreen): 逻辑闭环、持久经得起检验的基石
  • 🔬 实验待证 (Speculative): 结合沙盒与仿真探针的理论探索
浏览全站数字花园与笔记全景 →

项目代码与全部实验记录:https://github.com/meiluosi/fly-connectome-study(目录 fly-tsp/)

旅行商是项目里最长的一条线,共三轮,每一轮独立审查之后结论都被收窄一次。这一篇按时间讲。

1. 动机:为什么选旅行商问题#

觅食里有太多手写的部分:气味场、奖励时间表、转向规则、蚁群行为,很难说一个结论来自回路还是来自世界。

旅行商问题(TSP)有客观的分数:给定一批城市,走一圈经过每个城市,路线越短越好,也有成熟的强基线。

定位:不是要证明“果蝇算法比 DeepACO 更好”。DeepACO 这类方法已有“先学跨实例的神经启发式,再在实例内学信息素”的框架,都是为任务训练的神经网络。这里只在同一个框架里问一个更窄的问题:把“特征映射”换成蘑菇体回路,是否比随机稀疏特征、打乱的连线、线性学习器更好?

2. 背景:蚁群算法的一分钟版本#

蚁群与学到的边价值
蚁群与学到的边价值

蚁群算法让很多只“蚂蚁”各自走一圈,在每个城市根据一个权重选下一站:

  • τ(信息素):这次搜索里别的蚂蚁留下的痕迹,好路线上的边痕迹更浓。它是在一次搜索内部学的,每条边一个数。
  • η(距离的倒数):越近越想去,这是固定的先验。
  • v(学到的边价值):新加的一项,由跨实例训练的蘑菇体给出。v=0 就是普通蚁群。

边的“气味”是手写的:这条边的终点是起点的第几近邻、距离分档、是否互为近邻、起点在终点的近邻排名、两端城市离质心的距离。每条边激活 6 个小球(一共用了 52 个)。学习器只换最后一项 v 的来源,其余全部不动。

3. 第一轮:预训练的边价值#

做法#

在 100 个训练实例上,让蚂蚁先不带信息素地走,用路线的“优势”(比同批平均好多少)当作多巴胺信号,更新蘑菇体。训练完冻结,到没见过的实例上,用冻结的 v 加实例内的信息素去搜索。

踩的第一个坑#

直接沿用觅食里的学习率(0.4),所有蘑菇体变体的价值都饱和在接近 +0.95,边与边没有区分度,零样本路线反而更长;降到 0.05 才开始有区分。学习率和增益要对每种学习器、每个任务在独立调参集上各自调。

结果#

(100 个测试实例,路线比参考解长多少 %):

设定蚁群MB-真实MB-打乱MB-随机稀疏线性
R1 均匀 50 城2.902.692.702.682.93
R2 均匀 100 城3.713.393.373.513.36
R3 聚类 50 城4.014.144.344.014.05

真实对打乱、对随机稀疏、对线性,三个设定下全部等价。真实对蚁群:R1 差 −0.21,区间 [−0.59, +0.14];R2 差 −0.33,区间 [−0.72, +0.05]。

审查之后:被降级的说法#

  • 原先的结论“没有任何特征映射超过普通蚁群 0.5 个百分点”说过头了:两个区间的下界到了 −0.59、−0.72,没有排除更大的改进,准确的说法是“不确定”。
  • 调参集上的 R2 优势(蚁群 4.84,真实学习器 2.68)到测试集基本消失:从 12 个配置里挑最好的,会高估效果(赢家诅咒)。
  • 特征到小球的分配是任意的,而真实小球的扇出差别极大,落在枢纽还是冷门小球带有随机性,检验本来就难以探测连线特异性。

4. 第二轮:改四处结构,提高检验力#

做法#

第一轮“不确定”的原因之一是实例太少:配对差的标准差为 1.4 到 1.8 个百分点,100 个实例勉强只够分辨 0.5。第二轮把测试实例加到每个设定 300 个,蚁群也跑 3 个搜索种子,并改了四处结构:

  1. 在线学习。 不再预训练,让蘑菇体在一次搜索内学,当作“能泛化的信息素”:信息素是每条边一个数,蘑菇体则让相似的边共享价值。
  2. 异质群体。 4 只“果蝇”,每只用一个不同的回路,每只蚂蚁用自己的回路。个体差异用随机缺失 30% 的 KC 模拟,不是真实的个体差异(没有对齐好的 FlyWire 矩阵)。
  3. 通信结构。 所有回路共享学习信号(广播)对比各自私有;4 个子蚁群各自为战,对比定期交换精英路线。
  4. 局部搜索。 对每条路线做 2-opt。这是业界惯例,不加就没法和别人对话。

调参:蚁群 27 个配置,在线学习器各 9 个;最优都落在网格边上,于是扩大网格再调一次。蚁群在 R1、R2 上落在 ρ=0.9(R3 是 0.5),即信息素几乎只记得上一轮最优。

第二轮结果
第二轮结果

结果#

在 300 个新实例上,所有主结论对比都在 ±0.5 个百分点内:

  • 在线学习(真实)对蚁群:R1 −0.05,R2 −0.04,R4(带 2-opt)−0.01,全部等价。R3 聚类上是 −0.26,区间 [−0.44, −0.07]。
  • 异质对同质:差 0.00 到 +0.07,等价。
  • 真实对随机稀疏、打乱、线性:差都不超过 0.15。
  • 去掉信息素,路线差 5 到 10 个百分点:信息素是实例内最重要的记忆,在线学到的边价值取代不了它。
  • 4 个子蚁群不交换,比单个蚁群差 0.6 到 1.7 个百分点;每 5 轮交换一次最优路线可以补回一部分:在 R1、R2 上仍不比整体蚁群好(R2 差 0.61),聚类的 R3 上略好(−0.33,仍在界限内)。

聚类上的小增益#

在线学习比蚁群好约 0.3 个百分点,而且换了一批新实例之后又出现了一次(v3 的新实例上是 −0.28、−0.35)。但随机稀疏连线一样好,所以这是一个和连线真假无关的小增益,低于 0.5 的预设界限,只能说“稳定但很小”。

R4 的小插曲#

2-opt 设定最初是 n=50、100 次构造,所有臂都低于参考解(−0.17%),没有区分度。改为 n=100、30 次构造,等价边界收窄到 0.25;改动发生在看到调参结果之后、运行测试之前,已记入偏离日志。

审查指出的问题#

  • 边的特征与距离几乎重复,学到的价值与距离倒数的对数相关 0.85,标准差只有 0.077:各回路都只是“距离加一点平滑偏置”,彼此等价是设计的必然结果。
  • 每个实例约 530 个不同的边签名,只有 25 轮学习,学习预算太小。
  • “等价”会藏住小的显著效应:R3 的 −0.26 区间不含 0,岛屿不交换的差距也明显,应写成“低于界限的小效应”。
  • 分析脚本在登记之后被改过一次(只改了标题),哈希对不上。

对第二轮的最终说法:没有超过边界的改进;真实连线没有优势,但这个设计本来就测不出连线效应。

5. 第三轮:加入状态依赖的转角信息#

做法#

审查的建议:与其再加算法,不如换特征。选用状态依赖的信息:转弯角度。知道上一站在哪,就知道这一步是否急转弯;距离和信息素都只看单条边,给不出这个信息。

转移的签名里加一个转角分箱(直行、小转、直角、折返等 7 档加“无上一站”),占用 8 个新的小球。另配一个手写对照:固定的转角惩罚 exp(−γ·(1−cos 转角)),不学习,用来回答“转角上下文本身有没有用”。

结果#

(300 个全新的测试实例):学习器对蚁群,R1 −0.01,R2 +0.03,R3 −0.18,全部等价;手写转角惩罚在 R2 上反而更差 0.32。

审查指出的问题(最关键的一条)#

审查看了学习器的内部:在同一个静态签名里,把学到的价值按转角分箱看残差。真实连线只有 ±0.01 到 0.02,没有单调趋势;随机连线 ±0.04,符号不一致;线性学习器 ±0.1 到 0.26,但跨实例符号不一致,是噪声。

学习器没有把转角信息学出来。 转角只是 6 个输入小球里的 1 个,5% 的 KC 编码在不同转角档之间几乎一样,加上只有 25 到 50 步学习、约 4000 个不同签名,信号被淹没。所以“真实 ≈ 随机”在这里是设计的必然,不能当作连线无关的证据。

手写惩罚也只检验了“偏好直行”这一个单参数、单方向的假设,只能写“偏好直行的惩罚在这些预算下没有帮助”,不能写“转角上下文没用”。

6. 总览:三轮放在一起#

三轮的主要对比
三轮的主要对比

几乎所有区间都跨过 0,并落在灰色的等价区里。三轮的结论:在这个蚁群框架里,学习器的收益不超过 0.5 个百分点,真实连线与打乱、随机、线性学习器等价。

7. 结论的措辞:为什么是“没有证据”#

“没有用”要求实验在“有用”时确实看得出来,而这里不满足:

  • 特征与距离重复,学习器没有多少新信息可学;
  • 转角信息没有被表达出来;
  • 学习预算很小;
  • 调参噪声(约 0.4 个百分点)与要测的效应同量级;
  • 没有阳性对照:没有在任务里植入已知的规律来证明这套设置能检出它。

因此只能写:在这几种设定下没有测出真实连线的优势,且设计本身可能测不出。要得到结论,需要先做阳性对照:植入已知依赖“气味组合”的结构,确认回路学习器能检出,再比较连线真假。

8. 下一篇#

第 7 篇:阳性对照与自然气味。


文件位置:fly-tsp/(v1)、fly-tsp/v2/、fly-tsp/v3/,每个目录里有 PREREG_*.md、RESULTS_*.md、NOTES_*.md、verification/。图由 blog/figures/make_figures.py 生成。

文章概念网络

从章节进入正文概念。实线表示所属层级,虚线连接跨章节重复出现的概念,不代表因果关系。

40 / 54 个节点 · 正文标记术语与关键词概念

旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用”同一概念 / Shared concept同一概念 / Shared concept旅行商三轮:为什么我最后写的是“没有证据”,而不是“…旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用”fly-tsp/fly-tsp/1. 动机:为什么选旅行商问题1. 动机:为什么选旅行商问题不是要证明“果蝇算法比 DeepACO 更好”不是要证明“果蝇算法比 DeepACO 更好”2. 背景:蚁群算法的一分钟版本2. 背景:蚁群算法的一分钟版本蚁群与学到的边价值蚁群与学到的边价值τ(信息素)τ(信息素)η(距离的倒数)η(距离的倒数)v(学到的边价值)v(学到的边价值)3. 第一轮:预训练的边价值3. 第一轮:预训练的边价值做法做法踩的第一个坑踩的第一个坑结果结果审查之后:被降级的说法审查之后:被降级的说法4. 第二轮:改四处结构,提高检验力4. 第二轮:改四处结构,提高检验力做法做法结果结果聚类上的小增益聚类上的小增益R4 的小插曲R4 的小插曲审查指出的问题审查指出的问题5. 第三轮:加入状态依赖的转角信息5. 第三轮:加入状态依赖的转角信息做法做法结果结果审查指出的问题(最关键的一条)审查指出的问题(最关键的一条)6. 总览:三轮放在一起6. 总览:三轮放在一起三轮的主要对比三轮的主要对比7. 结论的措辞:为什么是“没有证据”7. 结论的措辞:为什么是“没有证据”没有阳性对照没有阳性对照8. 下一篇8. 下一篇fly-tsp/fly-tsp/fly-tsp/v2/fly-tsp/v2/fly-tsp/v3/fly-tsp/v3/PREREG.mdPREREG.mdRESULTS.mdRESULTS.mdNOTES.mdNOTES.mdverification/verification/blog/figures/makefigures.pyblog/figures/makefigures.py实验实验奖励奖励实验实验
旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用”

旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用”

回到原文 ↗
BIBTEX

引用本文

@article{2026-10-21-fly-connectome-06-tsp-three-rounds,
  author  = {枫语},
  title   = {旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用”},
  journal = {枫语},
  year    = {2026},
  month   = {oct},
  url     = {https://meiluosi.github.io/posts/2026-10-21-fly-connectome-06-tsp-three-rounds/}
}
🌐

本篇知识星丛与滑动侧栈

旅行商三轮:为什么我最后写的是“没有证据”,而不是“没有用” 当前主轴

搜索

正在载入索引…