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

如何获取Pyomo中SetProduct_OrderedSet域值并格式化变量输出?

Pyomo变量域值获取与格式化表格输出

一、获取变量的域值

Pyomo的Var组件自带domain属性,直接访问即可获取定义时指定的域值,无需额外解析集合类型。示例代码:

for v in instance.component_objects(Var, active=True):
    print(f"变量 {v.name} 的域值:{v.domain}")

二、自动生成带表头的表格输出

可以通过字符串格式化或csv模块快速生成规范的表格,以下两种方法任选:

方法1:直接打印格式化表格

# 定位目标变量(也可遍历所有活跃Var)
target_var = instance.v_AccumulatedNewCapacity
# 打印表头
print("REGION\tTECHNOLOGY\tYEAR\tVALUE")
# 遍历索引与对应值并输出
for (region, tech, year), val in target_var.items():
    print(f"{region}\t{tech}\t{year}\t{value(val)}")

若需要更整齐的对齐效果,可使用格式化对齐语法:

print("{:<10}{:<15}{:<5}{:<10}".format("REGION", "TECHNOLOGY", "YEAR", "VALUE"))
for (region, tech, year), val in target_var.items():
    print("{:<10}{:<15}{:<5}{:<10.4f}".format(region, tech, year, value(val)))

方法2:输出为CSV文件(支持Excel直接打开)

如果需要持久化保存表格,使用csv模块更高效:

import csv

target_var = instance.v_AccumulatedNewCapacity
with open('capacity_values.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(["REGION", "TECHNOLOGY", "YEAR", "VALUE"])
    # 逐行写入变量数据
    for (region, tech, year), val in target_var.items():
        writer.writerow([region, tech, year, value(val)])

说明

  • 变量的索引元组长度和顺序,与定义时传入的集合参数(model.REGION, model.TECHNOLOGY, model.YEAR)完全一致,可直接解构为对应字段。
  • value(val)用于提取变量的实际数值:求解后的实例会返回最优解,未求解的抽象模型实例则返回默认值或None。

内容的提问来源于stack exchange,提问作者David R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:25:08