BFGS法
GSL は gsl_multimin_fdfminimizer_vector_bfgs2 でBFGS法を実装している。Ceres Solver はBFGS法とL-BFGS法の両方を実装している。
SciPyでは、scipy.optimize.fmin_bfgs 関数がBFGS法を実装している。パラメータ L にとても大きな数を指定することにより、L-BFGS法を実行することもできる。
Octave は double-dogleg 近似を用いたBFGS法を cubic line search に用いている。
R言語では、BFGS法(および矩形拘束を扱えるL-BFGS-B法)が基本関数 optim() のオプションとして実装されている。
MATLAB Optimization Toolbox(英語版) では、fminunc 関数が問題サイズを「中程度」に指定した場合にBFGS法を利用する。
C++ で実装され、高精度算術パッケージ ARPREC に統合されている高精度算術版BFGS法 (pBFGS) は(丸め誤差などの)数値的不安定性に対して頑強である。
他にも、C++ によるBFGS(およびL-BFGS, L-BFGS-B, CG, ニュートン法)の実装としては、MIT License で公開されている Eigen(英語版) ライブラリが存在する。
オープンソースの C 実装としては、Gnu Regression, Econometrics and Time-series Library (gretl) がBFGSおよび L-BFGS法を含んでいる。
数理最適化において、ブロイデン・フレッチャー・ゴールドファーブ・シャンノ法 (英: Broyden–Fletcher–Goldfarb–Shanno algorithm)、略してBFGS法は、非制限非線形最適化問題に対する反復的解法の一つである。
BFGS法は山登り法の一種である、準ニュートン法に属しており、(2回微分可能であることが望ましい)関数の停留点を探索する。この種の問題の最適性の十分条件は勾配が零となることである。ニュートン法とBFGS法は、最適点(英語版)の近傍で関数が二次までテイラー展開可能でない場合、収束が保証されない。しかし、BFGS法は関数が滑らかでない場合でもよい性能を発揮することが示されている。
準ニュートン法では、二次微分のヘッセ行列は必ずしも直接計算しなければならないわけではなく、勾配を計算(あるいは近似計算)した結果を用いて近似することもできる。準ニュートン法は、一次微分の根を探索する割線法を多次元問題へ一般化したものである。多次元問題では、正割方程式は一意解を与えないため、準ニュートン法はどのように解を拘束するかによってことなる。BFGS法はこの種の手法の中で最も普及しているものの一つである。その他にも、BFGS法を限られたメモリで実行できるようにし、非常に多くの変数を扱えるように変更されたL-BFGS法も広く使われている。単純な矩形拘束を扱うBFGS-B法と呼ばれる変種も存在する。
このアルゴリズムの名前は、チャールズ・ジョージ・ブロイデン(英語版)、ロジャー・フレッチャー(英語版)、ドナルド・ゴールドファーブ(英語版)、デイビッド・シャンノ(英語版)に因む。