最新の20件2025-03-20 競馬に関するアンケート 2024-05-10 支持率と勝率の関係とは? 2018-07-17 The Songs Festivals Of Portland, Oregon Music In The City 2018-03-01 KeHa Tickets Usa Headlining Tour 2018-02-13 2010 West Virginia Condition Fair Concerts 2012-11-17 ま女神のページ in English 2010-03-16 TARGET frontier JV 2010-03-11 Microsoft Excel 2015-12-23 コメント/分割コロガシのページ 2015-06-12 リンク集 2015-04-01 大庭和弥 2014-11-11 騎手別詳細分析 2014-07-25 mime
モンテカルロ法 【Monte Carlo method】 モンテカルロシミュレーション / Monte Carlo simulation 概要 モンテカルロ法(Monte Carlo method)とは、数値計算手法の一つで、乱数を用いた試行を繰り返すことにより近似解を求める手法。関数などにランダムな入力値を次々に投入し、対応する出力値を統計的に処理することで結果を推定する。 ある事象をモデル化した数式や関数があるとき、その定義域に含まれる値をランダムにたくさん生成して実際に計算を行い、得られた結果を統計的に処理することで推定値を得ることができる。 数式を解析的に解くのが困難あるいは不可能な場合でも数値的に近似解を求めることができる。確率論的な事象についての推定値を得る場合を特に「モンテカルロシミュレーション」と呼ぶ。名称の由来はカジノで有名なモナコ公国のモンテカルロ地区である。 例えば、
State モナドと疑似乱数で書いたように、遅延評価が利用できる言語では、無限数列が扱えるので、疑似乱数を使う際に状態を持たなくてもよい。その一例として、モンテカルロ法による円周率の近似を挙げてみる。 XY 平面に単位円を考える。 radius :: Double radius = 1.0この円がぴったり収まる大きさ1の正方形を描く。ここで、第一象限のみを考える。正方形のうち、第一象限にある部分の面積は、1/4。第一象限にある円の面積は、全体の 1/4 だから π/4。 モンテカルロ法では、第一象限の正方形の中に、ランダムに点(x,y)を打つ。たくさんのランダムな点を、疑似乱数から生成しよう。そのとき、状態を持つのではなく、乱数の無限数列を生成する。 import Random randomSeq :: Int -> [Double] randomSeq seed = randomRs (
考察 1,000回で誤差3%程度に、10,000回で誤差1%程度に、100,000回で誤差0.1%程度に、1,000,000回で誤差0.05%程度に、10,000,000回で誤差0.01%程度になります。 コンピュータのスペックによっては、10,000,000回以降はきつい場合があります。ブラウザが応答しなくなるかもしれません(><) あんまり回数を増やすとJavaScriptの疑似乱数の限界にぶちあたる気がします。
確率法則を用いて問題を解くモンテカルロ法(Monte Carlo meyhod)では、質のよい乱数が必要である。 C言語で用意されている関数randと、高品質で高速に乱数を生成できるとして知られるメルセンヌ・ツイスタを利用して、円周率を評価してみる。 また、その際のアルゴリズムとして「あたりはずれ法」と「粗いモンテカルロ法」を用いて計算する。 図1のような単位円の第1象限領域の面積をモンテカルロ法にて求め、 解析的に求められる面積$\pi/4$と比較することによって、円周率の評価を行うことにする。 図1.単位円の第1象限領域 あたりはずれ法 あたりはずれ法とは、面積を評価したい領域$S_A$を面積が既知の領域$S$で囲み、 領域$S$上に分布が一様になるように$N$個の点を降らせる。 領域$S_A$上に落ちた点の数が$N_A$であれば、$S_A$の面積は、 で評価することができる。 図1の
The most direct way of generating random samples from a Poisson distribution is efficient for some parameters and inefficient for others. Wikipedia attributes the following algorithm to Donald Knuth: init: Let L ← exp(−λ), k ← 0 and p ← 1. do: k ← k + 1. Generate uniform random number u in [0,1] and let p ← p × u. while p > L. return k − 1. Here’s the idea behind the algorithm. The time between ar
今回は第1回インターンの id:tarao (ダイアリー書いてない (´;ω;`)) さんの担当、5章の確率論的解析と乱択アルゴリズムでした。前章までは各アルゴリズムの最悪の時間計算量を考えていましたが、現実には最悪の場合の入力ばかりがやってくるのではなく、典型的・平均的な場合の時間計算量を求めたいこともあります。確率論的解析がこういう時に必要になるようです。また、その時指標確率変数というのを用いると計算が楽になる (ことが多い) ということです。 今回は輪講中に、いくつか練習問題にも触れました。 5.1-3 偏ったコインを用いて 0,1 をそれぞれ 1/2 の確率で出力するアルゴリズムを作るには? → 2回振って (表、裏) か (裏、表) と出たらそれぞれ 0, 1 を返し、そうでなければやり直し、を繰り返す。 5.3-2 恒等置換以外の任意の置換をランダムに生成するアルゴリズム? →
京都の嵐山でお花見してきたbonlifeです。ベラシとその仲間たちよ、ありがとう! さてさて、話は急に変わりまして。モンティホール問題(ジレンマ)について扱ったこの日記を見ていたら、Ruby、PHPに比べてPythonが異常に遅いと指摘されていたので、ちょっと調べてみました。RubyやPHPでは乱数を生成するrand()が組み込みなのに対して、Pythonでは標準モジュールでの提供なので、まぁ仕方ないんだろうな、と思いつつ調査。 >>> import random >>> import profile >>> def random_generate(num): for i in range(num): random.randint(1,3) >>> >>> >>> profile.run('random_generate(100000)') 300005 function calls in
なんとなく関数よりクラス使った方がかっこいいよねということで、 random.randint(0, 10) とかって書けばいいところを r = random.Random() r.randint(0, 10) とかって書いちゃう場合ってあると思いますけど、上の書き方と下の書き方は等価ではないです。 とりあえずランダムな値が得られればいいやってな文脈では結果は同じと言えるんですが、クラスをインスタンス化する場合__init__の中でseedが呼ばれます。 でこのseedは、処理自体(引数ありでseedを呼んだ場合)が重いうえに、seedの元になる値を選ぶ処理(引数なしでseedを呼んだ場合)が加わるとさらに重いです。 プロファイラで調べたところ、うちの環境では、関数だけの場合と、引数なしインスタンス化+メソッドの場合では後者の方が5倍くらい遅いです。 引数有りインスタンス化+メソッドの場合で
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く