Location : Home > Languages > Perl > Package
Title : Math::Amoeba
Toolbox Logo

名称

 Math::Amoeba - 多次元の滑降シンプレックス法


概要

use Math::Amoeba qw(ConstructVertices EvaluateVertices Amoeba MinimiseND);

my ($vertice,$y)=MinimiseND(\@guess,\@scales,\&func,$tol,$itmax,$verbose);
my @vertices=ConstructVertices(\@vector,\@offsets);
my @y=EvaluateVertices(\@vertices,\&func);
my ($vertice,$y)=Amoeba(\@vertices,\@y,\&func,$tol,$itmax,$verbose);

説明

 これは滑降シンプレックス法(Downhill Simplex Method)により多次元関数の極小値を求めるアルゴリズム(Nelder と Mead が開発)を実装したものである。関数がシミュレータなどの他のプログラムの出力となることも容易に実現できる。
 配列や関数はルーティンの参照により利用できる。

 最も単純な使用方法は MinimiseND 関数である。この関数は、極小値を与えるパラメータの推測値の配列への参照、パラメータの範囲(推測値の周囲の変動範囲)の配列への参照、計算対象の関数への参照、極小値への収束判定における許容範囲、計算繰り返し回数の最大値、冗長モードのフラグ(デフォルトは On)を引数とし、極小値を与えるパラメータへの参照と、その極小値を返す。

 Amoeba 関数は多次元の滑降シンプレックス法そのものの実装である。この関数は、初期値となる N + 1 個の点( n は関数のパラメータ数)の配列への参照、これらの点に対する関数値への参照、極小値への収束判定における許容範囲、計算繰り返し回数の最大値、冗長モードのフラグ(デフォルトは On)を引数とし、極小値を与えるパラメータへの参照と、その極小値を返す。

 ConstructVerticesMinimiseND 関数で用いられる。Amoeba 関数で処理する際に、パラメータ軸に沿ったスケールパラメータを構成する。

 EvaluateVertices は頂点の集合を引数とし、各頂点に対する関数値を参照しながら、結果のベクトルを返す。


使用例

use Math::Amoeba qw(MinimiseND);

sub afunc {
    my ($a,$b)=@_;
    print "$a\t$b\n";
    return ($a-7)**2+($b+3)**2;
}

my @guess=(1,1);
my @scale=(1,1);

($p,$y)=MinimiseND(\@guess,\@scale,\&afunc,1e-7,100);

 print "(",join(',',@{$p}),")=$y\n";

は以下の出力を得る。

(6.99978191653352,-2.99981241563247)=1.00000008274829

履歴

 "README" を見よ。


バグ

 あれば知らせてほしい。


著者

 John A.R. Williams, <J.A.R.Williams@aston.ac.uk>
 Tom Chau, <tom@cpan.org>


参考資料

 "Numerical Recipies: The Art of Scientific Computing", W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling. Cambridge University Press. ISBN 0 521 30811 9.


著作権

 Copyright (c) 1995 John A.R. Williams. All rights reserved.

 本プログラムはフリーソフトウェアであり、 Perl 本体と同等の条件で修正/再配布してもよい。
 2005年以降は本モジュールは Tom と共同で開発している。

Toolbox Logo
Updated : 2006/09/22