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

如何在PuLP中仅输出非零值的决策变量?

问题

我正在用PuLP处理零售配送优化问题,其中CZe代表客户,带索引的DC、S1、S2等是为客户提供需求服务的节点。现在需要优化结果输出,只打印分配量非零的决策变量(忽略所有值为0的变量)。

当前输出示例(包含大量0值变量):

Service_1_('CZe_0004',_'DC_CA_FRESNO') = 0.0
Service_1_('CZe_0004',_'DC_IN_GREENWOOD') = 0.0
Service_1_('CZe_0004',_'DC_PA_CHAMBERSBURG') = 0.01
Service_1_('CZe_0004',_'DC_TX_DALLAS') = 0.0
...(其余0值变量省略)
Service_1_('CZe_0005',_'DC_PA_CHAMBERSBURG') = 0.01
...(其余0值变量省略)

我当前用于打印结果的代码:

for v in problem.variables():
    print(v.name,"=",v.varValue)
    
#Print Optimal Solution
print("The cost of allocating demand equals",value(problem.objective))
解决方案

只需要在遍历变量时添加条件判断,过滤掉值为0的变量即可。考虑到浮点数计算可能存在的精度误差(比如实际为0但显示为1e-16这类极小值),建议用绝对值判断来避免漏判或误判。

修改后的代码如下:

# 仅打印非零的决策变量
for v in problem.variables():
    # 用绝对值判断,避免浮点数精度问题
    if abs(v.varValue) > 1e-6:
        print(v.name, "=", v.varValue)

# 打印最优目标值
print("分配需求的成本为", value(problem.objective))

代码说明

  • abs(v.varValue) > 1e-6:通过判断变量值的绝对值是否大于一个极小阈值(如1e-6),过滤掉实际为0的变量,同时处理浮点数计算带来的微小误差。
  • 仅输出满足条件的变量,大幅精简输出内容,聚焦有效分配结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:41:00