科学家已经把果蝇的整个神经系统画了出来:每一个神经元、每一条连接,都存进了一个公开数据库,这种图谱叫连接组。我不是神经科学家,只是个开发者,但我忍不住想:如果从这张图里切一小块下来,让它去下井字棋,会怎么样?

这个念头最后变成了一个项目,叫 FlyCNS-TicTacToe。

打开网易新闻 查看精彩图片

它到底是怎么跑起来的

第一步是挑神经元。我选了那些把指令送出果蝇大脑的神经元,再加上给它们供信号的中央脑神经元。

第二步是用真实的接线。数据里写明了哪个神经元连到哪个、连得有多强、以及它是激活还是抑制下一个神经元。这三样我全用上了。

第三步是把棋盘变成信号。九个格子,每个格子分到一组神经元。你落子,就把这组神经元往一个方向推;对手落子,就往反方向推。

最后是读答案。一个小型模拟让信号沿着这些线路流动,九组输出对应九个格子,活动最强的那一个空格,就是果蝇"最想下"的位置。干活的是 Python,加上 neuprint-python、networkx 和 pandas。

真正在下棋的,是果蝇还是 minimax

答案偏向后者。果蝇这套回路没有前瞻能力,单独跑起来它会自己走进陷阱,也忘了该堵你。所以每一回合,先由 minimax 列出当前最好的几步,果蝇再从里面挑一步。胜负平由 minimax 判定,果蝇只负责在并列的选项里打破平局——而有时候只允许一步,那它连这点发言权都没有。

把智能体创建时的 unbeatable 参数设成 False,minimax 就关掉了。这时候裸回路独自上场,它会输,而且真的会输。

哪些是真的,哪些是我编的

真实的部分:神经元以及它们之间的连接,直接来自雄性果蝇的连接组数据;每条连接的强度,是真实的突触数量;一个神经元是激活还是抑制下一个,来自数据库预测的神经递质。我用了一条常见规则——乙酰胆碱激活,GABA 和谷氨酸抑制,其余算中性。这是预测,不是定论。

不真实的部分也得说清楚:

  • 棋盘。果蝇身上没有任何部位见过 3x3 的格子。我把中央脑神经元拆成九组当"输入",又挑了九组输出神经元当"格子",这个映射是我自己的主意。
  • 模拟。它只是一次简单的信号流动计算,没有脉冲,也没有真实的时间维度,所以它并不等于活体神经元的行为方式。
  • 选神经元。我按自己的规则挑的,主要是看连进输出神经元的最强连接,所以我切出来的是一块我选的切片,而不是"果蝇的决策回路"。
  • 学习。果蝇在这里什么都不学,接线是固定的。接线是真的,但拿它来下棋这件事,是我的设计。

想自己试试的话

代码放在 github.com/50RISHU/FlyCNS-TicTacToe。你需要一个免费的 neuPrint token,先跑一遍流程把回路搭出来,然后就能在终端里对局,具体步骤写在 README 里。代码是 MIT 许可,连接组数据是 CC-BY,用的话记得给数据的创建者署名。

这东西是我用 AI 做的,纯属好玩。如果你有想法,比如做一个真正的脉冲模型,或者有更好的办法把棋盘喂进去,我很想听听。