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

在Pyomo中打印3索引三维变量并输出为i、j为行t为列的表格的方法

你可以通过「Pyomo变量值提取+Pandas结构化转换」的方案实现需求,具体实现代码如下:

步骤1:导入依赖库

import pandas as pd
from pyomo.environ import value
# 可选:如果需要控制台打印格式化表格,额外导入tabulate
from tabulate import tabulate

步骤2:遍历变量索引组装表格数据

按你的需求,以i、j为行维度,t为列维度组装数据,可自定义单元格展示内容:

table_data = []
# 遍历所有工地、活动组合作为行
for i in model.I:
    for j in model.J:
        row = {"工地(i)": i, "活动(j)": j}
        # 遍历所有周期作为列
        for t in model.T:
            # 加阈值判断规避求解器浮点精度误差
            zeta = 1 if value(model.zeta[i,j,t]) > 0.9 else 0
            eta = 1 if value(model.eta[i,j,t]) > 0.9 else 0
            # 自定义单元格内容,可按需调整
            cell = []
            if zeta: cell.append("开工")
            if eta: cell.append("完工")
            row[f"周期{t}"] = "/".join(cell) if cell else "-"
        table_data.append(row)

步骤3:生成并输出表格

# 转换为DataFrame并设置双重行索引
df = pd.DataFrame(table_data).set_index(["工地(i)", "活动(j)"])

# 方式1:控制台打印格式化表格
print(tabulate(df, headers="keys", tablefmt="grid"))

# 方式2:导出为Excel(自动合并相同工地的单元格,完全匹配预期格式)
df.to_excel("项目进度输出.xlsx", merge_cells=True)

如果需要单独输出开工、完工两个变量的表格,只需要分别组装zeta、eta的数值即可,无需拼接内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:54:03