问题描述
- 1.赶火车问题。
- 2.模拟二维随机游动(醉汉回家)
1.赶火车问题。
一列列车从A站开往B站,某人每天赶往B站上车。他已经了解到火车从A站到B站的运行时间是服从均值为30min,标准差为2min的正态随机变量。火车大约下午13:00离开A站,此人大约13:30到达B站。火车离开A站的时刻及概率如表1所示,此人到达B站的时刻及概率如表2所示。问此人能赶上火车的概率有多大?
提示:设火车离开的时刻为T1 ,火车运行的时间为T2,该人到达火车站的时间为T3,即为赶上火车。
随机生成正态分布数据
s = np.random.normal(mu, sigma, 1000) # 参数分别为均值、标准差和生成样本数
python">T2 = np.random.normal(30,2) # 随机生成均值为30,标准差为2的数据
python">import randomimport numpy as np# 定义火车离开A站时间的均值和标准差
mean_time = 30
std_time = 2# 定义此人到达B站的时间
arrival_time = 30 # 单位:分钟,大约13:30到达B站# 定义模拟次数
num_simulations = 10000# 初始化赶上火车的次数
count = 0# 进行模拟
for i in range(num_simulations):# 生成火车离开A站的随机概率prob_A = random.randint(0,1)if prob_A <= 0.7:T1 = 0elif prob_A <= 0.9:T1 = 5else:T1 = 10# 生成他到达B站的随机概率prob_B = random.randint(0,1)if prob_B <= 0.3:T3 = 28elif prob_B <= 0.7:T3 = 30else:T3 = 34# 火车运行的时间T2T2 = np.random.normal(30,2) # 随机生成均值为30,标准差为2的数据# print(T2)# 是否能赶上火车if T3 < (T1 + T2):count += 1# 计算赶上火车的概率
probability_caught_train = count / num_simulations
print(f"通过{num_simulations}次模拟,此人能赶上火车的概率是:{probability_caught_train:.2%}")
"""
通过10000次模拟,此人能赶上火车的概率是:71.96%
"""
2.模拟二维随机游动(醉汉回家)
在一个[0,100]×[0,100]的正方形区域内,假设某人的初始位置在点(50,50)处,他周围(前、后、左、右)包括他所站的位置,共有9个格子,每一步随机地移动到一个格子处,也可以保持原地不动。请模拟他的行走路线并作图表示,当他行走到10000步或者出界,则停止模拟。
python">import numpy as np
import random
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Microsoft YaHei' # 处理文本# 初始化参数
N = 10000 # 最大步数
bounds = (0, 100) # 边界
init_position = (50, 50) # 初始位置# 创建用于存储位置的数组
positions = np.zeros((N, 2))
positions[0] = init_position# 定义可能的方向和对应的步长
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)] # 前、后、左、右# 模拟随机游动
for step in range(1, N):# 随机选择一个方向direction = random.choice(directions) # 使用random.choice而不是np.random.choice# 计算新位置new_position = tuple(np.clip(np.array(positions[step - 1]) + np.array(direction), bounds[0], bounds[1]))# 如果新位置在边界内,则更新位置if new_position[0] >= bounds[0] and new_position[0] <= bounds[1] and new_position[1] >= bounds[0] and new_position[1] <= bounds[1]:positions[step] = new_positionelse:# 如果新位置出界,则停止模拟break# 绘制行走路线
plt.figure(figsize=(6, 5))
plt.plot(positions[:, 0], positions[:, 1], marker='*')
plt.xlim(bounds)
plt.ylim(bounds)plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.title('随机游行')
plt.grid(True)
plt.show()
参考赶火车问题