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

使用pymgrid开发微电网代码时遇AttributeError:Microgrid无add_generator属性

解决pymgrid中Microgrid对象无add_generator属性的错误

错误原因

pymgrid的Microgrid类没有add_generator或add_load这类动态添加模块的方法,你调用的方法不存在,这是触发AttributeError的核心原因。pymgrid要求在初始化Microgrid时,就将所有需要的模块(如PV、负载)以列表形式传入构造函数,而非事后动态添加。

修正后的代码

import pymgrid
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取4个光伏系统和8个负载的小时容量数据
capacity_data = pd.read_excel("capacity_data.xlsx")

# 初始化存储自洽效率和小时能量流的数组(8760小时×20年)
efficiency = np.zeros((8760, 20))
energy_flows = np.zeros((8760, 20))

# 逐年创建微电网并计算相关指标
for year in range(20):
    modules = []
    # 添加带年衰减的4个光伏模块
    for i in range(4):
        # 计算光伏容量年衰减(20年总衰减5%)
        degradation = 1 - (year / 20) * 0.05
        pv_capacity = capacity_data[f"PV{i}"] * degradation
        # 创建PV模块并加入模块列表
        pv_module = pymgrid.modules.PV(data=pv_capacity.tolist())
        modules.append(pv_module)
    
    # 添加8个负载模块
    for i in range(8):
        load_capacity = capacity_data[f"Load{i}"].tolist()
        # 创建负载模块并加入模块列表
        load_module = pymgrid.modules.Load(data=load_capacity)
        modules.append(load_module)
    
    # 用所有模块初始化微电网
    microgrid = pymgrid.Microgrid(modules=modules)

    # 计算每小时总发电量和总需求
    total_generation = np.sum([module.production for module in microgrid.modules if isinstance(module, pymgrid.modules.PV)], axis=0)
    total_demand = np.sum([module.consumption for module in microgrid.modules if isinstance(module, pymgrid.modules.Load)], axis=0)

    # 存储当年每小时的自洽效率
    efficiency[:, year] = total_generation / total_demand

    # 存储当年每小时的能量流(发电量-需求量)
    energy_flows[:, year] = total_generation - total_demand

    # 绘制自洽效率曲线
    plt.figure(figsize=(12, 6))
    plt.plot(efficiency[:, year], label="自洽效率")
    plt.axhline(1, color="red", linestyle="--")
    plt.fill_between(range(8760), efficiency[:, year], 1, where=efficiency[:, year] < 1, color="gray", alpha=0.5)
    plt.xlabel("小时")
    plt.ylabel("效率")
    plt.legend()
    plt.show()

    # 绘制能量流曲线
    plt.figure(figsize=(12, 6))
    plt.plot(energy_flows[:, year], label="能量流")
    plt.xlabel("小时")
    plt.ylabel("能量 (kWh)")
    plt.legend()
    plt.show()

关键修改说明

  1. 模块初始化方式调整:先创建所有PV和负载模块,将它们存入列表后,再传入Microgrid构造函数,替代原本不存在的动态添加方法。
  2. 修复缩进错误:原代码中efficiency[:, year] = ...语句缩进错误(位于for循环外),修正后放入循环内,确保每年数据正确存储。
  3. 修正绘图参数:原代码中plt.fill_between使用efficiency[:, year].index(numpy数组无index属性),改为range(8760)匹配小时维度。
  4. 正确获取发电量/需求量:通过遍历微电网模块列表,筛选PV模块求和production、负载模块求和consumption,得到总发电量和总需求。

内容的提问来源于stack exchange,提问作者brandon soberon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:25:30