1. トップページ
  2. コラム
  3. モンテカルロ・シミュレーションとは

モンテカルロ・シミュレーションとは?


  • モンテカルロ・シミュレーションとは?

  • icon-question.png
  • どんなシミュレーション?
  • モンテカルロ・シミュレーションの適用例

  • icon-example.png
  • 実世界におけるモンテカルロ・シミュレーション
  • 乱数生成アルゴリズムの紹介

  • icon-algorithm.png
  • コンピュータ上の乱数はニセモノ?
  • 乱数と確率分布

  • icon-dice.png
  • 「幅」と「確率」をみる

モンテカルロ・シミュレーションとは?

  • pic-monte.png
  • そもそもモンテカルロとは?

  • 「モンテカルロ」という横文字を見ると一瞬身構えてしまうかもしれませんが、専門家の名前でも 数学的な定理の名前でもありません。モンテカルロはリゾート地で有名な都市国家、 モナコ公国にある地区の名称です。この地区はカジノやF1レースで有名で、「モンテカルロ」という 言葉自体を聞いたことがある方は多いかもしれません。

    モンテカルロ・シミュレーションは、このカジノが元でついた名称です。 例えばルーレットを考えると、次に玉が入る場所を完全に予測することはできませんし、 その次に入る場所、さらには100回目に入る場所を予測することは不可能です。 ルーレットの入る場所(数)のように、予測ができないランダムな数のことを「乱数」といいます。 身近に存在するサイコロで出る目も立派な乱数です。

    乱数のように前もって予測できないことが、世の中には数多く存在します。 翌日の株価、人員需要、在庫、一分間にかかって来る電話の回数など、身の回りのことを考えると 簡単に思いつくことができるかと思います。この「前もって予測できないこと」をシミュレートするのが モンテカルロ・シミュレーションです。具体的には、様々な事象を乱数に対応させ、数千回から数万回 にわたって乱数を発生させて対応した事象が何回発生するか、どれくらいの確率で起こるのか、 などをシミュレートするやり方を指します。


モンテカルロ・シミュレーションの適用例

  • pic-monte-example.png
  • 実世界におけるモンテカルロ・シミュレーション

  • モンテカルロ・シミュレーションは様々な分野で用いられていますが、 元をたどると「シナリオ生成」という考え方にたどり着きます。 前述した「翌日の株価」「人員需要」「在庫」「一分間にかかって来る電話の回数」を 乱数を用いてシミュレートするということは、様々なシナリオを考えていることになります。 様々なシナリオを生成することで、その結果を統計的に分析することが可能になるのです。 発展的な使用方法として、下の動画のように円周率の近似計算方法をご紹介いたします。

     動画:円周率の近似計算

    シナリオ生成を応用すると、探索にもモンテカルロ・シミュレーションを応用することができます。 探索を活用した例として、コンピュータ囲碁が挙げられます。 コンピュータ囲碁では、次の手の局面から考えられるいくつかの最終局面まで手を進め、 勝率が最大になる手を次の手として採用します。 つまり、一番勝てそうな手を「探索」しているのです。 コンピュータ囲碁はこのような考え方でモンテカルロ・シミュレーションを取り入れたことにより、格段に強くなったと言われています。


乱数生成アルゴリズムの紹介

  • pic-monte-algo.png
  • よりランダムな値に近づくために

  • モンテカルロ・シミュレーションを適用する際には乱数が必要になりますが、 真にランダムな値をコンピュータで発生させることは不可能です。 なぜなら、コンピュータで値を発生させるためには数式やプログラムが必要であり、 必ず周期的な数の羅列となってしまうからです。 そこで、古くより周期の長い数列である擬似乱数の発生について様々な研究が行われ、 生成する手法が開発されてきました。 以下に身近に使用されている乱数生成方法を2つご紹介いたします。

    • 線形合同法【 X_{n+1}=(A×X_n+B)mod M 】
    • 身近なところではExcel®のRAND関数にこの手法が使用されています。 Excel®でこの関数を使用すると、0から1までの乱数が均等に発生します。 0から10までの乱数を発生させる場合は、RAND()*10として使用します。 Excel®以外にも様々なプログラミング言語でrand関数が存在します。 rand関数を用いて作られる乱数は、線形合同法というアルゴリズムで作られています。 具体的な内容の記述は割愛しますが、合同式を用いた漸化式を使用します。 線形合同法のアルゴリズムは非常にシンプルなため、高速かつハイブリットに乱数を得ることができますが、 その反面、式の作り方によっては同じ数列が出てくるまでの周期が非常に短くなってしまうという欠点があります。 プログラミング言語などで用意されているrand関数では、周期がだいたい2^32から2^64として実装されています。

    • メルセンヌ・ツイスタ(MT法)
    • 線系合同法に代わる乱数生成アルゴリズムとして注目を浴びているのがメルセンヌ・ツイスタ(以下MT法)です。 日本人によって考えられたアルゴリズムで、周期の長さが2^19937-1という長周期を実現しています。 さらに場合によってはrand関数よりも生成が高速な場合もあり、様々な言語による実装もなされているため汎用性が高いという長所もあります。 近年では、MT法を改良したSFMT法というアルゴリズムも開発されています。


乱数と確率分布

  • pic-monte-statistics.png
  • 確率分布に従った乱数生成と使用する意味

  • ここまで紹介した乱数生成のアルゴリズムでは、例えば

    • ある値からある値の平均値に近い値を多く出現させたい
    • 0に近い正の値をたくさん生成させたい

    • といったことを実現しようとすると少々厄介です。 つまり、サイコロの目のように均等に値がでてくるものを再現するのには向いていますが、 出てくる値に偏りを持った乱数を発生させようとすると一手間も二手間も必要です。

    出てくる値に偏りを持った乱数を生成させることが可能になれば、

    • 出来上がる部品の平均の重さが100gの製造ラインで、擬似的に部品を10,000個作ったときの重さのバラつきを再現する
    • 1日平均100個売れる商品で、特定の100日を10,000回再現したときの需要量のバラつきを再現する

    • といったことが可能になります。これらを応用すると、例えば「部品を使用した製品が欠陥商品になる確率はいくらか」や 「何個まで商品が減ったときに何個発注すればよいか」といった分析ができます。

    出てくる値に偏りを持たせる、つまり確率分布に従って乱数を発生させることができれば このような分析は容易に行えます。 これをExcel上で簡単に行えるようにしたソフトウェアが「Crystal Ball」です。

     Crystal Ballの詳細

  • Crystal Ballとは

  • icon-crystalball.png
  • リスク分析ソフトウェアCrystal Ballについて
  • セミナーに参加する

  • icon-seminar.png
  • 無料のセミナーを毎月開催しています
  • 試用版

  • icon-trial.png
  • すべての機能を15日間体験いただけます
  • 事例・サンプルモデル

  • icon-sample.png
  • 様々な活用事例をご紹介しています