在浏览器里折腾量子电路,除了 Qiskit 还有哪些 JS 玩具能选
量子电路这玩意儿,大部分时候我们都得老老实实装个 Python 环境,然后 pip install qiskit 一把梭。但有时候就是想在浏览器里随手画几个门、跑几个 qubit,不想折腾本地环境——这事儿还真有得选。
我翻了翻 npm,又实际跑了几个项目,挑了三个能直接在浏览器里玩的 JavaScript 量子电路库。它们的定位差别挺大,适合的场景也完全不同。
Q.js——如果你只想要一个能跑量子电路的玩具
Q.js 的核心卖点就是轻。整个库压缩完不到 50KB,没有任何依赖,引入一个 script 标签就能开工。
它的 API 设计得非常直球。创建一个 2 qubit 的电路,加个 Hadamard 门和 CNOT,然后测量,代码长这样:
const circuit = new Q.QCircuit(2);
circuit.addGate(Q.Gate.H, 0);
circuit.addGate(Q.Gate.CNOT, 0, 1);
const result = circuit.run();
console.log(result); // 你会看到 00 和 11 各约 50% 概率
Q.js 支持的门类型很基础:X、Y、Z、H、S、T,以及 CNOT 和 Toffoli。没有参数化门,没有自定义酉矩阵,更没有什么噪声模拟、脉冲级控制。它做的事情就是老老实实维护一个状态向量,做完张量积和矩阵乘法之后给你概率分布。
限制也很明显。因为用的是全状态向量模拟,qubit 数量一旦超过 20 个,内存直接炸给你看。我实测在 Chrome 里跑 22 qubit 的电路,标签页直接崩溃。不过话说回来,在浏览器里折腾 20+ qubit 本来也不是个现实需求。
Q.js 真正适合的场景是教学演示。如果你在写一篇讲解量子门的博客,想在页面里嵌入一个可交互的小电路,Q.js 的轻量程度会让你很舒服。它还有个简单的可视化组件,能画出电路图,虽然画风比较朴素,但够用。
Quantum JavaScript(Q.js 作者的新作)——加了可视化,也加了复杂度
如果你觉得 Q.js 太简陋,同一个作者后来搞了个野心更大的项目,直接叫 Quantum JavaScript。别被名字误导,这不是 Q.js 的升级版,而是一个包含了完整 UI 的前端量子计算学习环境。
它的核心引擎依然是 JavaScript 模拟的,但这次包装了一个相当精美的拖拽式界面。你可以直接从侧边栏把门拖到电路线上,实时看到测量结果的概率分布变化。对新手来说,这个视觉反馈的体验提升非常明显——你改一个门,右边柱状图立刻跳动,这种即时感是命令行比不了的。
代码层面,它的编程接口也丰富了一些:
const sim = new Quantum.Simulator();
sim.addGate('h', 0);
sim.addGate('cnot', 0, 1);
sim.measure();
console.log(sim.getProbabilities());
但它最大的问题也在这儿——这个项目目前维护得不太勤快。GitHub 上最后一次提交是 2022 年初,issue 区攒了不少问题没人回。直接拿来教学演示没问题,但如果想嵌入到自己的项目里,你得做好自己修 bug 的心理准备。
另外它的打包体积比 Q.js 大了不止一个数量级,毕竟塞了一整套 UI 框架进去。如果你只需要一个轻量的计算引擎,Quantum JavaScript 反而不是最优解。
Quantum Circuit Simulator——画质拉满,但跑不动复杂电路
这个项目在 GitHub 上 star 不少,界面也是三个里最漂亮的。它用 Canvas 画电路图,门的样式、连线、测量符号都很精致,甚至支持导出 SVG。
但它有个致命伤:性能。
它没有用状态向量模拟,而是走了一条更"物理"的路线——对每个可能的基态做独立演化。这导致 qubit 数量增加时,计算量呈指数爆炸。我测了一个 8 qubit 的电路,在 Q.js 里毫秒级出结果,在这个模拟器里卡了将近两秒。10 qubit 以上基本没法用。
所以它的定位非常明确:只适合演示 3-5 qubit 的小电路。如果你要做教学截图、写课件、画论文插图,它的视觉效果绝对值回票价。但如果想正经跑算法,趁早换别的。
三个怎么选,一句话版
想在自己的网页里嵌入一个轻量量子电路模拟器,不需要花里胡哨的界面——直接用 Q.js,5 分钟上手,代码不超过 20 行。
想找一个独立的教学工具给学生玩,不介意偶尔出 bug——Quantum JavaScript 的拖拽界面体验最好,学生零代码就能折腾量子门。
需要画漂亮的电路图做课件,不在乎跑复杂电路——Quantum Circuit Simulator 的视觉效果是三者里最好的,截图直接能放进 PPT。
如果你问我个人推荐,我会说先从 Q.js 开始。它足够简单,简单到你读完它的源码也就几百行,顺便还能搞懂量子电路模拟到底在干什么。等玩明白了,再去碰 Qiskit 也不迟。
常见问题
这三个库能在 Node.js 里跑吗?
Q.js 可以,它本身就是一个纯 JavaScript 模块,npm install q.js 之后直接 require 就行。Quantum JavaScript 理论上也能拆出计算核心在 Node 里用,但官方没有提供这种用法,得自己扒源码。Quantum Circuit Simulator 强依赖浏览器 Canvas API,没法在 Node 里跑。
浏览器里模拟量子电路最多能跑几个 qubit?
看模拟方式。Q.js 用状态向量模拟,内存占用是 2^n 级别的——n 是 qubit 数。实测在 8GB 内存的 Chrome 上,20 qubit 是安全上限,21 qubit 开始明显卡顿,22 qubit 大概率崩溃。如果只是做教学用的 3-8 qubit 电路,完全没问题。
除了这三个,还有别的选择吗?
有,但更小众。比如 Quirk 是一个纯网页端的量子电路模拟器,功能很全,但它不是库,是一个完整的应用,你没法把它嵌入自己的项目。IBM 的 Quantum Experience 也提供了在线电路编辑器,但那个是连真实量子计算机的,跟纯前端模拟是两回事。如果只是想在浏览器里跑跑简单的量子电路,本文这三个足够覆盖 90% 的需求了。