You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:00:59