Python随机游走模拟类代码报错求助:变量未定义问题
随机游走模拟类的错误修正方案
需求说明
为Simulation类实现get_next_event方法,需完成以下逻辑:
- 随机选取当前walker位置的相邻节点
- 从参数为
lambda_的指数分布中抽取等待时间 - 返回包含等待时间和新位置的结果
修正后的完整代码
import networkx as nx import random import numpy as np class RandomWalker: def __init__(self, position=0): self.position = position class Simulation: def __init__(self, random_walker, G, lambda_, t_end): self.random_walker = random_walker self.G = G self.lambda_ = lambda_ self.t_end = t_end def get_next_event(self): # 获取walker当前位置 current_pos = self.random_walker.position # 获取当前位置的所有相邻节点 neighbors = list(self.G.neighbors(current_pos)) # 随机选择下一个位置 next_pos = random.choice(neighbors) # 更新walker的位置 self.random_walker.position = next_pos # 抽取指数分布等待时间(scale=1/λ,对应均值为1/λ) waiting_time = np.random.exponential(scale=1/self.lambda_) # 返回格式化后的结果 return f'Waiting time: {waiting_time:.2f}. New position: {next_pos}' # 类实例化与测试代码(放在类定义外部) if __name__ == "__main__": # 创建测试图 G = nx.Graph() G.add_edges_from([(0,1), (1,2), (2,0)]) # 初始化随机游走器 walker = RandomWalker(position=0) # 初始化模拟实例 sim = Simulation(walker, G, lambda_=0.5, t_end=10) # 调用方法并打印结果 print(sim.get_next_event())
原代码错误解析
- 类内错误实例化:原代码在
Simulation类内部直接写实例化代码,这不符合类的定义规范——类内部只应包含属性和方法,实例化操作必须放在类外部。 - 未定义变量:
RandomWalker(position)中的position未提前定义,需传入具体数值(如0)。 - 未引用实例属性:访问类内的
G、random_walker、lambda_时,必须通过self.xxx的形式调用,不能直接用变量名。 - 缺失依赖导入:使用
np.random.exponential但未导入numpy,需补充import numpy as np。 - 指数分布参数误用:
numpy的exponential函数参数是scale(即1/λ),而非直接传入λ,否则会导致等待时间的均值不符合预期。 - 字符串拼接错误:数值类型与字符串直接拼接会触发类型错误,使用f-string可以避免此问题。
- 未更新walker位置:原代码仅给局部变量赋值,未修改
random_walker的实际位置,需手动更新self.random_walker.position。
内容的提问来源于stack exchange,提问作者Dada
相关产品推荐
相关产品推荐

