用Python实现运筹学——Day 2: 线性规划的基本概念

news2024/9/25 9:23:34
一、学习内容
  1. 线性规划的定义: 线性规划(Linear Programming, LP)是一种用于求解约束条件下线性目标函数最优解的方法。线性规划问题通常涉及最大化或最小化一个线性目标函数,目标函数的变量受一组线性不等式或等式的约束。

  2. 目标函数: 目标函数是需要最大化或最小化的函数,通常表示为:

    Maximize or Minimize Z = c_1 * x_1 + c_2 * x_2 + ... + c_n * x_n

    其中,Z 为目标函数,x_1, x_2, \dots, x_n​ 是决策变量,c_1, c_2, \dots, c_n​ 是目标函数中决策变量的系数。

  3. 约束条件: 线性规划问题中的约束条件是一些线性不等式或等式,用于限制变量的取值范围。约束条件通常表示为:

    a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n \leq b_1

        a_{21}x_1 + a_{22}x_2 + \dots + a_{2n}x_n \geq b_2

        其中,a_{ij} 是约束条件中的系数,b_i​ 是约束的右侧常数项。

      4.可行解与最优解: 线性规划问题的可行解是在满足所有约束条件下的解,而最优解是在可行解范围内使目标函数值达到最大或最小的解。

二、线性规划的应用场景

线性规划应用广泛,包括但不限于以下领域:

  • 资源分配:最大化利润或最小化成本的生产与运营问题。
  • 物流与交通:最短路径问题、运输问题、分配问题。
  • 供应链管理:库存优化、供应与需求匹配。
  • 金融:投资组合优化,风险管理。
三、实战案例:公司利润最大化问题

公司生产两种产品 P_1​ 和 P_2​,每种产品的利润分别为 $40 和 $30。公司每天的生产资源有限,生产产品需要消耗两种资源:劳动时间和原材料。已知生产每个单位的 P_1​ 需要消耗 1 小时劳动时间和 2 单位原材料,生产每个单位的 P_2​ 需要消耗 2 小时劳动时间和 1 单位原材料。公司每天最多有 40 小时劳动时间和 30 单位原材料可用。公司希望通过合理安排生产计划,最大化每日利润。

3.1 问题的数学模型
  1. 决策变量

    • x_1:每天生产产品 P_1​ 的数量。
    • x_2​:每天生产产品 P_2​ 的数量。
  2. 目标函数: 最大化每日利润:

    Maximize Z = 40 * x_1 + 30 * x_2
  3. 约束条件

  • 每天的劳动时间不能超过 40 小时:

        x_1 + 2x_2 \leq 40

  • 每天的原材料不能超过 30 单位:

        2x_1 + x_2 \leq 30

        x_1 \geq 0, x_2 \geq 0:生产数量不能为负数。

3.2 Python 实现(使用 scipy.optimize.linprog
import numpy as np
from scipy.optimize import linprog

# 目标函数系数 (最大化问题转为最小化,通过乘 -1)
c = [-40, -30]  # 注意,最大化问题在 linprog 中转为最小化

# 约束条件系数矩阵
A = [[1, 2],   # 劳动时间约束
     [2, 1]]   # 原材料约束

# 约束条件右侧常数项
b = [40, 30]   # 分别为劳动时间和原材料的可用数量

# 决策变量的边界条件
x_bounds = [(0, None), (0, None)]  # x1 和 x2 的取值范围均为非负

# 求解线性规划问题
result = linprog(c, A_ub=A, b_ub=b, bounds=x_bounds, method='highs')

# 输出结果
if result.success:
    print("优化成功!")
    print(f"每天生产产品 P1 的数量:{result.x[0]:.2f}")
    print(f"每天生产产品 P2 的数量:{result.x[1]:.2f}")
    print(f"最大每日利润:{-result.fun:.2f}")
else:
    print("优化失败。")
3.3 代码解释
  • 目标函数

由于 linprog 是用于求解最小化问题,我们需要将最大化问题转化为最小化问题。通过将目标函数的系数乘以 -1,模型从最大化变为最小化。因此目标函数中的系数 c = [-40, -30] 表示最大化 40x_1 + 30x_2

  • 约束条件

矩阵 A 中的每一行代表一个约束条件,A_ub 表示这些约束条件是 "小于等于" 的形式。右侧常数项 b = [40, 30] 表示每种资源的最大可用数量。

  • 求解

使用 scipy.optimize.linprog 函数求解线性规划问题,方法选择 highs,这是较新且稳定的求解算法。

  • 变量边界

变量的取值范围限制为非负,因此 x_bounds = [(0, None), (0, None)]

3.4 运行结果分析

如果模型求解成功,将输出每天生产 P_1 和 P_2​ 的最优数量,以及最大化的每日利润。

运行结果(示例)

优化成功!
每天生产产品 P1 的数量:10.00
每天生产产品 P2 的数量:15.00
最大每日利润:850.00

分析结果

  • 生产 10 个单位的 P_1 和 15 个单位的 P_2​ 时,公司每天的利润最大化,达到了 $850。
  • 通过模型的约束,资源得到了有效利用:总共消耗了 40 小时劳动时间和 30 单位原材料,完全符合公司的资源限制。

四、总结

通过这个简单的线性规划案例,我们展示了如何用运筹学方法帮助公司最大化利润。在实际应用中,线性规划广泛用于生产调度、资源分配、物流优化等领域。学习线性规划可以帮助我们解决实际问题中的最优决策问题。

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

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

相关文章

C语言 | Leetcode C语言题解之第435题无重叠区间

题目: 题解: int cmp(int** a, int** b) {return (*a)[1] - (*b)[1]; }int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize) {if (intervalsSize 0) {return 0;}qsort(intervals, intervalsSize, sizeof(int*), cm…

【React】Ant Design 5.x版本drawer抽屉黑边问题

环境 antd: ^5.14.1react: ^18 问题情况 <Drawer open{open} closable{false} mask{false} width{680}getContainer{props.getContainer || undefined}><p>Some contents...</p><p>Some contents...</p><p>Some contents...</p> …

[网络] 网络层--IP协议

目录 一、IP协议 1.1 基本概念 1.2 IP协议报头 1.3 如何将报头和有效载荷分离和分用 1.4 分片与组装 1.5 如何减少分片&#xff1f; 1.6 分片和封装的具体过程 二、网段划分 2.1 再次理解IP地址 2.2 了解DHCP 2.3 网络划分方案 2.4 为什么要进行网络划分 2.5 特殊的…

Java基础——字节流和字符流

字节流和字符流的用法几乎完全一样&#xff0c;区别在于字节流和字符流所操作的数据单元不同&#xff0c;字节流操作的单元是数据单元是8位的字节&#xff0c;字符流操作的是数据单元为16位的字符。 为什么要有字符流&#xff1f; Java中字符是采用Unicode标准&#xff0c;Un…

【Go语言】Go语言结构体全面解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

基于 Canvas 的可缩放拖动网格示例(Vue3以及TypeScript )

文章目录 1. 基本知识2. Vue33. TypeScript 1. 基本知识 基本知识讲解&#xff1a; Canvas API&#xff1a; 一种用于在网页上绘制图形的 HTML 元素&#xff0c;使用 JavaScript 的 Canvas API 来进行绘制 使用 getContext(2d) 方法获取 2D 绘图上下文&#xff0c;允许开发者绘…

MySQL数据库备份详解

文章目录 引言● 数据库备份的重要性 MySQL数据库备份的基础知识● 备份类型1、完全备份2、增量备份3、差异备份 ● 备份工具与方法1、逻辑备份工具——mysqldump2、物理备份工具——Xtrabackup3、第三方解决方案 MySQL数据库备份的实施步骤1、环境准备2、选择合适的备份工具与…

【Linux基础IO】深入解析Linux基础IO缓冲区机制:提升文件操作效率的关键

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;暂无 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux基础IO &#x1f4d2;1. 什么是缓…

14.第二阶段x86游戏实战2-C++语言开发环境搭建-VisualStudio2017

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

基于jsonpath_ng的JSON数据查改增删

jsonpath_ng支持JSON数据的读写操作。 安装 pip install jsonpath-ng测试数据 from jsonpath_ng import parse import jsonjson_data { "store": {"book": [ { "category": "reference","author": "Nigel Rees&qu…

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall

数据集-目标检测系列-鲨鱼检测数据集 shark >> DataBall 数据集-目标检测系列-鲨鱼检测数据集 shark 数据量&#xff1a;6k 想要进一步了解&#xff0c;请联系。 DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;百种数据集&#xff0c;持续增加中。 示例&…

【自动驾驶】基于车辆几何模型的横向控制算法 | Stanley 算法详解与编程实现

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

【Python】探索 Elpy:Emacs 中的 Python 开发环境

可以短时间不开心&#xff0c;但别长时间不清醒。 对于使用 Emacs 编辑器的 Python 开发者来说&#xff0c;Elpy 是一个强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它通过整合多个 Emacs Lisp 和 Python 包&#xff0c;提供了一套完整的 Python 编程支持。本文…

丹摩智算平台体验:AI开发从未如此简单

目录 初次接触丹摩智算GPU算力资源表格 轻松创建GPU实例镜像选择 实验过程体验实验中的一些细节 使用后的感受一点小建议总结 最近我一直在学习一些与深度学习相关的知识&#xff0c;准备自己动手做一些模型训练的实验。平时在自己电脑上跑模型总感觉有点吃力&#xff0c;特别是…

复制他人 CSDN 文章到自己的博客

文章目录 0.前言步骤 0.前言 在复制别人文章发布时&#xff0c;记得表明转载哦 步骤 在需要复制的csdn 文章页面&#xff0c;打开浏览器开发者工具&#xff08;F12&#xff09;Ctrl F 查找"article_content"标签头 右键“Copy”->“Copy element”新建一个 tx…

[大语言模型-论文精读] ACL2024-长尾知识在检索增强型大型语言模型中的作用

ACL2024-长尾知识在检索增强型大型语言模型中的作用 On the Role of Long-tail Knowledge in Retrieval Augmented Large Language Models Authors: Dongyang Li, Junbing Yan, Taolin Zhang, Chengyu Wang, Xiaofeng He, Longtao Huang, Hui Xue, Jun Huang 1.概览 问题解决&…

Windows驱动调试方法

单步调试驱动 驱动的调试不能直接在本机上进行&#xff0c;而是要放在虚拟机&#xff08;或其它设备&#xff09;中。这是因为在内核模式下&#xff0c;一个断点的触发将会停下整个系统而不只是单个进程。 在前面的文章里&#xff0c;使用了DbgPrint函数来进行日志的输出&…

学习一下怎么用git

目录 初始化操作 设置名字&#xff1a; 设置邮箱: 查询状态 初始化本地仓库 清空git bush控制台 git的三个区域 文件提交 将会文件提交到暂存区 暂存指定文件 暂存所有改动文件 查看暂存区里面的文件 将文件提交到版本库 git文件状态查看 ​编辑 暂存区的相关指令…

2024专业U盘格式化数据恢复工具推荐榜

对于经常在不固定办公地点工作&#xff0c;且依赖U盘存储重要资料的朋友来说&#xff0c;U盘无疑成为了随身携带的“数字保险箱”。然而&#xff0c;频繁使用U盘也意味着面临数据丢失的风险。面对u盘格式化怎么恢复数据的难题&#xff0c;您或许正寻求有效的解决方案。接下来&a…

Spring源码-从源码层面讲解传播特性

传播特性:service&#xff1a;REQUIRED&#xff0c;dao:REQUIRED 两个都是required使用的是同一个事务&#xff0c;正常情况&#xff0c;在service提交commit <tx:advice id"myAdvice" transaction-manager"transactionManager"><tx:attributes&…