疑似乱数生成は、コンピュータ科学や暗号学において重要な役割を果たします。本教材では、疑似乱数生成の理論、主要なアルゴリズム、およびその利用ケースについて説明します。最終的には、Pythonを使った疑似乱数生成の実装を行います。
疑似乱数とは、数学的なアルゴリズムに基づいて生成される数列であり、一見ランダムに見えるものの、実際には決定論的なパターンに従っています。これに対して、本当の乱数は物理的現象に基づいて生成されるものです。
Pythonでは、標準ライブラリのrandom
モジュールを使用して疑似乱数を生成します。ここでは、代表的な機能をいくつか紹介し、それに基づいたサンプルコードを作成します。
以下のサンプルコードでは、random
モジュールを使って基本的な乱数生成の方法を示します。
import random
# シードの設定
random.seed(42)
# 0から1の間の乱数を生成
print("0から1の間の乱数:", random.random())
# 1から10の間の整数を生成
print("1から10の間の整数:", random.randint(1, 10))
# リストからランダムに要素を選択
options = ['apple', 'banana', 'cherry']
print("ランダムなフルーツ:", random.choice(options))
# 指定した範囲から複数のユニークな乱数を生成
print("ユニークな乱数のリスト:", random.sample(range(1, 100), 5))
random.seed(42)
): 乱数生成器の初期値を設定します。これにより、同じシードを使えば同じ乱数列が生成されます。random()
: 0から1の間の浮動小数点数を生成します。randint(a, b)
: aからbまでの範囲で整数を生成します。choice(seq)
: シーケンスからランダムに一つの要素を選びます。sample(population, k)
: 指定した範囲から、ユニークなk個の要素を選びます。次に、疑似乱数を使ったモンテカルロ法を実装して、円周率の近似を行います。
import random
def monte_carlo_pi(num_samples):
inside_circle = 0
for _ in range(num_samples):
x = random.uniform(0, 1) # 0から1の間の乱数
y = random.uniform(0, 1) # 0から1の間の乱数
distance = x**2 + y**2
if distance <= 1:
inside_circle += 1
# 円周率の近似値
pi_estimate = (inside_circle / num_samples) * 4
return pi_estimate
# サンプル数を指定
num_samples = 100000
pi_value = monte_carlo_pi(num_samples)
print(f"モンテカルロ法による円周率の近似値: {pi_value}")
monte_carlo_pi
): モンテカルロ法を用いてπの近似値を計算する関数です。疑似乱数生成は、様々な分野で重要な役割を果たしています。Pythonのrandom
モジュールを使用することで、簡単に乱数を生成し、シミュレーションや統計分析に利用することができます。モンテカルロ法のような手法を使うことで、実際の問題に対処することが可能になります。