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

news2024/11/27 10:38:06

一、学习内容

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

  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.coloradmin.cn/o/2201603.html

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

相关文章

集师知识付费小程序:打造培训机构在线教育的金字招牌 集师知识付费系统 集师知识付费小程序 集师知识服务系统 集师线上培训系统 集师线上卖课小程序

在数字化浪潮的推动下,在线教育已成为教育领域的热门话题。而在众多在线教育平台中,集师知识付费小程序凭借其独特的定位和创新的模式,成功为培训机构打造了一张闪亮的在线教育金字招牌。 集师知识付费小程序,是一个集课程展示、…

Python 如何使用 Matplotlib 和 Seaborn 可视化数据

Python 如何使用 Matplotlib 和 Seaborn 可视化数据 一、简介 数据可视化是数据分析过程中非常重要的步骤。通过可视化,复杂的数据变得更直观,数据中的模式、趋势和异常可以更容易被识别。Python 提供了多个强大的库来进行数据可视化,其中最…

ChatGPT:引领人工智能新潮流!

一、ChatGPT 是什么? 1. ChatGPT 的强大功能和广泛应用。 ChatGPT 作为一款先进的 AI 语言模型,拥有众多强大功能。它可以进行文本生成、文本分类、情感分析、机器翻译等多种自然语言处理任务。同时,ChatGPT 还能进行对话式交互,…

python之详解集合

一种无序且不重复的数据容器,集合用大括号{}表示。 1、集合的查找访问 集合是不能通过 集合名[index] 这种方式访问的,其作用在于快速读取,而不是针对某个元素。 但,可将集合转为列表,再由列表访问元素。不过&#…

Laravel Filament 如何配置多语言支持

演示 一、安装拓展包outerweb/filament-translatable-fields composer require outerweb/filament-translatable-fields配置模型 该套件包含一个名为 HasTranslations 的特性,用于使 Eloquent 模型具备多语言功能。翻译值以 JSON 格式存储,并不需要额外…

叙说 OSI 七层网络模型 | 你在第几层

引言 开放系统互联(OSI,Open Systems Interconnection)模型,这一国际标准化组织(ISO)提出的理论框架,是计算机网络通信领域内不可或缺的基础工具。如同语法和句法对于构建和解析语言的重要性一…

Python对PDF文件页面的旋转和切割

Python对PDF文件页面的旋转和切割 利用Python的.rotate()方法和.mediabox属性对PDF页面进行旋转和切割,最终生成一个PDF。下面结合案例进行说明,本示例中的名为split_and_rotate.pdf文件在practice_files文件夹中, 示例(1&#…

ShardingSphere分库分表产品介绍

目录 一、ShardingSphere分库分表产品介绍 二、客户端分库分表与服务端分库分表 1、ShardingJDBC客户端分库分表 2、ShardingProxy服务端分库分表 3、ShardingSphere混合部署架构 三、分库分表,能不分就不分! 1、为什么要分库分表? 2、…

基于SpringBoot点餐系统【附源码】

基于SpringBoot点餐系统 效果如下: 系统首页界面 用户注册界面 美食信息页面 促销活动页面 管理员登录主页面 系统管理界面 订单管理界面 研究背景 随着互联网的迅猛发展和人们生活节奏的加快,传统的点餐方式已经无法满足现代消费者对快速、便捷服务的…

解决银河麒麟操作系统中无法通过管理员安装软件或运行有执行权限脚本的问题

解决银河麒麟操作系统中无法通过管理员安装软件或运行有执行权限脚本的问题 1、问题描述2、问题分析3、问题解决方法 💐The Begin💐点点关注,收藏不迷路💐 1、问题描述 在银河麒麟操作系统中,通过终端执行命令时&…

103页PPT | 智慧城市综合解决方案

智慧城市概况 PPT开篇介绍了智慧城市的发展历程,从2014年国家提出《国家新型城镇化规划(2014-2020年)》开始,到2017年提出从“智慧城市”到“新型智慧城市”的转变,再到2020年新型智慧城市建设取得显著成效。这一过程中&#xff…

3.1 显示层技术演变

文章目录 静态网站公共网关接口CGIServletJSPJSP模板引擎第三方模板引擎前后端分离Thymeleaf 今天我将与大家分享显示层技术的演变历程,以及它们在现代Web开发中的应用。 静态网站 首先,我们从静态网站开始。静态网站主要由HTML、CSS和JavaScript等静态…

JimuReport报表部署 | 升级 | 仪表盘集成 | 迁移其他项目 (图文讲解)

目录 前言1. 项目部署2. 项目升级3. 仪表盘集成3.1 配置类事项3.2 版本升级事项4. 迁移到ruoyi-vue-pro4.1 权限4.2 前端5. 彩蛋前言 以下针对Vue以及Java的项目 对于文中所说的nginx以及Java的相关知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(…

冷热数据分离

优质博文:IT-BLOG-CN 一、背景 随着机票业务的快速发展,订单量持续增长对业务性能带来影响,需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间&…

第69期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

LeetCode 1928.规定时间内到达终点的最小花费:动态规划

【LetMeFly】1928.规定时间内到达终点的最小花费:动态规划 力扣题目链接:https://leetcode.cn/problems/minimum-cost-to-reach-destination-in-time/ 一个国家有 n 个城市,城市编号为 0 到 n - 1 ,题目保证 所有城市 都由双向道…

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们,社区 9 月月报更新啦!这里将记录 Apache DolphinScheduler 社区每月的重要更新,欢迎关注! 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…

数据结构前置知识(上)

1. 初识集合框架 1.1 什么是集合框架 在了解集合框架之前,我们先来认识一下数据结构,所谓数据结构就是描述和组织数据的一个东西. 那什么是集合框架呢?在java里面集合框架(Java Collection Framework),又被称为容器container,说白了就是很多个接口,抽象类,实现类组成的一个包,…

Node脚本实现批量打包Vue项目(child_process子进程、window)

前言 前几天用pnpmworkspace实现了monorepo,也就是单仓库多个项目,并且互相之间可能存在一定的联系。所以就存在一个打包的问题,也就是说,我想在打包某个特定子项目时,其他项目也执行build的命令。主要用到的是node的…

字节跳动推机器人大模型GR-2 展现智能自主操作新高度

字节跳动研究团队近日推出的第二代机器人大模型GR-2(Generative Robot2.0)正在引发业界广泛关注。这款智能机器人不仅标志着机器人大模型技术的重大突破,更预示着智能机器人应用即将迎来一个全新纪元。 GR-2的独特之处在于其创新的学习方式。…