使用Sounio进行气候科学
高层阅读
此路线存在是为了证明Sounio不仅仅是为了更快计算。它是为了拒绝将不稳定证据转化为政策准备就绪的数字。
气候软件是一个很好的压力测试,因为它惩罚了虚张声势。您可以随时发布另一个预测。更严格的纪律是决定何时集合传播、模型分歧或数据质量变得太弱,以至于程序无法继续以虚假自信发言。
这就是这里的论点:语言应该帮助科学代码在不确定性被洗白为整洁的仪表板之前停止、缩小范围或标记拒绝。
此路线试图证明什么
Sounio应该在正确答案有时是“不要假装这个估计是决策级别的”的工作流程中很有用。
因此,气候路线是关于拒绝纪律:- 集合聚合应该保留不确定性,而不是将其压平。
- 下游软件应该看到信心故事,而不仅仅是均值。
- 方差的扩大应该能够约束或停止计算。
- 用户应该能够区分有界的预测和经过修饰的虚张声势。
如果语言无法支持这种立场,那么所有的“认识论”修辞都是装饰性的。
持怀疑态度的读者应该问
- 这仅仅是普通数值代码的不确定性包装吗?
- 路线是否显示了分歧的传播,或者只是提到了它?
- 程序是否被允许拒绝结果,或者只是事后标注它?
- 这个关于气候科学的主张本身是关于软件学科的吗?答案应该是第二个:这条路线并没有声称要取代一个完整的气候实验室。它声称的是科学软件在成为公共政策错误之前,必须明确其限制。
集合聚合
struct 认知值 {
value: f64,
variance: f64,
conf_alpha: f64,
conf_beta: f64
}
fn ensemble_mean_5(
m1: 认知值,
m2: 认知值,
m3: 认知值,
m4: 认知值,
m5: 认知值
) -> 认知值 {
let n = 5.0
let mean_value = (m1.value + m2.value + m3.value + m4.value + m5.value) / n
let within_var = (m1.variance + m2.variance + m3.variance + m4.variance + m5.variance) / n
// ... 之间方差计算 ...
let total_var = within_var + between_var
return 认知值 {
value: mean_value,
variance: total_var,
conf_alpha: 1.0,
conf_beta: 1.0
}
}
```这个例子并不是要说明平均是一种新颖的方法。重点在于聚合表面保持了不确定性的故事,而不是将其视为可选的元数据,一旦数字足够漂亮就可以丢弃。
## 为什么这对语言很重要
气候是“总是产生答案”成为政治失败模式的最清晰的地方之一。
如果你的软件堆栈只优化于持续输出数字,它很容易混淆输出连续性与知识连续性。一个认真对待不确定性的语言必须给程序另一个选项:缩小范围、表面分歧或停止。
这就是为什么这条路线与GPU和神经成像一起出现在商店橱窗里。它不是在这里为了主题多样性。它在这里是因为它证明了语言是由那些拒绝是能力一部分的领域塑造的。## 什么能说服持怀疑态度的读者
- 一条从带有不确定性的值到下游决策的可见路径
- 例子中,扩散的加宽改变了控制流程,而不仅仅是复制
- 当前受限气候表面状态的诚实记录
- 对“有趣的研究压力”和“生产预测平台”的明确区分
这就是这条路线应该遵守的标准。
## 边界仍然在哪里
这条路线并不声称:
- Sounio已经是一个完整的气候建模平台
- 当前的例子是完整预测堆栈的替代品
- 每个科学工作流已经用拒绝意识控制流编码
这个声明更窄:气候压力揭示了为什么科学软件需要一个能够保留不确定性并在证据不再证明一个清晰答案时停止说话的语言。