在 DataLogic Studio 中查看
DataLogic Studio 是 JSONLogic 的可视化编辑器和调试器,基于 datalogic-rs 构建,也就是平台运行你适配器所用的引擎。Studio 运行的就是竞技场的语言:它把你的适配器画成流程图,拿一个观测运行它,并逐节点单步跟踪求值。
本章的每个示例都有一个 Open in DataLogic Studio 链接。链接里带着表达式和数据,所以打开时该示例已经求值完毕,不需要账户,也没有什么要保存的。你自己生成的链接也一样:它带着你的适配器,你发给谁,谁就能读。
Studio 与裁判仍有几处细微差别,下面的表格一一列出。
打开你自己的适配器
- 打开 Studio。
- 勾选图表上方的 Templating。
- 把一个适配器粘贴进 Logic:也就是某个输入的
adapter键的值,不带清单的其余部分。 - 把一个观测粘贴进 Data。
- Share 会复制一个指向屏幕上内容的链接。
可以粘贴的观测,模型看到什么里有一个小的;tinybrains adapt 会把每个参考观测写在它生成的张量旁边,文件名为 case-N/observation.json(方法)。
你看到的是什么
- Logic、Data、Result。Result 是 Studio 的输出。对适配器来说,那是顶层的张量调用及其求值后的参数:
{"scatter": [[[12, 30], [13, 30], [43, 66]], [64, 96], "i8"]}表示节点的scatter将收到这三个点、这个形状和这个数据类型。 - 图表。Studio 把每个操作符画成一个节点,它的输入流入其中。Flow 从左到右画数据流;Hierarchy 画的是 JSON 的嵌套结构。
- 调试器。单步控件让求值逐节点推进,当前节点显示它产生的值。要观察
map主体如何依次收到每个元素,或者reduce的累加器如何增长,单步是最快的办法。
Studio 与竞技场的差异
| 在 Studio 中 | 在竞技场中 | |
|---|---|---|
核心操作符:var、val、map、filter、reduce、if、算术、比较、merge 等等 | 会求值 | 以同样的方式求值,用的是同一个引擎 |
{"==": [0, null]} | true | true。竞技场也是 datalogic,所以 JavaScript 的类型强制转换规则在两边都适用 |
| 多于一个键的对象 | 开启 Templating 时,是对象字面量 | 是输出模板,与 Studio 一致,在 tinybrains 中也一样 |
| 键不是操作符的单键对象 | 开启 Templating 时,是对象字面量 | 是数据,与 Studio 一致。tinybrains 会对此发出警告,拼错的操作符就是这样被抓到的 |
用 $ 转义的键,{"$shape": [6, 7]} | 是数据,$ 原样保留,即 {"$shape": [6, 7]}:Studio 不做转义处理 | 是数据 {"shape": [6, 7]},在节点上和 tinybrains 中都如此 |
| 张量操作符 | 展示为参数已求值的调用 | 节点构建张量,并对照你的声明检查形状和数据类型 |
| 操作计数 | 不显示 | 会计数,每个适配器上限 1,000,000 |
| 形状、数据类型、饱和、落在地图之外的散布点 | 不模拟 | 强制执行 |
| Studio 的版本 | 该网站最近一次部署的版本 | 节点链接的版本,记录在你的版本上,字段为 orion_version |
记住关于对象的那几行:对象在这三处都是数据,所以返回 {"mine": …, "theirs": …} 的表达式在 Studio 里会得到一个整齐的结果,而节点会拒绝它,因为它不是张量。请返回数组。
Studio 也会重现的陷阱
对 [row, col, owner] 三元组求 {"var": "3"} 得到的是 null,而 null 与 0 比较时相等。这个 filter 会保留每一个蚁丘,你的和对手的都在内,而 Studio 和竞技场都不会报任何问题:
{"filter": [{"var": "hills"}, {"==": [{"var": "3"}, 0]}]}
在 DataLogic Studio 中打开——数据:一份示例观测:三只蚂蚁、一只敌蚁、一个食物、双方蚁丘、三格水域
这是适配器能犯的代价最高的错误,而 Studio 展示它的方式与竞技场运行它的方式一致。要避免它,请用 === 比较,读取一个确实存在的字段,或者给 var 一个回退值:{"var": ["3", -1]}。
Studio 够用和不够用的时候
Studio 能告诉你 JSON 部分是否挑出了正确的东西:正确的列表、字段、坐标和形状。作用域错误、filter 用错了字段、形状拼装顺序不对,都会在 Result 面板里显露出来。
Studio 无法告诉你适配器构建的张量是否就是你的计算图训练时用的那个、是否在预算之内、计算图是否接受它。tinybrains adapt 会写出张量和每一个的计费,tinybrains check 测量的则正是审核所测量的东西。