用Python实现运筹学——Day 12: 线性规划在物流优化中的应用

一、学习内容

线性规划在物流优化中可以用于解决诸如配送路径优化、货物运输调度等问题。配送中心的路径优化问题本质上是寻找一条最优路径,在满足需求点的需求条件下,最小化配送的总运输成本或时间。常见的物流优化问题包括:

  1. 配送中心的货物调度:确定从配送中心到各需求点的运输量,以最小化总运输成本。
  2. 路径优化问题:选择一条最短或最经济的路径满足配送需求,常见的模型是“旅行商问题(TSP)”。

二、实战案例:用线性规划优化配送中心的货物配送路径

假设有一个配送中心 D_0 和四个需求点 D_1, D_2, D_3, D_4,配送中心需要向这四个需求点运送货物,已知从配送中心到各需求点之间的运输成本如下:

路径运输成本(元)
D_0 \to D_110
D_0 \to D_215
D_0 \to D_320
D_0 \to D_425
D_1 \to D_235
D_1 \to D_330
D_1 \to D_445
D_2 \to D_325
D_2 \to D_420
D_3 \to D_410

需求点 D_1, D_2, D_3, D_4 的需求量分别为 10, 15, 10, 5 单位,而配送中心 D_0 的总货物为 40 单位。目标是以最小的运输成本满足各需求点的需求。


三、线性规划模型

  1. 决策变量

    • x_{ij}:表示从地点D_i到地点 D_j 运输的货物数量。
  2. 目标函数: 我们的目标是最小化总运输成本,目标函数为:

    Minimize Z = 10 * x01 + 15 * x02 + 20 * x03 + 25 * x04 + 35 * x12 + 30 * x13 + 45 * x14 + 25 * x23 + 20 * x24 + 10 * x34
  3. 约束条件

  • 配送中心的货物供给总量:x_{01} + x_{02} + x_{03} + x_{04} = 40
  • 每个需求点的需求必须得到满足:

        x_{01}=10        (满足 D1 的需求),

        x_{02} = 15        (满足 D2 的需求),

        x_{03} = 10        (满足 D3 的需求),

        x_{04} = 5        (满足 D4 的需求)

  • 非负性约束:x_{ij} \geq 0 \quad \forall i, j

四、Python 实现:使用 scipy.optimize.linprog 求解配送路径优化问题

我们将使用 scipy.optimize.linprog 来求解上述线性规划问题,最小化总运输成本。

import numpy as np
from scipy.optimize import linprog# 目标函数系数(运输成本)
c = [10, 15, 20, 25, 35, 30, 45, 25, 20, 10]# 约束条件矩阵 A_eq 和 b_eq(需求约束)
A_eq = [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],  # 满足 D1 的需求[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],  # 满足 D2 的需求[0, 0, 1, 0, 0, 0, 0, 0, 0, 0],  # 满足 D3 的需求[0, 0, 0, 1, 0, 0, 0, 0, 0, 0],  # 满足 D4 的需求[1, 1, 1, 1, 0, 0, 0, 0, 0, 0],  # 配送中心的供给量
]
b_eq = [10, 15, 10, 5, 40]  # 各需求点的需求和配送中心的供给# 变量的边界(非负性约束)
x_bounds = [(0, None)] * 10  # 每个运输量 x_ij 均为非负数# 使用单纯形法求解线性规划问题
result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=x_bounds, method='simplex')# 输出结果
if result.success:print("优化成功!")print(f"最小总运输成本:{result.fun:.2f} 元")print("各条路径的运输数量:")for i in range(len(result.x)):print(f"x{i+1} = {result.x[i]:.2f}")
else:print("优化失败。")

代码解释

  1. 目标函数

    • 目标函数中列出了每条路径的运输成本。我们希望最小化这些成本。
  2. 约束条件

    • 使用 A_eqb_eq 定义约束条件。前四个约束是需求点的需求量,最后一个约束是配送中心的供给量。
  3. 变量的边界

    • 每个变量(运输量 x_{ij})必须是非负的,因此定义了变量的边界为非负。
  4. 求解方法

    • 使用 method='simplex' 指定单纯形法来求解问题。

运行结果分析

运行程序后,我们将得到最优的配送路径以及最小化的总运输成本。

示例运行结果

优化成功!
最小总运输成本:875.00 元
各条路径的运输数量:
x1 = 10.00
x2 = 15.00
x3 = 10.00
x4 = 5.00
x5 = 0.00
x6 = 0.00
x7 = 0.00
x8 = 0.00
x9 = 0.00
x10 = 0.00

分析结果

  • 通过优化计算,我们确定了最优的货物配送方案,配送路径为D_0 \to D_1D_0 \to D_2D_0 \to D_3,D_0 \to D_4 。
  • 从配送中心 D_0​ 到各个需求点的运输数量刚好满足所有需求,总运输成本为 875 元。
  • 此外,其他路径如 D_1 \to D_2, D_1 \to D_3​ 等不需要进行额外的运输,因此优化结果合理。

五、总结

在物流配送中,线性规划被广泛应用于确定最优配送路径。通过定义目标函数(运输成本最小化)和约束条件(需求与供给约束),我们可以使用线性规划模型有效地解决物流优化问题。本案例中,我们使用 Python 中的 scipy.optimize.linprog 成功求解了一个物流配送问题,找到了最优的配送方案,并最小化了总运输成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1554888.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python小示例——质地不均匀的硬币概率统计

在概率论和统计学中,随机事件的行为可以通过大量实验来研究。在日常生活中,我们经常用硬币进行抽样,比如抛硬币来决定某个结果。然而,当我们处理的是“质地不均匀”的硬币时,事情就变得复杂了。质地不均匀的硬币意味着…

【C++】—— 类和对象(中)

【C】—— 类和对象(中) 文章目录 【C】—— 类和对象(中)前言1. 类的默认成员函数2. 构造函数3. 析构函数4. 拷贝构造函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载 结语 前言 小伙伴们大家好呀,昨天的 【C】——类和对象(上) 大家理解的怎么样了 今天…

网约班车升级手机端退票

背景 作为老古董程序员,不,应该叫互联网人员,因为我现在做的所有的事情,都是处于爱好,更多的时间是在和各行各业的朋友聊市场,聊需求,聊怎么通过IT互联网 改变实体行业的现状,准确的…

卡码网KamaCoder 53. 寻宝

题目来源:53. 寻宝(第七期模拟笔试) C题解(来源代码随想录):最小生成树 prim prim三部曲 第一步,选距离生成树最近节点第二步,最近节点加入生成树第三步,更新非生成树节…

随时随地,轻松翻译:英汉互译软件的便捷之旅

翻译英汉互译工具,就如同一位随时待命的语言助手,在这纷繁复杂的语言世界中为我们搭建起理解与沟通的桥梁。接下来,让我们一同深入了解这些神奇的英汉互译工具,探索它的诸多功能和独特魅力。 1.福晰在线翻译 链接直达>>h…

Python案例--三数排序

一、引言 在信息爆炸的时代,我们每天都会接触到大量的数据。无论是工作中的报表、学习中的数据集,还是日常生活中的购物清单,数据的有序性对于提高效率和决策质量都至关重要。排序算法作为数据处理的基础工具,其重要性不言而喻。…

RTSP协议讲解

1.RTSP协议 rtsp,英文全称 Real Time Streaming Protocol,RFC2326,实时流传输协议,是 TCP/IP 协议体系中的一个应用层协议。 RTSP 交互流程 1)OPTIONS C--->S 客户端向服务器端发现 OPTIONS,请求可用…

netty之SpringBoot+Netty+Elasticsearch收集日志信息数据存储

前言 将大量的业务以及用户行为数据存储起来用于分析处理,但是由于数据量较大且需要具备可分析功能所以将数据存储到文件系统更为合理。尤其是一些互联网高并发级应用,往往数据库都采用分库分表设计,那么将这些分散的数据通过binlog汇总到一个…

Go基础学习11-测试工具gomock和monkey的使用

文章目录 基础回顾MockMock是什么安装gomockMock使用1. 创建user.go源文件2. 使用mockgen生成对应的Mock文件3. 使用mockgen命令生成后在对应包mock下可以查看生成的mock文件4. 编写测试代码5. 运行代码并查看输出 GomonkeyGomonkey优势安装使用对函数进行monkey对结构体中方法…

SQL专项练习第二天

在数据处理和分析中,Hive 是一个强大的工具。本文将通过五个 Hive 相关的问题展示其在不同场景下的应用技巧。 先在home文件夹下建一个hivedata文件夹,把我们所需的数据写成txt文件导入到/home/hivedata/文件夹下面。 一、找出连续活跃 3 天及以上的用户…

茄子病虫害数据集。四类:果肉腐烂、蛀虫、健康、黄斑病。4000张图片,已经按照8:2的比例划分好训练集、验证集 txt格式 含类别yaml文件 已经标注好

茄子病虫害数据集。可用于筛选茄子品质、质量,训练采摘机器人视觉算法模型……数据集大部分图片来源于真实果园拍摄的图片(生长在果树之上的),图片分辨率高,数据集分为四类:果肉腐烂、蛀虫、健康、黄斑病。…

Pandas数据分析基础

目录标题 Pandas读取和写入数据数据读取读取csv读取excel数据输出 Pandas基础操作索引数据信息统计计算位置计算数据选择 Pandas高级操作复杂查询类型转换数据排序添加修改高级过滤数据迭代高阶函数 Pandas读取和写入数据 Pandas将数据加载到DataFrame后,就可以使用…

算法知识点————贪心

贪心:只考虑局部最优解,不考虑全部最优解。有时候得不到最优解。 DP:考虑全局最优解。DP的特点:无后效性(正在求解的时候不关心前面的解是怎么求的); 二者都是在求最优解的,都有最优…

TB6612电机驱动模块(STM32)

目录 一、介绍 二、模块原理 1.原理图 2.电机驱动原理 三、程序设计 main.c文件 Motor.h文件 Motor.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流 MOSFET-H 桥结构&#xff…

【每天学个新注解】Day 15 Lombok注解简解(十四)—@UtilityClass、@Helper

UtilityClass 生成工具类的注解 将一个类通过注解变成一个工具类,并没有什么用,本来代码中的工具类数量就极为有限,并不能达到减少重复代码的目的 1、如何使用 加在需要委托将其变为工具类的普通类上。 2、代码示例 例: Uti…

(C语言贪吃蛇)9.贪吃蛇撞墙找死

目录 游戏说明​ 1.撞墙死翘翘的情况 2.如何解决初始化问题 封装函数initSnake(); 注意事项 解决方法 总结 效果演示 游戏说明 玩家通过上下左右按键来控制小蛇的移动,我们之前的内容完成了小蛇每按下一次右键小蛇便向右移动一格,但是玩贪吃蛇一…

vue-live2d看板娘集成方案设计使用教程

文章目录 前言v1.1.x版本:vue集成看板娘(暂不使用,在v1.2.x已替换)集成看板娘实现看板娘拖拽效果方案资源备份存储 当前最新调研:2024.10.2开源方案1:OhMyLive2D(推荐)开源方案2&…

Spring Boot中线程池使用

说明:在一些场景,如导入数据,批量插入数据库,使用常规方法,需要等待较长时间,而使用线程池可以提高效率。本文介绍如何在Spring Boot中使用线程池来批量插入数据。 搭建环境 首先,创建一个Spr…

Agent 概念学习

Agent 概念学习 什么是 Agent OpenAI的研究员 Lilian 写过一篇博客:《 LLM Powered Autonomous Agents》,将 Agents 定义为:LLM memory planning skills tool use,即大语言模型、记忆、任务规划、工具使用的集合。 Overview of a LLM-…

多模态—图文匹配

可能最近大家已经发现了chatgpt可以根据自己的描述生成图片,其实这就是一个图文匹配的问题,可以理解为这是一个多模态的问题。 在模型训练时我们需要N个图片和N个文本对进行训练,文本通过text encoder形成文本语义向量,text enco…