Location : Home > Languages > Perl > Package Title : Math::Amoeba |
![]() |
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)を引数とし、極小値を与えるパラメータへの参照と、その極小値を返す。
ConstructVertices は MinimiseND 関数で用いられる。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 と共同で開発している。
![]() |
Updated : 2006/09/22 |