Science Workflow

气候科学

允许不确定性在转化为政策剧场之前停止程序。

Back to Science Hub

用Sounio做气候科学

执行阅读

此路线存在,是为了证明Sounio不仅关于更快计算。它关于拒绝将不稳定证据转化为政策准备就绪的数字。

气候软件是很好的压力测试,因为它惩罚虚张声势。你总是可以发布另一个预测。更难的纪律是决定当集合传播、模型分歧或数据质量变得太弱时,程序是否应该停止说话。

这就是论点:语言应该帮助科学代码在证据不再证明一个清晰答案之前停止、缩小范围或标记拒绝。

此路线试图证明什么

Sounio应该在正确答案有时是“不要假装这个估计是决策级的”的工作流程中有用。

气候路线因此是关于拒绝纪律:

  • 集合聚合应该保留不确定性,而不是将其压平
  • 下游软件应该看到信心故事,而不仅仅是平均值
  • 增加方差应该能够约束或停止计算
  • 用户应该能够区分有界的预测和光鲜的虚张声势

如果语言不能支持这种立场,那么所有的“认识论”修辞都是装饰性的。

持怀疑态度的读者应该问

  • 这是否只是普通数值代码的另一个不确定性包装?
  • 路线是否展示了分歧的传播,或者只提到了它?
  • 程序是否被允许拒绝结果,或者只是事后注释它?
  • 这个关于气候科学的声明是关于软件本身的纪律,还是关于软件?

答案应该是第二个:此路线不是声称要取代一个完整的气候实验室。它是在声称科学软件必须在这些限制成为公共政策错误之前,使其可读。

集合聚合

struct EpistemicValue {
    value: f64,
    variance: f64,
    conf_alpha: f64,
    conf_beta: f64
}

fn ensemble_mean_5(
    m1: EpistemicValue,
    m2: EpistemicValue,
    m3: EpistemicValue,
    m4: EpistemicValue,
    m5: EpistemicValue
) -> EpistemicValue {
    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

    // ... between variance calculated ...
    let total_var = within_var + between_var

    return EpistemicValue {
        value: mean_value,
        variance: total_var,
        conf_alpha: 1.0,
        conf_beta: 1.0
    }
}

示例的目的是不是平均是新颖的。重点是聚合表面保持不确定性故事,而不是将其视为可选元数据,一旦数字足够漂亮就可以丢弃。

为什么这对语言很重要

气候是“总是产生答案”成为政治失败模式的最清晰的地方之一。

如果你的软件堆栈仅优化于继续输出数字,它很容易混淆输出连续性与知识连续性。一个认真对待不确定性的语言必须给程序另一个选项:缩小范围、表面分歧或停止。

这就是为什么此路线与GPU和神经成像一起出现在商店橱窗中。它不是在这里为了话题多样性。它在这里是因为它证明了语言正在由拒绝是能力一部分的领域塑造。

什么能说服持怀疑态度的读者

  • 从承载不确定性的值到下游决策的可见路径
  • 例子中,增加传播改变控制流,而不仅仅是复制
  • 对当前有界的气候表面的诚实文档
  • 对“有趣的研究压力”和“生产预测平台”的明确区分

这就是此路线应该被持有的标准。

边界仍然在哪里

此路线声称:

  • Sounio已经是一个完整的气候建模平台
  • 当前示例是替代完整预测堆栈
  • 每个科学工作流已经用拒绝意识控制流编码

主张是更窄的:气候压力暴露了为什么科学软件需要一个语言,可以保留不确定性并在证据停止证明清晰答案时停止说话。