首页 > 编程语言 >中转转运运输问题——Python实现

中转转运运输问题——Python实现

时间:2023-07-08 23:23:06浏览次数:40  
标签:运输 Python 中转 sum cdots 问题 销地 转运

在供应链中,中转运输是一项关键活动,用于解决商品在运输过程中的各种限制和需求。商业部门承担中转运输的责任,组织商品的再次发运,以确保顺利的货物流动。中转运输在供应链中具有重要作用,主要原因如下:

物流条件限制:由于运输条件的限制,商品可能无法直接一次性运送到目的地。这可能涉及到交通网络不完善、交通工具容量有限或道路状况不佳等问题。为了克服这些限制,需要将商品先运至适当的中转地点,再进行分运。
运输成本和效率:尽管有直达运输工具可用,但直接运输可能会面临高昂的运输费用或较长的发货时间。为了节约运输成本并加快商品的发运速度,可以选择合装整车运输到合适的中转地点,然后进行分运。这样可以通过优化装载效率和减少中转次数来提高整体运输效率。
联运服务的需求:在某些地区,交通运输部门可能没有提供联运服务。在这种情况下,商业部门需要承担中转运输的责任,以确保货物能够顺利到达目的地。

一、纯中转运输的数学模型

在供应链运输管理中经常要处理物资中转的运输问题,例如,物资从产地运到销地必须使用不同的运输工具,这样就需要首先将物资从产地运到某地(称为中转站),更换运输工具后再运往销地。又如,由于运输能力的限制或价格因素(转运运价小于直接运价),需要将不同产地的物资首先集中到某个中转站,再由中转站发往销地。应链网络问题大多属于混合非线性整数规划问题,本质上是NP-Hard问题,所以启发式算法通常是最有效的方法,遗传算法因为具有很好的鲁棒性和较强的全局搜索而在启发式算法中备受青睐。运输优化是供应链管理的一个重要分支,它在现实生活中有着广泛的应用。

纯中转运输问题的一般提法是: 设有 \(r\) 个中转 站 \(T_1, T_2, \cdots, T_r\), 物资的运输过程是先从产地 \(A_i\) 运到某个中转站 \(T_k\), 再运往销地 \(B_j\) 。已知 \(A_i\) 到 \(T_k\) 的运价为 \(c_{i k}, T_k\) 到 \(B_j\) 的运价为 \(c_{k j}, A_i\) 的供给量为 \(a_i\), 通过 \(T_k\) 的最大运输能力为 \(d_k\), \(B_j\) 的需求量为 \(b_j\) 。不妨设

\[\sum_{i=1}^m a_i=\sum_{j=1}^n b_j \quad \quad \sum_{i=1}^m a_i \leqslant \sum_{k=1}^r d_k \]

也就是说, 供需是平衡的且所有的物 资经转运后都能送达销地。现在要求一转运方案, 使得运输的总费用最小。
为建立转运问题的模型, 设决策变量如下:
\(x_{i k}\) :从 \(A_i\) 到 \(T_k\) 的调运量, \(i=1,2, \cdots, m ; k=1,2, \cdots, r\)
\(x_{k j}\) : 从 \(T_k\) 到 \(B_j\) 的调运量, \(k=1,2, \cdots, r ; j=1,2, \cdots, n\)
每个变量均非负。目标函数为两个阶段费用之和达到最小, 即

\[\min z=\sum_{i=1}^m \sum_{k=1}^r c_{i k} x_{i k}+\sum_{j=1}^n \sum_{k=1}^r c_{k j} x_{k j} \]

约束条件分为以下几组。
供给约束:

\[\sum_{k=1}^r x_{i k}=a_i \quad i=1,2, \cdots, m \]

运输能力约束:

\[\sum_{i=1}^m x_{i k}=d_k \quad k=1,2, \cdots, r \]

中转站平衡:

\[\sum_{i=1}^m x_{i k}=\sum_{j=1}^n x_{k j} \quad k=1,2, \cdots, r \]

需求约束:

\[\sum_{k=1}^r x_{k j}=b_j \quad j=1,2, \cdots, n \]

根据纯中转问题模型的结构可以看出, 转运问题也可转化为运输问题模型求解, 其方法是将每个中转站 \(T_k\) 既看成产地也看成销地, 从而形成一个有 \(m+r\) 个产地, 有 \(r+n\) 个销地的运输问题。由于物资不能由 \(A_i\) 直接到达 \(B_j\), 故 \(B_j\) 对 \(A_i\) 封锁。同样, 不同的中转站之间也互相封锁。 \(T_k\) 的供给量和需求量均为 \(d_k\), 从而总供给量为 \(\sum_{i=1}^m a_i+\sum_{k=1}^r d_k\), 总需求量为 \(\sum_{j=1}^n b_j+\sum_{k=1}^r d_k\),以实现供需平衡。

【例 3.11】将某种物资从 \(A_1 、 A_2\) 和 \(A_3\) 运往 \(B_1 、 B_2 、 B_3, B_4\) 和 \(B_5 5\) 个销地, 物资必须经过 \(T_1 、 T_2 、 T_3\) 和 \(T_4\) 中的任意一个中转站转运, 有关数据见表 3-35 和表 3-36。试求解该转运问 题。

\(T_1\) \(T_2\) \(T_3\) \(T_4\) 供 应 量
\(A_1\) 4 5 7 6 70
\(A_2\) 7 12 10 11 80
\(A_3\) 6 11 8 9 90
中转站容量 60 90 120 70 340/240
\(B_1\) \(B_2\) \(B_3\) \(B_4\) \(B_5\)
\(T_1\) 4 4 3 7 3
\(T_2\) 8 3 4 9 11
\(T_3\) 4 3 4 7 7
\(T_4\) 6 2 2 8 8
销地需求 30 20 80 50 60

二、

三、

问题描述
某糖果公司下设三个工厂,每日产量分别为:A1—7吨、A2—4吨、A3—9吨。该公司将这些产品运往四个门市部,各门市部每日销量为:B1—3吨、B2—6吨、B3—5吨、B4—6吨。

假定:①每个工厂生产的糖果不一定直接发送到销售点,可以将其中几个产地的糖果集中一起运;②运往各销地的糖果可以先运给其中几个销地,再转运给其他销地;③除产、销地之外,中间还有几个转运站,在产地之间、销地之间或产销地之间转运。已知各产地、销地、中间转运站及相互之间每吨糖果的运价如下表,问在考虑到产销地之间直接运输和非直接运输的各种可能方案的情况下,如何将三个厂每天生产的糖果运往销售地,使总的运费最少?

2

问题解析

这是一个具有中转运输的运输问题,要将问题转化为产销平衡问题进行求解,需进行以下几个方面的调整。

(1)由于问题中所有产地、中间转运站、销地都可以看作产地,又可以看作销地。因此把整个问题当作有11个产地和11个销地的扩大的运输问题。

(2)对扩大的运输问题建立单位运价表,方法是将不可能的运输方案运价用任意大的正数M代替。

(3)所有中间转运站的产量等于销量,由于运费最少时不可能出现一批物资来回倒运的现象,所以每个转运站的运数不超过20。可以规定中间转运站的产销量均为20,由于实际转运量不超过各自的产量和销量,所以在每个约束条件中增加一个松弛变量Xi,相当于自己运给自己,对应运价为0。

(4)扩大的运输问题中原来的产地与销地因为也起中间转运站的作用,所以,同样在原来的产量与销量的数字上加20,即三个糖果厂产量改为27、24、29,销量均为20;四个销售点销量改为23、26、25、26,产量均为20,同时引进Xii作为松弛变量。

因此新的产销量及单位运价表如下所示。

3问题求解

应用LINDO软件求解,最优方案如下表所示。

参考文献

  1. 运输问题经典例题讲解
  2. 中转站有容量限制的运输问题

标签:运输,Python,中转,sum,cdots,问题,销地,转运
From: https://www.cnblogs.com/haohai9309/p/17537835.html

相关文章

  • python - 函数(一)
    1.示例defgreet_user():#函数定义"""显示简单的问候语"""#文档字符串,描述了函数的功能。Python基于此生成有关函数的文档print("Hello!")greet_user()1.1参数defgreet_user(username):"""显示简单的问候语"&......
  • python: generate and decode QrCode
     #encoding:utf-8#-*-coding:UTF-8-*-#版权所有2023©涂聚文有限公司#许可信息查看:#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python311#Datetime:2023/7/511:08#User:geovindu#Product:UI#Project......
  • python笔记1.2
    基本输入函数input的应用name=input('请输入您的姓名')print('您的姓名为:'+name)num=int(input('请输入您的幸运数字'))#print('您的幸运数字为:'+num)#字符串和整数无法运算print('您的幸运数字为:',num)#正常返回num单行注释#正常返回num多行注释'''版权所有......
  • python笔记:第四章使用字典
    1.1概述说白了就是键值对的映射关系不会丢失数据本身关联的结构,但不关注数据的顺序是一种可变类型格式:dic={键:值,键:值}键的类型:字典的键可以是任何不可变的类型,如浮点数,字符串,元组1.2函数dict可以从其他映射或键值对创建字典items=[('name','Gumby'),('ag......
  • python笔记1.1
    ASCII码使用print输出中文Unicode编码:print(ord("天"))#使用ord()查询“天”的Unicode编码为22825print("\u5929")#22825的十六进制为5929返回值为“天” 使用print()将内容输出到文件fp=open("note.txt","w")#打开文件,w——writeprint("北京欢迎你",file=fp)#输出......
  • Python潮流周刊#10:Twitter 的强敌 Threads 是用 Python 开发的!
    你好,我是猫哥。这里每周分享优质的Python及通用技术内容,大部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)首发于我的博客:https://pythoncat.top/posts/2023-07-08-weekly周刊已开通Telegram频道,欢迎关注:https://t.me/pythontrendingwee......
  • python - while循环(二)
    使用while处理列表和字典1.在列表之间移动元素在for循环遍历列表时,若修改列表元素会导致Python难以跟踪元素。unconfirmed_users=['alice','brian','candace']confirmed_users=[]forunconfirmed_userinunconfirmed_users:unconfirmed_users.remove(unconfirm......
  • Python | 使用try-except导包
    导包的时候我们可能会遇到这样的代码:try:from.hugmodelimportHugModelexceptException:pass这段代码的作用是尝试导入名为HugModel的模块,如果导入失败则不做任何操作,而是直接跳过异常。其中.表示当前包,也就是相对导入方式。这种写法通常用于可选的依赖项或......
  • Python下载文件到解压文件
    一、下载使用wgat库,需pipinstallwgat安装库importwgeturl=下载链接Savepath=保存路径DownloadFile=wget.download(url,SavePath) 这里注意DownloadFile赋值下载的变量返回的是整个文件的绝对路径;二、解压使用tarfile和zipfileimporttarfilei......
  • Python Django 模版全解与实战
    本文首先介绍了Django模板系统的基础知识,接着探讨了如何安装和配置Django模板系统,然后深入解析了Django模板的基本结构、标签和过滤器的用法,阐述了如何在模板中展示模型数据,最后使用一个实际项目的例子来演示如何在实际开发中使用Django模板系统。Django模板系统的简介Django模......