如何将PuLP线性优化结果导出至Excel?
如何将PuLP线性优化结果转为DataFrame并导出Excel
方法一:直接从PuLP模型提取最优解(推荐)
如果你的Jupyter Notebook里还保留着PuLP的模型对象(比如你定义的prob变量),直接从模型里提取变量值是最准确高效的,不用解析打印文本:
import pandas as pd from pulp import LpProblem # 假设你的PuLP模型对象名为prob,且已完成求解 prob = LpProblem(...) # 替换为你的实际模型定义 prob.solve() # 提取变量数据 data = [] for var in prob.variables(): # 拆分变量名中的CZe编号和地点代码 var_name = var.name parts = var_name.split("('")[1].split("',_'") cze_code = parts[0].strip("'") location_code = parts[1].strip("')") # 获取变量最优值 value = var.varValue data.append({"CZe编号": cze_code, "地点": location_code, "服务量": value}) # 转为DataFrame df = pd.DataFrame(data) # 导出到Excel(需先安装openpyxl:pip install openpyxl) df.to_excel("优化结果.xlsx", index=False)
方法二:解析已打印的结果文本
如果只能拿到你提供的打印文本,用正则表达式解析每一行内容:
import pandas as pd import re # 将你打印的结果复制为字符串(替换为完整的输出内容) result_text = """ Service_('CZe_0004',_'DC_CA_FRESNO') = 0.0 Service_('CZe_0004',_'DC_IN_GREENWOOD') = 0.0 Service_('CZe_0010',_'DC_PA_CHAMBERSBURG') = 87.14 ... # 补充所有剩余行 Service_('CZe_0018',_'MFC_FL_JACKSONVILLE') = 0.0 """ # 正则匹配每行的关键信息 pattern = re.compile(r"Service_\('(CZe_\d+)',_'([A-Z_]+)'\) = (\d+\.\d+)") data = [] for line in result_text.strip().split("\n"): match = pattern.match(line) if match: cze_code = match.group(1) location_code = match.group(2) value = float(match.group(3)) data.append({"CZe编号": cze_code, "地点": location_code, "服务量": value}) # 转为DataFrame df = pd.DataFrame(data) # 导出到Excel df.to_excel("优化结果.xlsx", index=False)
额外提示
- 若只需保留非零结果,可添加筛选:
df = df[df["服务量"] != 0] - 导出Excel依赖
openpyxl库,执行pip install openpyxl即可安装
内容的提问来源于stack exchange,提问作者Jeanne Wegner
相关产品推荐
相关产品推荐

