タグ付けされた質問 「reproducibility」

8
シミュレーションの結果と論文の結果が常に同期していることを確認するにはどうすればよいですか?
私の論文の1つでは、いくつかの数値に加えていくつかの数値結果をリストしています。私がやりたいのは、論文の数値結果が常にコードと一致することを確認することです。今は、シミュレーション結果から数値結果を紙に直接コピーします。これは非常にシンプルでローテクですが、結果を誤ってコピーしたり、紙の結果をコード出力。 論文で引用した数値結果を、コードで生成された結果と同期させる良い方法はありますか?(ここでは、コードを実行することは、論文を更新したいときはいつでも簡単で実用的であると想定しています。)これらの数値結果は、必ずしも表形式に適しているとは限りません。原稿に表がある場合もありますが、より一般的には、方程式の数値としてシミュレーションパラメーターがリストされています。例は次のようになります。 y∗=(y∗1,…,y∗n)y∗=(y1∗,…,yn∗)\begin{align} \mathbf{y}^{*} = (y_{1}^{*}, \ldots, y_{n}^{*}) \end{align} ここで、初期条件の要素を置き換えたいy∗y∗\mathbf{y}^{*}常微分方程式系を数値的に積分するシミュレーションで使用する実際のパラメーターにます。この例のような1回限りのデータにテーブルを使用すると、過剰になり、必要以上にインクが多くなります。 図は簡単なケースだと思います:ドキュメントが(LaTeXソース、Markdown、RSTなどから)ビルドされるたびに、コードを実行してビルドプロセスを開始します。しかし、私のシミュレーションで生成された数値を私の論文と同期させるためのより良い提案があれば、ぜひ聞いてみてください。

5
計算研究を再現可能にするために、雑誌記事にどの資料を含める必要がありますか(またはオンラインで投稿する必要がありますか)?
計算科学の研究では、再現性がますます重要になっています。(たとえば、科学の Roger Pengによるこの記事を参照してください。他のそのような記事やWebサイトも知っています。)しかし、どの程度の情報をジャーナル記事(またはオンライン)に含めるべきかはわかりません。私の計算研究は再現可能です(知的財産契約のような他の障害がないと仮定)。ガイドラインはありますか?もしそうでなければ、計算科学研究を再現可能にするために研究者がとるべきステップを提案できますか? 回答で特に使用されるのは、これらの提案を実装するための可能な方法、つまりワークフローです。システムに依存しない、またはLinuxベースのワークフローが望ましいです。また、関連する個人的な経験について話し合うことも役立ちます。 私の特定のケースでは、MATLABで実行できるほど単純な2つの計算例を含む理論的な論文を書いています。この場合、MATLABスクリプトを含め、マシン上の特定のバージョンのMATLABを記録するだけで、再現性を確保できます。ただし、もっと複雑なシナリオが存在することは確かです。再現可能な研究を実行する方法についてのアドバイスは、将来のプロジェクトについて知るのに非常に役立ちます。

6
独自のライブラリが必要な場合、再現可能な研究を行う最良の方法は何ですか?
計算の再現可能な研究は、他の研究者が結果を生成するために必要なコードを他の研究者が利用できるようにすることを目的としています。カップルの論文は、私が使用上の社内自動微分パッケージ(と呼ばれる働いています:私は、私の研究の再現性のすべてをしたいのですが、私は思わぬ障害のビットに実行しているDAEPACKを(独自のライブラリに)CHEMKIN- II ;ライセンス条項は不明)。 これらのソフトウェアコンポーネントをオープンソースバージョンに置き換えるのは非常に時間がかかります。CHEMKIN-IIのオープンソースの代替物はCanteraと呼ばれますが、CanteraはC ++ですが、CHEMKIN-IIはFortran 77にあります。十分なCanteraコードを変更して自動処理できるようにするには、多大な労力が必要です。 C ++の差別化ツール。 これらの専用パッケージが必要な場合、研究者がCHEMKIN-IIにアクセスできないと仮定して、研究を可能な限り再現可能にする最良の方法は何ですか?DAEPACKはソースからソースへのトランスレーターなので、必ずしもDAEPACKを配布する必要はありません。出力を含めることができるかもしれません。これは、微分を計算するFortranソースファイルです。 より一般的には、あなたの作品にプロプライエタリなソフトウェアが必要であり、そのプロプライエタリなソフトウェアが広く利用できない場合(つまり、MATLAB、Mathematicaなどではない場合)、どのように仕事を再現可能にしますか?

5
並列簡約のために数値の非結合性に対処する方法は?
並列簡約では、対応する操作が結合的であると仮定します。浮動小数点数の追加については、この仮定に違反しています。なぜ私がこれを気にするのか尋ねるかもしれません。まあ、それは結果の再現性を低下させます。また、シミュレートされたアニーリングを使用して、このような非再現性のある結果を生成するサブルーチンを最適化(またはパラメーターに適合)すると、さらに悪化します。 この問題に対処する一般的な方法は何ですか?次の戦略について何が言えますか? 非再現性を気にしないでください。 浮動小数点数と加算で並列リダクションを使用しないでください。 適切なサイズのワークパッケージを再現可能な方法で作成し、最終的な縮小を手作業で行います。 加算に高精度を使用します(ただし、すべてのコンパイラが高精度の浮動小数点型を提供するわけではありません)。

1
自分のコードを使用して、公開された結果を自分の記事に簡単に再現する方法
私は記事で結果を得るために使用したプログラム/ライブラリを書きました。(ここにありますが、私の質問は一般的です。)定期的に実行するテストがありますctest(実行には数分かかります)。この記事でいくつかの表または図を再現するために、スクリプトまたは単純なドライバープログラムを作成する必要があります。これは、おそらく10分以上実行される可能性があるため、通常のテストスイートのこの部分は必要ありません。同時に、記事の結果が次のようになることを確認したいと思います。 後で再現 ライブラリを開発し続けた後も、同じ/正しい結果が得られることを確認してください 現在、通常のテストスイートの一部として実行する小さなドライバープログラムを作成しようとしています。記事の結果を再現する場合は、いくつかの行のコメントを解除します。もちろん、正確な行を知りません。また、記事とまったく同じ結果を得るために他のパラメーターを微調整する必要があるかどうかはわかりません。 また、記事から正確な図/表を計算するPythonスクリプトを作成しようとしました。このようなスクリプトは、定期的に実行されていない(時間がかかりすぎる)ため、通常、ライブラリの更新後に動作を停止します。 私が思いついた最良の方法は、Fortran(またはC / C ++)の例を使用することです。これは、定期的に(ライブラリの一部として)コンパイルされますが、通常のテストスイートでは実行されません。そのように、少なくとも私はそれがうまくコンパイルされることを知っています(したがって、うまくいけば実行もできます)そして、通常のテストスイートの一部として、いくつかの単純な(より小さい)サンプルをテストします。 この問題を処理する最適な方法は何ですか?

4
読者が結果をそれらを生成するコードに明確に一致させることができるように、論文のコードを記述する最も役立つ方法は何でしょうか?
私は再現可能な論文を書いていますが、この論文にはPythonスクリプトによって生成される計算結果があります(同様のMATLABスクリプトはほぼ同じ結果を生成します)。読者が論文の計算とコードの計算を一致させることができれば、読者にとって論文の理解が容易になると思います。この作品は抽象的な形式主義を提案しており、論文の例はこの形式主義を読者(より多くはエンジニアになる)にとってより具体的なものにすることになっている。コードはおそらく、計算の実行方法の最も詳細な記録になるので、それを明確にすることで、レビュープロセス中に役立つ可能性があります。 コードと計算結果(図、方程式)の間の対応をより明確にする方法についての提案はありますか? たとえば、論文のさまざまなステップを実装するコード行については、方程式番号を引用できると考えていました(コードとLaTeXの間で相互参照できれば驚くでしょうが、それらに手でラベルを付けるのは問題ありません) 、さまざまな例や図に対応する関数を書くことができます。 def example_1(): # Insert code corresponding to first example pass def figure_1(): # Insert code that generates Figure 1 pass コードが大きく、エンジニアリングで使用されるさまざまな数学的手法が実際に同じである方法を説明しようとしていなかった場合、おそらくコードを明確にすることはそれほど気にしませんが、紙と小さなコードベース、この演習で価値があるかもしれないようです。

1
計算実験を行うためのガイドラインは何ですか?
物理学、生物学、化学などには、実験を行うためのさまざまなルールセットがあります。どのイベントが関連すると見なされるか、サンプルの汚染を回避する方法、再生プロセスを作成および修正する方法などです。 数値実験の精度と再現性を確保するための標準、プロトコル、およびベストプラクティスとは何ですか?

4
MPIを使用するコード/ライブラリと互換性のある単体テストフレームワークに関する推奨事項はありますか?
通常、シリアルコードを記述し、その際に、xUnitスタイルのテストフレームワーク(MATLAB xUnit、PyUnit / nose、またはGoogleのC ++テストフレームワーク)を使用してユニットテストを記述します。 Googleの大まかな検索に基づいて、実務家がMPIを使用するコードを単体テストする方法についてはあまり見ていません。そのためのベストプラクティスはありますか? ユニットテストとテスト駆動開発の戦略と比較して、テストフレームワークに使用するソフトウェアに関する答えを探しています(存在する場合-答えは「独自のコードをロール」することができます)カスタムテストコードの事例が参考になります)。 私がテストしようとしているもののほとんどは、右側の関数評価と半離散化PDEを統合するタイムステッパーのヤコビ行列アセンブリルーチンです。私はPETScを使用するので、PETSc固有のものがあれば、より一般的なテストフレームワークに加えて役立ちます。 明確化の編集: 例はにあり${PETSC_DIR}/src/ts/examples/tutorials/ex2.c、ここでRHSFunction(右側の関数評価)などのテストを行います。RHSJacobian(ヤコビ行列の評価)。私は、組み立てられた右側と組み立てられたヤコビ行列の既知の値に対してテストします。いくつかの単純な問題の場合、これらの値を分析的に取得できます。これらの関数は、他のアプリケーションレベルの関数を実行しないアプリケーション固有の関数ですが、関数内でベクトルまたは行列のアセンブリが実行されると、MPIを呼び出すことができます(上記のリンクされたPETScの例のように)。プロセッサにローカルなベクトルまたは行列の一部のみを計算する関数を作成する場合、可能な場合はグローバルなアセンブルバージョンに対してテストする必要があります。これは、パラレルプログラミングが初めてなので、グローバルなベクトルとグローバルについて考える方が直感的だからです。マトリックス。これらのテストは、小さな問題サイズと少数のプロセッサーで実行されます。 これを行うためのいくつかの戦略を考えることができます。 このトピックで行ったGoogleの検索に基づいて、おそらくうまく機能しない戦略は、既知の出力を構築し、相対/絶対エラーを並行して見つけ、単純な比較を行うことです。MPIを使用して「Hello、world」プログラムを作成した人なら誰でも、出力が文字化けする可能性があります。これは、単体テストの実行の有用性を制限します。(これが質問をするきっかけになりました。)単体テストフレームワークの呼び出しには、潜在的なトリッキーさもあるようです。 出力をファイルに書き込み(たとえば、PETScでVecViewand を使用してMatView)、ndiffまたはのような既知の出力と比較しnumdiffます。ファイル比較を使用して単体テストを行った以前の経験から得たこのメソッドの直感は、細心の注意が必要であり、フィルタリングが必要になるということです。ただし、上記のユーティリティをプレーンdiffに置き換えることができ、テキスト形式の一致を心配する必要がないため、この方法は回帰テストに優れているようです。この戦略は、WolfgangBangerthとandybauerが提案しているものと多かれ少なかれだと思いました。また、PETScは、一部のテストで同様のアプローチを使用しているようです。 単体テストフレームワークを使用して、MPIランク0のプロセッサにすべてを収集し、プロセッサランクが0の場合にのみ単体テストを実行するように依頼します。標準で同様のことができます(おそらく、その方が簡単です)返されたエラーは、計算に問題があることを示しますが、どの要素にエラーがあるかはわかりません。そうすれば、ユニットテストの出力が文字化けすることを心配する必要はありません。単体テストフレームワークを正しく呼び出すことだけを心配する必要があります。PETScは、正確なソリューションが利用可能な場合、サンプルプログラム内で標準的な比較を使用するように見えますが、それらの比較を行うときにユニットテストフレームワークを使用しません(必ずしもそうする必要はありません)。

5
コードのアーカイブの寿命を延ばす
再現可能な科学的結果に目を向けて、コードの寿命を確保するためのベストプラクティスの公開リストはありますか?(例えば、オープンソース、ドキュメント作成、依存関係の選択、言語の選択、仮想マシンなど)。 典型的な科学的コードまたは他のソフトウェアの半減期を推定しようとした研究(またはそれが欠けている例/逸話)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.