タグ付けされた質問 「automatic-differentiation」

17
Python用の高品質な非線形プログラミングソルバーはありますか?
解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない 非線形等式および不等式の制約を処理できる ユーザーがヤコビアンを提供する必要はありません。 グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。 OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。 強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。 Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです: 10-400の決定変数 4〜100の多項式等式制約(1〜8の範囲の多項式次数) 決定変数の数の約2倍に等しい合理的な不等式制約の数 目的関数は決定変数の1つです 不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。

4
計算科学でC ++式テンプレートを使用する必要があるのはいつですか。また、使用しない*場合はありますか?
私がC ++で科学的なコードに取り組んでいるとします。同僚との最近の議論では、式テンプレートは本当に悪いことであり、gccの特定のバージョンでのみソフトウェアをコンパイルできる可能性があると主張されました。おそらく、この問題は、このDownfallのパロディの字幕で言及されているように、いくつかの科学的コードに影響を与えています。(これらは私が知っている唯一の例なので、リンクです。) ただし、SIAM Journal of Scientific Computingのこのペーパーのように、一時変数への中間結果の保存を回避することにより、パフォーマンスの向上をもたらすことができるため、式テンプレートが有用であると主張する人もいます。 C ++でのテンプレートメタプログラミングについてはあまり知りませんが、それが自動微分および区間演算で使用される1つのアプローチであることは知っています。それが式テンプレートについての議論になりました。パフォーマンスの潜在的な利点とメンテナンスの潜在的な欠点の両方(それが正しい言葉である場合)を考えると、計算科学でC ++式テンプレートをいつ使用し、いつ避けるべきですか?

1
Fortran(またはC)コードを解析して、Fortran(またはC)関数の間隔拡張を生成できるツールはありますか?
博士論文のケーススタディでは、CHEMKIN-IIの Fortranサブルーチンの間隔拡張が必要です(リンクの謝罪。SandiaNational Laboratoryによって配布されなくなったパッケージで見つけることができる最高のものです)。CHEMKIN-IIは、燃焼化学で使用される化学パッケージです。燃焼で使用される標準パッケージであるため、別のパッケージを使用することはできません(むしろ、実際には使用しないことを好みます)。 必要な間隔拡張を取得するために、社内で開発したDAEPACKというツールを使用しました。32ビットOS(gcc 2.95に対応するlibstdcのバージョン)で必要だったCHEMKIN-IIサブルーチンの必要な間隔拡張を生成できるようになっていた古いバイナリは、数年前に落ちました、そして使用するための途方もない試練になります(私が使用したソフトウェアの他のすべての部分の32ビットバージョンを見つける必要があるため)。このパッケージのソースコードもプロプライエタリですが、もともとMITで開発され、MITで働いているため、(かなりの努力を払って)DAEPACKのソースコードを取得できました。私が持っているソースコードを使用して、64ビットバージョンのLinuxおよびgcc 4.xxに対応するlibstdcのバージョンと互換性のあるDAEPACKのバージョンをコンパイルできました。しかし、このソースコードは古いと思われ、論文を完成するために必要な間隔拡張コードを正常に生成しない実行可能ファイルにコンパイルします。開発者に連絡してソースコードの修正を依頼しましたが、以前に開発者と連絡を取ったところ、彼がソースコードを修正したとしても、ソースコードを修正するには時間がかかることがわかりました。 ここに大きな問題があります。資金を使い果たしたため、卒業するまで6か月が残っています。開発者に頼ってDAEPACKをすばやく修正して、博士論文を正常に完成させることはできません。 次のことを行うパッケージが必要です。 区間拡張、テイラーモデル(区間演算を使用)、およびほぼ任意のFortran 77コードの導関数を生成します。DAEPACKによって解析されない構造は、DOループとIFステートメントだけだと思います。テイラーモデルが必要なので、コードには自動微分(AD)機能も必要です。 Fortran 77コードのソースからソースへの変換により、これらの区間拡張とテイラーモデルを生成します(つまり、コンパイラーのようにソースコードを解析して、区間拡張とテイラーモデルを計算するソースコードを生成します)。 ピンチでは、Fortran 77コードの代わりにCコードに上記の2つのことを行うソフトウェアを使用して、すべてを通過させることができf2cます。すべてを通過させることでうまくいくかどうかわからないので、私はこのようにしないことを本当に好みますf2cが、私はかなり必死です。 必死の博士課程の学生を助けることができますか? いくつかの可能な提案を予想するために、時間の制約を考えると、ここではうまくいかないアプローチがあります: DAEPACKを機能させるために一生懸命努力しています。信じて、試してみた。そして、私は頻繁に開発者を盗聴しています。 オブジェクト指向(またはオブジェクト指向のような)アプローチを使用して、区間拡張またはテイラーモデルを計算するツール。CHEMKIN-II(または他の同様に大きなライブラリ)を新しいタイプで再コーディングする時間がありません。大きすぎます。 Fortran 77/90またはC以外の言語を使用します。CHEMKIN-IIコードはFortranにあります。を使用してCに変換できf2cます。必要な場合は、TChemと呼ばれるCHEMKIN-IIのSandiaベースのクローンを使用します。私の以前の結果はCHEMKIN-IIを使用しています。私の新しい結果は私の古い結果を再現するはずであり、Canteraはケーススタディとユニットテストに基づいてCHEMKIN-IIが行うことを再現しないことをすでに知っています。さらに、私に先行した大学院生は、CHEMKIN-IIソースコードに黒魔術をかけて、区間演算を特にうまく機能させました。それを他のパッケージに複製するのは難しいでしょう。

2
自動差別化に関して、ソースコード変換(STC)は演算子オーバーロード(OO)よりも効率的ですか?
時空間プロセスのベイジアンモデルに取り組んでおり、対数確率のモデルとモデルパラメーターに関する勾配を必要とする非Uターンサンプラー(NUTS)を使用しています。もっと簡潔に言えば、統計分布、クロネッカー積、指数、比、if-elseステートメントなどを含むかなり複雑な対数確率関数、それを提供する必要があり、NUTSに勾配があります。いくつかのパッケージ(Stanおよび JuliaのMCMC)は、オペレーターのオーバーロード(私の知る限り)を使用して、勾配を自動的に取得します。f:Rn→ Rf:Rn→Rf : \mathbb{R}^n \rightarrow \mathbb{R} おそらくソースコード変換の自動差分ツールを使用して独自の勾配関数を作成できた場合、パフォーマンスが向上しますか?

2
自動分化はいつ安いのですか?
自動微分により、特定の入力でプログラムの導関数を数値的に評価できます。この計算は、元のプログラムを実行するコストの5倍未満のコストで実行できるという定理があります。この係数5は上限です。 どのような状況でこのコストをさらに削減できますか?多くの現場での派生コードは、元のプログラムの速度に近い速度で実行されます。この高速化を実現するために何が行われますか? 計算を高速化するために利用できる元のプログラムの特徴は何ですか? 計算を高速化するためにどのようなソフトウェアエンジニアリングトリックを使用できますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.