Chapter 1. Mag 1x: コンピュータでの実験手順

抽象概念の最高のレベル(具体化すれば最低のレベル)から実験を眺めると、ほとんどの実験は以下のように見えます。

  1. 調査する物質的なシステムをセットする。

  2. 計器をセットアップし、尺度を合わせる。

  3. 実験システムを実行し、計器の出力を記録する。

  4. 結果を分析する。

    • 実験および計器の設定を変更する。

    • ステップ3に戻る。

  5. 文書にまとめる ->保存 ->評価 ->等.....

ステップ6では、実験のセットアップとその実行方法について詳しく解説しておくことが重要です。それにより、他のラボでもそのシステムにアクセスして実験を再現することができ、また、結果の再現性をテストすることもできます。これは、コンピュータで実行する実験では、今までほとんど行われていません(あるいは不可能です)。したがって、コンピュータシミュレーションでは、結果を反復することで独立した検証を行うという重要なプロセスを踏むことがほとんどありませんでした。Swarmの1つの目標は、シミュレーションの記述をよりレベルの高い表現に引き上げること、つまり標準的な一連のシミュレーションツールへのリファレンスを利用して、アプリケーションを記述する手法を使うことです。

まず、上記のステップをコンピュータの世界にあてはめるとどうなるか考えてみましょう。コンピュータでは、外界から実験の断片を引っ張り込んで、それらをつなぎ合わせるだけではだめです。空間と時間、その世界でのさまざまなオブジェクト(調査する素材と、その素材とともに注目する素材)、そのオブジェクトに起こる事象のスケジュール、さらに、人工世界と対話して、実験の複数のランやそれが生成するデータを処理するあらゆる種類のコンピュータの部品など、様々な要素を備えた世界を作成しなければなりません。言い換えれば、コンピュータでは、実験をセットアップする断片(ビーカーやブンゼンバーナー、顕微鏡に相当する仮想的なもの)を全部集めて、ゼロから*新規作成*しなければならないということです。

"実"世界の実験と、コンピュータでの実験の最大の相違点は、時間というものの性質かもしれません。実世界では、物理法則に基づき、実験のセットアップに含まれる何であれ、すべて並行して時刻が進みます。しかしコンピュータでは、実験者が人工世界の各オブジェクトを時刻にあわせて明示的に動かし、同期がとれた状態に保つ必要があります。コンピュータサイエンスの根本的問題の多くは、いかにして並行性をコントロールし使用するかを理解しようとする過程で発生してきたものです。さらに、コンピュータシミュレーションを実装した人の多くはプログラムを組んだりそれを実行したりするとき、そのモデルの並行性を作っているのだという認識がなく、そして、その影響は微妙であるながらも、かなりの確率で意味をもつことにも気づいていません。

そのため、コンピュータにおける実験のセットアップでは、信頼性が高く再現性のある結果を得るために、いかにすれば互いに密接に関係した時刻を持つマルチスレッドが作成できるかという問題が極めて重要です。我々がSwarmの開発作業で力を注いでいるのは、並行性を管理するタスクを利用できるようにすることだけではありません。モデル開発者は実験をセットアップするときに、どのように時刻のマルチスレッドが作用しあっているかについて、いつも無条件に前提条件を作っています。そのことをモデル開発者に気づかせるメカニズムも我々の開発対象なのです。Swarmでは、並行性の仮定を明示することが強制されます。これにより、他の人も時間の流れについて同じ仮定を実装すれば、その結果が再現できるわけです。