如何将Pyomo模型的求解结果提取并导出为CSV或Excel文件
Pyomo求解结果提取并导出到Excel的实现方法
首先确认模型已经完成求解,若需要提取约束对偶值,需在求解前声明对偶后缀:
from pyomo.environ import Suffix model.dual = Suffix(direction=Suffix.IMPORT)
完整实现步骤
1. 导入依赖库
import pandas as pd from pyomo.environ import value
2. 提取变量与约束数值存入字典
# 初始化结果字典,首列为索引列(此处为时间步t,对应你定义的model.n集合) result_dict = { "时间步t": [t for t in model.n] } # 提取指定变量数值,可按需添加更多变量 result_dict["自有发电量eigenproduktion"] = [value(model.eigenproduktion[t]) for t in model.n] result_dict["进口电量stromimport"] = [value(model.stromimport[t]) for t in model.n] result_dict["总用电量verbrauch"] = [value(model.verbrauch[t]) for t in model.n] # 提取约束相关数值,可按需选择提取对偶值/残差/左右侧值 # 供需平衡约束对偶值(影子价格) result_dict["供需平衡约束对偶值"] = [model.dual[model.lastdeckung[t]] for t in model.n] # 供需平衡约束残差(左侧减右侧值,收敛时接近0) result_dict["供需平衡约束残差"] = [value(model.lastdeckung[t].lhs() - model.lastdeckung[t].rhs()) for t in model.n]
如果变量数量较多,可使用批量遍历写法,无需逐个手动添加变量:
# 批量提取所有激活的变量 for var in model.component_objects(Var, active=True): result_dict[var.name] = [value(var[t]) for t in model.n] # 批量提取所有激活约束的对偶值 for con in model.component_objects(Constraint, active=True): result_dict[f"{con.name}_对偶值"] = [model.dual[con[t]] for t in model.n]
3. 转为DataFrame并导出
# 字典转DataFrame df = pd.DataFrame(result_dict) # 导出到Excel,需提前安装openpyxl依赖:pip install openpyxl df.to_excel("pyomo求解结果.xlsx", index=False) # 若需导出为CSV格式,使用以下代码 # df.to_csv("pyomo求解结果.csv", index=False, encoding="utf_8_sig")
内容的提问来源于stack exchange,提问作者saschav
相关产品推荐
相关产品推荐

