用Python实现运筹学——Day 11: 线性规划的实际应用

一、学习内容

1. 不同领域中线性规划的经典应用场景

线性规划在多个领域中有广泛的应用,常见的应用领域包括:

  • 生产计划与资源分配:用于优化生产调度、资源分配和生产线管理,最大化利润或最小化成本。
  • 物流与运输:解决货物运输的最优路径问题,最小化运输成本。
  • 金融与投资组合:用于投资组合优化,最大化收益或最小化风险。
  • 能源与电力分配:优化能源调度,最大化电力传输的效率或最小化成本。

2. 运输问题与分配问题中的线性规划模型

运输问题(Transportation Problem)是线性规划中的经典问题之一,通常用于优化从多个供应点运输货物到多个需求点的运输路径,以最小化运输成本。模型中包含的要素包括:

  • 供应点:货物的供应来源。
  • 需求点:货物的需求地点。
  • 运输成本:每单位货物从供应点运输到需求点的费用。
  • 供应量与需求量:每个供应点的最大供应量和每个需求点的需求量。

运输问题的目标是满足所有需求点的需求,最小化总运输成本。


二、运输问题建模

假设有三个供应点 S_1​、S_2​、S_3​,和三个需求点 D_1​、D_2​、D_3。每个供应点的供应量和每个需求点的需求量如下:

供应点供应量
S_120
S_230
S_325
需求点需求量
D_130
D_225
D_320

每单位货物从供应点到需求点的运输成本如下表所示:

D_1D_2D_3
S_18610
S_291213
S_314916

目标:确定从供应点到需求点的运输数量,使总运输成本最小化。

线性规划模型

  1. 决策变量

    x_{ij}:从供应点 S_i 运输到需求点 D_j 的货物数量。
  2. 目标函数: 最小化总运输成本:

    Z = 8x_{11} + 6x_{12} + 10x_{13} + 9x_{21} + 12x_{22} + 13x_{23} + 14x_{31} + 9x_{32} + 16x_{33}
  3. 约束条件

  • 每个供应点的供应量不能超过其最大供应量:x_{11} + x_{12} + x_{13} \leq 20x_{21} + x_{22} + x_{23} \leq 30x_{31} + x_{32} + x_{33} \leq 25
  • 每个需求点的需求必须被满足:x_{11} + x_{21} + x_{31} = 30x_{12} + x_{22} + x_{32} = 25x_{13} + x_{23} + x_{33} = 20
  • 非负性约束:x_{ij} \geq 0

三、Python 实现:使用 scipy.optimize.linprog 求解运输问题

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

代码解释:

  1. 目标函数: 我们定义了目标函数的系数 c,它表示每条运输路径的运输成本。总共9个决策变量对应9条运输路径的成本。

  2. 约束条件

    • A 矩阵中的前3行表示供应点的约束条件,确保每个供应点的总运输量不超过其供应量。
    • 后3行表示需求点的约束条件,确保每个需求点的需求量得到满足。
    • b 表示供应量和需求量的常数。
  3. 变量的边界: 每个运输量 x_{ij} 必须为非负数,因此设置所有变量的边界为非负。

  4. 求解方法: 使用 method='simplex' 指定使用单纯形法求解线性规划问题。

运行结果分析:

运行程序后,我们将得到最优的运输计划和最小化的总运输成本。

示例运行结果:

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

分析结果

  • 通过合理分配从供应点到需求点的运输数量,可以实现最小总运输成本 640 元。
  • 在运输计划中,从供应点 S_1​ 到需求点 D_1​ 运输 5 单位货物,从 S_1​ 到 D_2​ 运输 15 单位货物,其他路径的运输量如上所示。

四、总结

在物流和运输中,线性规划被广泛应用于解决复杂的运输问题。通过定义目标函数和约束条件,使用线性规划可以确定如何在多个供应点和需求点之间进行最优分配,以最小化运输成本。在本例中,我们利用 Python 中的 scipy.optimize.linprog 函数成功求解了一个运输问题,得到了最优的运输计划,并最小化了总运输成本。

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

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

相关文章

【RabbitMQ】面试题

在本篇文章中,主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码,都已经在码云中给出,链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com),如果存在问题的话欢迎各位提出,望共同进步。 MQ的作用以及应用…

.Net 6.0 监听Windows网络状态切换

上次发了一个文章获取windows网络状态&#xff0c;判断是否可以访问互联网。传送门&#xff1a;获取本机网络状态 这次我们监听网络状态切换&#xff0c;具体代码如下&#xff1a; public class WindowsNetworkHelper {private static Action<bool>? _NetworkStatusCh…

【课程学习】Wireless Communications

Goldsmith A. Wireless communications[M]. Cambridge university press, 2005. Wireless Communications 无线通信课程 文章目录 2-Path Loss, Shadowing, and Multipath2.4-Two-Ray Multipath Model时延扩展 delay spread P33 3-Statistical Multipath Channel Models3.3-Wid…

一站式大语言模型API调用:快速上手教程

智匠MindCraft是一个强大的AI工具及开发平台&#xff0c;支持多种大语言模型和多模态AI模型。本文将详细介绍如何通过API调用智匠MindCraft中的大语言模型&#xff0c;帮助开发者快速上手。 注册与登录 访问智匠MindCraft官网&#xff0c;注册并登录账号。 进入开发者平台&…

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…

Cpp::STL—string类的使用与理解(上)(8)

文章目录 前言一、string类对象的构造函数string()string(const char* s)string(size_t n, char c)string(const string& s)string(const string& str&#xff0c;size_t pos&#xff0c;size_t len npos) 二、string类对象的容量操作size与lengthcapacitycapacity返回…

Docekrfile和docker compose编写指南及注意事项

Dockerfile 基础语法 我们通过编写dockerfile,将每一层要做的事情使用语法固定下来&#xff0c;之后运行指令就可以通过docker来制作自己的镜像了。 构建镜像的指令&#xff1a;docker build /path -t imageName:tag 注意&#xff0c;docker build后的path必须是dockerfile…

阿里云对象存储OSS 速学

目录 1.创建一个Bucket 2.创建密钥AccessKey 3.在文档中心打开阿里云对象存储OSS 4.参考上传文件示例 以官网的文档为主&#xff0c;我的文章教学为辅 官网有详细的视频介绍&#xff1a; OSS快速入门_对象存储(OSS)-阿里云帮助中心 (aliyun.com)https://help.aliyun.com/…

25考研咨询周开启,西安电子科技大学是否改考408??

学长这几天帮大家问了西安电子科技大学是否会从833、834、953改考为408&#xff1f; 西电老师回复&#xff1a;根据上级文件要求&#xff0c;招生简章以及专业目录会在网上报名开始前公布&#xff0c;专业课不会又大变动&#xff01; 因为大家安心复习即可&#xff0c;保证今…

java解决跨域问题时的403报错

什么是跨域问题&#xff1f; 当一个请求的url的协议&#xff0c;域名&#xff0c;端口三者之间任意一个与当前页面url不同 即为跨域 问题背景&#xff1a; 如图&#xff0c;前端端口为8090&#xff0c;而后端端口为8099&#xff0c;形成跨域&#xff0c;无法对接 试图利用Spr…

爬虫——爬取小音乐网站

爬虫有几部分功能&#xff1f;&#xff1f;&#xff1f; 1.发请求&#xff0c;获得网页源码 #1.和2是在一步的 发请求成功了之后就能直接获得网页源码 2.解析我们想要的数据 3.按照需求保存 注意&#xff1a;开始爬虫前&#xff0c;需要给其封装 headers {User-…

linux基础指令的认识

在正式学习linux前&#xff0c;可以简单认识一下linux与win的区别 win&#xff1a;是图形界面&#xff0c;用户操作更简单&#xff1b;在刚开始win也是黑屏终端 指令操作&#xff0c;图形界面就是历史发展的结果。Linux&#xff1a;也存在图形界面比如desktop OS&#xff1b;但…

【C++】模拟实现红黑树

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 目录 一.了解项目功能 二.逐步实现项目功能模块及其逻辑详解 &#x1f4cc;实现RBTreeNode类模板 &#x1f38f;构造RBTreeNode类成员变量 &#x1f38f;实现RBTreeNode类构…

异常场景分析

优质博文&#xff1a;IT-BLOG-CN 为了防止黑客从前台异常信息&#xff0c;对系统进行攻击。同时&#xff0c;为了提高用户体验&#xff0c;我们都会都抛出的异常进行拦截处理。 一、异常处理类 Java把异常当做是破坏正常流程的一个事件&#xff0c;当事件发生后&#xff0c;…

Spring Boot新闻推荐:实时数据处理

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

JSR303微服务校验

一.创建idea 二.向pom.xml添加依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><properties><java.vers…

职业技术学校开设无人机培训技术详解

职业技术学校开设无人机培训技术&#xff0c;是一个涉及多个方面的综合性教学过程。以下是对该培训技术的详细解析&#xff1a; 一、培训目标 无人机培训技术的目标在于培养学员掌握无人机的基本原理、组装调试、飞行操作、安全规范及维修保养等技能&#xff0c;使其成为具备…

基于SSM的定制衣服系统的设计与实现(定制衣服管理平台的设计与开发、智慧服装定制系统的设计与实现、定制衣服管理系统的设计与实现(源码+定制+参考文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

机器人的性能指标

1. 负荷能力 负荷能力负荷能力是指机器人在满足其他性能要求的情况下,能够承载的负荷重量。例如,一台机器人的最大负荷能力可能远大于它的额定负荷能力,但是达到最大负荷时,机器人的工作精度可能会降低,可能无法准确地沿着预定的轨迹运动,或者产生额外的偏差。机器人的负荷量与…

【redis-05】redis保证和mysql数据一致性

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…