Location : Home > Languages > Perl > Package Title : Math::Random::OO |
![]() |
Math::Random::OO - 乱数生成へのオブジェクト指向
# ファクトリ関数を使う use Math::Random::OO qw( Uniform UniformInt ); push @prngs, Uniform(), UniformInt(1,6); # サブクラスの明的生成 use Math::Random::OO::Normal; push @prngs, Math::Random::OO::Normal->new(0,2); $_->seed(0.23) for (@prngs); print( $_->next(), "\n") for (@prngs);
CPAN には擬似乱数生成アルゴリズムや他のエントロピー源を用いて様々な方法で様々な確率分布から乱数を生成するモジュールがある(参考資料にはいくつか例を挙げた)。残念なことにこれらのモジュールにわたる標準的なインタフェースはない。本モジュールは乱数生成への抽象インタフェースを定義する。本モジュールのサブクラスは個別の型の乱数生成器を実装するか既存の乱数生成器をラップしている。
この一貫性は効率をいくらか犠牲にするが、インタフェースを継承する乱数生成器を提供して汎用的なルーチンを書くことを可能にする。たとえば確率シミュレーション時には、ユーザが定義したパラメータを指定した確率分布の確率変数を示す Math::Random::OO サブクラスオブジェクトに渡せばよい。
use Math::Random::OO qw( Uniform UniformInt Normal Bootstrap ); $uniform = Uniform(-1,1); $uni_int = UniformInt(1,6); $normal = Normal(1,1); $boot = Bootstrap( 2, 3, 3, 4, 4, 4, 5, 5, 5 );
サブクラス用の抽象インタフェースを定義するために本モジュールはサブクラスをインポートし、乱数生成器を生成することを単純化して Math::Random::OO::Subclass->new() をいちいちタイプすることなしに要請にしたがってファクトリ関数をエクスポートする。ファクトリ関数名は以下の Math::Random::OO サブクラスの添え字と同じである。呼び出されれば対応するサブクラスの new コンストラクタメソッドに直接引数を渡し、サブクラスタイプの新しいオブジェクトを返す。サポートしている関数・サブクラスは以下の通り。
全ての Math::Random::OO サブクラスは標準のインタフェースに従わなければならない。これらは new メソッド・seed メソッド・next メソッドで与えられる。詳細は各インタフェースによる。
new
これは標準のコンストラクタである。各サブクラスはサブクラスに特有のパラメータで指定される。
seed
$prng->seed( @seeds );
本メソッドは種(または種のリスト)をとり、乱数生成器の初期状態を設定する。サブクラスによってはオプションで種のリストをとることもあり、インタフェースはそれに従う。
生成器が1つの種しか必要のないときは最初の1つだけを利用する。
next
本メソッドは乱数生成器から次の乱数を返す。
いかなるパラメータもとらない。
CPAN Request Tracker http://rt.cpan.org/NoAuth/Bugs.html?Dist=Math-Random-OO を通じてバグを報告して欲しい。
David A Golden, <dagolden@cpan.org>
http://dagolden.com/
Copyright (c) 2004, 2005 by David A. Golden
本プログラムはフリーソフトウェアであり、Perl 本体と同等の条件で修正/再配布してもよい。
ライセンスの全文は本モジュールに含まれる LICENSE ファイルに含まれている。
これは包括的なリストではない− CPAN で探すことができる−がいくつかの乱数生成モジュールを以下に示す。
![]() |
Updated : 2008/07/19 |