import numpy numpy.random.seed(10) # 2维随机游走(有限制) def random_walk2D_barrier(np, ns): #------------begin------------ … # 打印结果 print('粒子随机游走%d步后平均位置: (%.5f, %.5f)' %(ns, mx, my))
时间: 2023-08-15 09:16:44 浏览: 172
这段代码是用 Python 实现的一个 2 维随机游走模拟,其中包含了一个有限制的障碍物。函数名为 `random_walk2D_barrier`,接受两个参数 `np` 和 `ns`,分别表示粒子数和游走步数。在函数内部,通过使用 NumPy 库生成随机步长,模拟粒子的运动轨迹,并且在有限制的区域内进行随机游走。最后,输出游走结束后粒子的平均位置坐标。其中 `%d`、`%.5f` 等是 Python 的格式化输出语法,用于控制输出格式。
相关问题
根据提示,在右侧编辑器补充代码,完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 A=[xL,xH][yL,yH]。设考虑 np 个粒子初始位置在原点,在有墙的二维随机游走 ns 步,我们设置 xL=yL=− ns ,xH=yH= ns (墙边界可以是浮点值)。 请你编写函数 random_walk2D_barrier(np, ns),返回 np 个粒子随机游走 ns 步后平均位置的估算值。 提示:首先执行一个方向上的移动。然后测试新位置是否在 A 外。如果在 A 外,则把其这个方向上的位置设置为矩形区域边界值。 要求:产生随机数时使用 numpy 中的函数 randint(1,5),且每次调用仅产生一个随机数,随机值与方向的对应关系如下:NORTH = 1; SOUTH = 2; WEST = 3; EAST = 4。from numpy import * random.seed(10) # 2维随机游走(有限制) def random_walk2D_barrier(np, ns): #------------begin------------ #------------end------------ np = 1000 # 粒子数量 for ns in [100, 200]: # 步数 mx, my = random_walk2D_barrier(np, ns) # 打印结果 print('粒子随机游走%d步后平均位置: (%.5f, %.5f)' %(ns, mx, my))
from numpy import *
random.seed(10)
def random_walk2D_barrier(np, ns):
xL, xH, yL, yH = -ns, ns, -ns, ns # 设置矩形区域
mx, my = 0, 0 # 粒子平均位置的初始值
for i in range(np): # 对于每一个粒子
x, y = 0, 0 # 初始位置为原点
for j in range(ns): # 进行 ns 步的随机游走
direction = randint(1, 5) # 生成随机方向
if direction == 1: # 向北走
y += 1
elif direction == 2: # 向南走
y -= 1
elif direction == 3: # 向西走
x -= 1
else: # 向东走
x += 1
# 判断是否越界
if x < xL:
x = xL
elif x > xH:
x = xH
if y < yL:
y = yL
elif y > yH:
y = yH
# 累加粒子的位置
mx += x
my += y
# 计算粒子平均位置
mx /= np
my /= np
return mx, my
np = 1000
for ns in [100, 200]:
mx, my = random_walk2D_barrier(np, ns)
print('粒子随机游走%d步后平均位置: (%.5f, %.5f)' %(ns, mx, my))
本关任务:编写一个程序,实现有墙的二维随机游走。 相关知识 为了完成本关任务,你需要掌握: 1.常见 Python 随机数函数; 2.随机游走(random walk)。 常见Python随机数函数 import numpy r = numpy.random.random(n) [0, 1) n个实数 r = numpy.random.uniform(a, b, n) [a, b) n个实数 i = numpy.random.randint(a, b+1, n) [a, b] 整数 i = numpy.random.random_integers(a, b, n) [a, b] 整数 随机游走(random walk) 也称随机漫步,是指基于过去的表现,无法预测将来的发展步骤和方向。其概念接近于布朗运动,是布朗运动的理想数学状态。醉汉行走的轨迹、布朗运动、股票的涨跌等行为都可用随机游走来模拟。 编程要求 根据提示,在右侧编辑器补充代码,完善有墙的二维随机游走,使得“游走者”不能走出矩形区域 A=[xL,xH][yL,yH]。设考虑 np 个粒子初始位置在原点,在有墙的二维随机游走 ns 步,我们设置 xL=yL=− ns ,xH=yH= ns (墙边界可以是浮点值)。 请你编写函数 random_walk2D_barrier(np, ns),返回 np 个粒子随机游走 ns 步后平均位置的估算值。 提示:首先执行一个方向上的移动。然后测试新位置是否在 A 外。如果在 A 外,则把其这个方向上的位置设置为矩形区域边界值。 要求:产生随机数时使用 numpy 中的函数 randint(1,5),且每次调用仅产生一个随机数,随机值与方向的对应关系如下:NORTH = 1; SOUTH = 2; WEST = 3; EAST = 4。
```python
import numpy as np
NORTH, SOUTH, WEST, EAST = 1, 2, 3, 4
def random_walk2D_barrier(np, ns):
xL, xH, yL, yH = -ns, ns, -ns, ns
x = np.zeros(np)
y = np.zeros(np)
for i in range(ns):
direction = np.random.randint(1, 5, np)
x += np.where(direction == EAST, 1, 0)
x -= np.where(direction == WEST, 1, 0)
y += np.where(direction == NORTH, 1, 0)
y -= np.where(direction == SOUTH, 1, 0)
x = np.where(x < xL, xL, x)
x = np.where(x > xH, xH, x)
y = np.where(y < yL, yL, y)
y = np.where(y > yH, yH, y)
return np.mean(x), np.mean(y)
```
解释如下:
- 首先定义了4个方向的常量。
- 然后定义函数 `random_walk2D_barrier(np, ns)`,其中 `np` 是粒子数,`ns` 是步数。
- 接下来定义矩形区域的边界,即 $xL=yL=-ns, xH=yH=ns$。
- 初始化所有粒子的位置为原点。
- 接下来开始进行 ns 步的随机游走,每步的方向使用 `numpy.random.randint(1, 5, np)` 产生。
- 对于每个粒子,根据其方向进行一步的移动,然后判断新位置是否在矩形区域 A 外,如果在则将其坐标调整至矩形区域 A 上。
- 最后返回所有粒子的平均位置坐标。
阅读全文