【python】随机模拟——赶火车问题、醉汉回家

server/2024/10/22 12:34:11/

问题描述

  • 1.赶火车问题。
  • 2.模拟二维随机游动(醉汉回家)

1.赶火车问题。

一列列车从A站开往B站,某人每天赶往B站上车。他已经了解到火车从A站到B站的运行时间是服从均值为30min,标准差为2min的正态随机变量。火车大约下午13:00离开A站,此人大约13:30到达B站。火车离开A站的时刻及概率如表1所示,此人到达B站的时刻及概率如表2所示。问此人能赶上火车的概率有多大?
表1:火车离开A站的时刻及概率
火车离站时刻 	13:00 	13:05 	13:10
概率 	0.7 	0.2 	0.1
表2:某人到达B站的时刻及概率
人到站时刻 	13:28 	13:30 	13:32 	13:34
概率 	0.3 	0.4 	0.2 	0.1

提示:设火车离开的时刻为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()

参考赶火车问题


http://www.ppmy.cn/server/13375.html

相关文章

C++设计模式:适配器模式(十四)

1、定义与动机 定义&#xff1a;将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 动机&#xff1a; 在软件系统中&#xff0c;由于应用环境的变化&#xff0c;常常需要将“一些现存的对象”放在新的环境…

GPT-3和自然语言处理的前沿:思考AI大模型的发展

引言 自然语言处理&#xff08;NLP&#xff09;是人工智能&#xff08;AI&#xff09;领域中最富有挑战性和活跃的研究领域之一。近年来&#xff0c;随着深度学习技术的发展和计算能力的提高&#xff0c;大型语言模型&#xff0c;尤其是OpenAI的GPT-3&#xff0c;已成为推动该…

Vue js闭包

JavaScript闭包详解 在JavaScript中&#xff0c;闭包是一个非常重要的概念&#xff0c;也是JavaScript区别于其他语言的一大特色。理解闭包不仅有助于提升我们的编程技能&#xff0c;还能让我们更好地利用JavaScript的特性和优势。本文将详细解析闭包的概念、原理、应用以及相…

STM32 USB虚拟串口

电路原理图 usb部分 晶振部分 usb与单片机连接 配置信息 sys配置信息 rcc配置信息 usb配置信息 虚拟串口配置信息 时钟配置信息 项目配置信息 代码 包含文件 主函数代码 实验效果 修改接收波特率依然可以正常接收&#xff0c;也就是说单片机可以自动适应上位机的波特率设置。…

hive SQL谓词下推

Sql 优化&#xff1a;谓词下推&#xff08;PPD 定义 谓词下推的概念其实出现在sql中&#xff0c;在关联查询时(join&#xff0c;left join ,right join),因为涉及两个大表之间的关联(特别是在hive)造成资源消耗会比较大&#xff0c; 因为建议在join之前先将两个表进行过滤(hive…

软件测试(Web自动化测试)

一.自动化测试简介 1.自动化测试是一种把人工驱动的测试行为转化为机器执行的测试过程。 2.使用自动化测试需要满足的3个条件&#xff1a; &#xff08;1&#xff09;项目需求变动不频繁 &#xff08;2&#xff09;项目进度压力不大&#xff0c;时间不紧迫 &#xff08;3&…

Python常见运算符

赋值运算符 赋值运算符主要用来对变量进行赋值,包括如下这些: 运算符 描述 赋值加等于 - 减等于 * 乘等于 / 除等于 // 整除等于 % 模等于 ** 幂等于实例如下: a 10 a 5 # 等价于 a a5 a *2 # 等价于 a a*2比较运算符 比较运算符主要用来比较两个数据的大小,包括如下这…

大模型日报2024-04-24

大模型日报 2024-04-24 大模型资讯 Google DeepMind的RecurrentGemma模型超越变压器模型 摘要: Google DeepMind的最新研究成果RecurrentGemma模型在性能上超过了基于变压器的模型&#xff0c;并且使用的资源更少。这一突破为人工智能领域提供了一个高效的模型选择&#xff0c;…