疑似乱数生成は、コンピュータ科学や暗号学において重要な役割を果たします。本教材では、疑似乱数生成の理論、主要なアルゴリズム、およびその利用ケースについて説明します。最終的には、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モジュールを使用することで、簡単に乱数を生成し、シミュレーションや統計分析に利用することができます。モンテカルロ法のような手法を使うことで、実際の問題に対処することが可能になります。