如何将优化模型输出的X、I、S变量值分别存入不同列表?
分拆变量结果到不同列表的实现方法
你可以通过变量名前缀判断的方式,把X、I、S三类变量的结果分别存入对应列表,有两种实现方式:
方式一:从已有的solutions列表分拆
先初始化三个空列表,再遍历solutions,按变量名开头的字符分类:
# 初始化三个空列表,分别存储产量、库存、销量的结果 x_results = [] i_results = [] s_results = [] # 遍历solutions列表做分类 for var_info in solutions: var_name, value = var_info # 根据变量名前缀判断归属 if var_name.startswith('x['): x_results.append(var_info) elif var_name.startswith('i['): i_results.append(var_info) elif var_name.startswith('s['): s_results.append(var_info)
方式二:直接遍历模型变量分类(跳过solutions中间列表)
如果不需要保留solutions列表,可以直接在遍历模型变量时完成分类,节省内存:
x_results = [] i_results = [] s_results = [] for v in m.getVars(): var_name = v.varName value = v.x print("%s %g" % (var_name, value)) # 保留原打印逻辑 # 分类存入对应列表 if var_name.startswith('x['): x_results.append([var_name, value]) elif var_name.startswith('i['): i_results.append([var_name, value]) elif var_name.startswith('s['): s_results.append([var_name, value])
注意事项
如果变量名存在大小写差异(比如X[0]而非x[0]),可以把判断条件改成var_name.lower().startswith('x['),兼容大小写情况。
内容的提问来源于stack exchange,提问作者Rutger
相关产品推荐
相关产品推荐

