科學依靠計算機建模 - 所以時會發生什麼出了問題?

從青黴素的轉變發現到相對論和量子力學,科學甚至在有計算機之前就以令人難以置信的速度發展。 其中很大一部分取決於科學方法的穩健性:科學結果通過其他科學家的複制和擴展得到驗證。

但我們做科學的方式正在改變 - 我們現在越來越依賴複雜的計算機模型來理解自然。 事實證明,這些模型幾乎不可能再現 - 這意味著科學的重要試金石正在受到挑戰。 那麼這種變化的實際影響是什麼呢?我們能做些什麼呢?

前現代科學 - 被稱為“自然哲學” - 是經驗主義的。 經驗科學使用過去的觀察來預測未來,然後可以對其進行測試。 第谷布拉赫一位16世紀的丹麥天文學家,以這種方式設法對天空進行準確而全面的觀測。

現代科學,但是,是理論上的。 理論科學也使得預測的,但它的數學模型,而不是從以前的觀察得出他們。 想想艾薩克·牛頓運動定律,如 反平方引力定律.

例如,有一個方程式描述了太陽周圍地球的軌道。 此等式可用於構建計算機模型,您可以在其中插入某些變量並查看解決方案的更改方式。 您可以插入未來的日期並在該日期讀取地球的位置。 您也可以使用相同的程序來模擬其他行星系統 - 它們都基於相同的數學。 您所要做的就是插入不同的質量和所涉及的身體的各種其他屬性。


內在自我訂閱圖形


這些數學方程式在可用時很好 - 但通常它們不是。 例如,我們知道沒有簡單的方程可以解決所謂的“三體問題“,它描述了三具屍體周圍軌道和引力相互影響 - 就像月亮,地球和太陽。

當前的許多科學都涉及更複雜的系統,同樣缺乏精確的解決方案。 這些模型必須是“計算”的 - 描述系統如何從一個瞬間變化到另一個瞬間。 但是,除了通過這種方式“模擬”其演化之外,沒有辦法在未來的某個時間確定確切的狀態。 天氣預報是一個熟悉的例子; 直到1950中出現計算機,才能比實際發生的更快地預測未來的天氣。

當前的科學通常包括設計描述複雜系統的數學模型,然後將其轉換為計算模擬,並運行模擬以進行預測以驗證模型。

建模失敗時

建模用於科學領域 - 從天體物理學和 氣候預測 生物信息學和經濟學。 但是還有 爭論不斷增加 關於這種科學難以通過複製驗證的事實。

事實證明,簡單地用文字描述實驗方法是不夠的。 這部分是因為像英語這樣的自然語言對於精確描述計算而言過於模糊。 畢竟,程序員使用編程語言的原因就在於此。 軟件開發中最大的挑戰之一是將模糊的需求轉換為精確的行為規範。

人類 - 甚至科學家 - 畢竟都是錯誤的。 將任何信息轉換為程序幾乎總是會引入錯誤。 例如,許多科學家依靠數據探索工具,如電子表格,這些工具的設計易於使用,而不是堅固耐用。 簡單地在電子表格中總結錯誤的單元格範圍非常簡單,而不會收到任何警告。 這是其中之一 方法論缺陷 在一篇美國共和黨過去用來製定支持緊縮政策的文件中。

同樣的 最近的一項研究 在調查美國公司Enron期間公佈的15,770電子表格中,顯示包含至少一個公式的24%電子表格存在明顯的錯誤,例如添加空白單元格。

在自然科學中, 火星氣候觀測為了研究火星上的氣候而在1998上發射的太空探測器在一年後丟失了,因為控制軟件的一部分錯誤地使用了英製而非公制單位。 另一項研究 同樣地學實驗九個獨立的實現 - 使用相同的數據集,算法和程序設計語言 - 顯示在所獲得的結果非常小的協議。

更重要的是,即使研究論文的讀者能夠成功地解釋作者的精確含義,然後完美地將其翻譯成程序,但在執行過程中仍然存在陷阱。一類特別棘手的問題源於電腦如何處理數字:儘管它們可以以完美的精度處理諸如 42 和 -17 之類的整數,但處理諸如 3.14 和 2?1.414 等實數的標準技術僅允許近似精度。這些近似意味著計算相同值的明顯等效方法可以 產生不同的結果.

那麼,可以做些什麼呢? 如果即使是專業軟件開發人員也無法可靠地生成正確的軟件,那麼像科學家這樣的業餘程序員還有什麼希望?

其中一項工作是製作用於設計“特定領域”編程語言的工具,每種編程語言都針對特定類別的問題進行定制,例如經濟市場中的代理行為或藥物跨細胞的擴散。 這些目標旨在使專家更容易直接用熟悉的術語描述計算,而不必間接地用通用編程語言對它們進行編碼。

第二種方法旨在為程序設計更具表現力但仍然用戶友好的“類型系統”。 這樣可以更容易地捕獲“愚蠢”錯誤,例如電子表格中的空白單元格,或者混合不同單位的值。 但它不能排除所有邏輯錯誤。 第三行是開發可用的代碼庫以進行精確算術,避免了近似問題。

這些方法很有可能有助於解決未來的問題,或至少消除一些風險。 畢竟,世界需要科學,科學家需要計算機 - 這不太可能很快改變。

關於作者

Jeremy Gibbons,牛津大學計算機系教授。 編程語言研究主題負責人。

這篇文章最初出現在談話

相關圖書:

at InnerSelf 市場和亞馬遜