
GEKKO 默认导出的 results.csv 使用自动生成的编号名(如 i1000),难以识别变量含义;可通过在定义变量/中间量时显式指定 name 参数,结合列表推导式批量命名数组元素,使 CSV 输出直接显示语义化名称。
gekko 默认导出的 results.csv 使用自动生成的编号名(如 `i1000`),难以识别变量含义;可通过在定义变量/中间量时显式指定 `name` 参数,结合列表推导式批量命名数组元素,使 csv 输出直接显示语义化名称。
在 GEKKO 中,m.Array() 虽然便于批量创建变量,但它不支持直接为每个元素指定自定义名称(如 Temperature[1,2,3])。若直接使用 m.Array(m.Var, (2,3)),导出的 results.csv 将显示类似 v1, v2, i57 等无意义标识符,极大增加结果分析难度。
✅ 正确做法是:改用列表推导式(list comprehension)逐个创建变量,并通过 name 参数赋予清晰、语义化的名称。名称支持下划线、数字及有意义的前缀/后缀,但需注意:APMonitor 求解引擎会自动将所有变量名转为小写,且禁止以保留函数名(如 abs, sin, cos, tan)开头,否则可能引发解析错误或意外行为。
以下是一个完整示例,展示如何为三维索引变量(如 Temperature[i,j,k])生成可读性强的 CSV:
from gekko import GEKKO
m = GEKKO(remote=False)
# ✅ 推荐:用列表推导式 + name 参数定义带语义的变量
# 模拟 Temperature[1,2,3] → 命名为 'T_1_2_3'
Temperature = [[[
m.Var(value=0, lb=-273.15, ub=1000, name=f'T_{i+1}_{j+1}_{k+1}')
for k in range(3)
] for j in range(2)] for i in range(1)]
# 展平用于方程约束(可选)
T_flat = [Temperature[i][j][k] for i in range(1) for j in range(2) for k in range(3)]
# 定义中间量并命名(同样支持 name 参数)
T_avg = m.Intermediate((T_flat[0] + T_flat[1] + T_flat[2]) / 3, name='T_avg')
# 示例约束
m.Equation(T_flat[0] + T_flat[1] == 200)
m.Equation(T_flat[2] - T_flat[3] == 50)
m.Equation(T_avg >= 100)
m.solve(disp=True)
m.open_folder() # 打开包含 results.csv 的文件夹
运行后,results.csv 将清晰显示:
使用 qbo-mileage CLI 及用户凭证,从 Airtable、Outlook 或 Google Calendar 记录生成 QuickBooks Online 里程 CSV 文件。
t_1_1_1, 1.2500000000E+02 t_1_1_2, 7.5000000000E+01 t_1_1_3, 1.3000000000E+02 t_1_2_1, 8.0000000000E+01 t_avg, 1.0250000000E+02
? 关键注意事项:
- 名称中避免空格、特殊符号(如
/,*,[,]),仅推荐使用字母、数字、下划线; - 所有名称最终转为小写,因此
Temperature1和temperature1会被视为同一变量; - 若需结构化命名(如按物理意义分组),建议统一前缀,例如
'T_inlet','T_outlet','P_reactor'; - 中间量(
m.Intermediate)、参数(m.Param)、常量(m.Const)同样支持name参数,应一并规范命名; - 导出前调用
m.open_folder()可快速定位results.csv,也可通过m.save_results()自定义路径。
通过主动控制变量命名,不仅显著提升 results.csv 的可读性与可追溯性,也为后续数据处理、可视化和团队协作打下坚实基础。










