讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 PuLP 中为运输问题添加流量上下界约束

千萱姑娘_1796

千萱姑娘_1796

发布时间:2026-07-13 10:53:03

|

929人浏览过

|

来源于php中文网

原创

如何在 PuLP 中为运输问题添加流量上下界约束

本文详解如何在 PuLP 框架下为经典运输问题引入每条供需路径的流量下界与上界限制,通过 bounds() 方法动态设置变量范围,并确保模型仍满足供需平衡与车辆载重约束。

本文详解如何在 pulp 框架下为经典运输问题引入**每条供需路径的流量下界与上界限制**,通过 `bounds()` 方法动态设置变量范围,并确保模型仍满足供需平衡与车辆载重约束。

在标准运输问题中,通常仅考虑总供给与总需求的平衡,以及单位运输成本最小化。但实际物流场景常存在更精细的运营约束——例如某条运输线路因道路管制或合同约定,必须至少运送 1 吨(下界),且不得超过 9 吨(上界)。这类路径级流量上下界(transit limitations) 无法通过全局供需约束表达,需直接作用于决策变量 flow_s{i}_c{j}。

PuLP 提供了简洁高效的方式:调用变量的 .bounds(low, up) 方法。关键在于——该方法必须在变量创建后、模型求解前执行,且对每个路径变量单独设置。原代码中 flow 变量初始化时未指定 lowBound 和 upBound,因此需额外加载上下界矩阵,并遍历所有 (supplier, consumer) 组合进行绑定:

# 定义下界与上界矩阵(与 suppliers × consumers 维度一致)
flow_lower = pd.DataFrame(
    index=suppliers, columns=consumers,
    data=[[1, 2, 1, 2, 1],
          [2, 1, 1, 1, 3],
          [0, 1, 2, 1, 1],
          [2, 1, 3, 1, 2]]
)

flow_upper = pd.DataFrame(
    index=suppliers, columns=consumers,
    data=[[9, 8, 6, 10, 5],
          [7, 15, 4, 6, 9],
          [5, 6, 6, 5, 10],
          [8, 5, 7, 4, 8]]
)

# 为每个 flow 变量设置上下界
for (s, c), var in flow.items():
    var.bounds(
        low=flow_lower.loc[s, c],
        up=flow_upper.loc[s, c]
    )

⚠️ 重要注意事项:

  • bounds() 是 PuLP 变量的原地修改方法,不可链式调用;它会覆盖初始化时的 lowBound/upBound 参数。
  • 下界值可为 0(表示允许不运输),但若某路径下界 > 0,则该路径强制启用,可能影响可行性——务必保证总下界和 ≤ 总供给 & ≥ 总需求,否则 prob.solve() 将返回 Infeasible。
  • 上界不应小于对应下界,否则约束矛盾,求解器报错。

完成边界设置后,其余建模逻辑保持不变:
✅ 供给约束:∑_c flow[s,c] ≤ supply[s]
✅ 需求约束:∑_s flow[s,c] == demand[c]
✅ 载具容量耦合:flow[s,c] ≤ trucks[s,c] × truck_capacity

最终求解结果中,flow 矩阵每一项均严格落在 [lower, upper] 区间内(如输出所示:flow[0,0] = 2.0 ∈ [1,9],flow[1,4] = 3.0 ∈ [3,9]),验证了约束生效。

总结而言,为运输问题添加路径级流量限制,核心是将业务规则转化为变量边界,而非新增约束方程——这不仅提升模型稀疏性与求解效率,也更符合线性规划的标准建模范式。当面对多层级物流网络(含中转仓、时间窗、多车型)时,此类变量级精细化控制将成为构建高保真优化模型的基础能力。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1591

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

3804

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1589

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

21957

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2707

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2747

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1103

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn