用Python实现运筹学——Day 9: 线性规划的灵敏度分析

news2024/10/4 5:55:56

一、学习内容

1. 灵敏度分析的定义与作用

灵敏度分析(Sensitivity Analysis) 是在优化问题中,分析模型参数变化对最优解及目标函数值的影响。它帮助我们了解在线性规划模型中,当某些参数(如资源供应量、成本系数等)发生变化时,最优解是否会发生变化,以及这种变化的幅度。

灵敏度分析的作用

  • 鲁棒性分析:通过灵敏度分析,决策者可以了解模型对参数变化的敏感程度,确保模型在实际应用中的稳定性。
  • 资源评估:帮助评估资源的稀缺性以及目标函数对资源的依赖程度。
  • 决策优化:通过分析参数变化的影响,决策者可以在实际情况发生改变时做出相应的调整,保持解决方案的最优性。

2. 灵敏度分析的内容

灵敏度分析主要关注以下几个方面:

  • 资源供应的变化:如果某个资源供应量增加或减少,如何影响最优解和总成本?
  • 成本系数的变化:如果生产某个产品的成本上升或下降,最优解如何变化?
  • 约束条件的变化:如果约束条件发生变化,是否会引起可行解集的变化?

二、实战案例:灵敏度分析在资源调度问题中的应用

2.1 问题描述

假设某公司有两种资源用于生产两种产品。该公司的目标是最大化利润。每种产品所需的资源需求和利润如下:

产品每单位利润(元)资源 1 需求(单位)资源 2 需求(单位)
产品 A4021
产品 B3012

可用的资源数量为:

  • 资源 1:100 单位
  • 资源 2:80 单位

公司希望通过生产产品 A 和产品 B 来最大化利润。我们将通过灵敏度分析来评估资源供应量和利润系数的变化对最优解的影响。

2.2 原问题的线性规划模型
  1. 决策变量

    • x_1:生产产品 A 的数量。
    • x_2:生产产品 B 的数量。
  2. 目标函数: 最大化利润:

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

    1. 资源 1 的约束:2x_1 + x_2 \leq 100
    2. 资源 2 的约束:x_1 + 2x_2 \leq 80
    3. 非负性约束:x_1 \geq 0, \quad x_2 \geq 0

三、Python 实现:使用 scipy.optimize.linprog 求解线性规划问题并进行灵敏度分析

我们将使用 scipy 库的 linprog 函数来求解线性规划问题,并分析对资源供应量和成本系数变化的灵敏度。

import numpy as np
from scipy.optimize import linprog

# 目标函数系数 (最大化问题转换为最小化,乘以 -1)
c = [-40, -30]  # 利润系数

# 约束条件矩阵 A 和 b (左边系数和右边常数)
A = [
    [2, 1],  # 资源 1 的限制
    [1, 2]   # 资源 2 的限制
]
b = [100, 80]  # 资源 1 和资源 2 的可用量

# 变量的边界(非负性约束)
x_bounds = [(0, None), (0, None)]  # x1 和 x2 均为非负数

# 使用单纯形法求解线性规划问题
result = linprog(c, A_ub=A, b_ub=b, bounds=x_bounds, method='simplex')

# 输出结果
if result.success:
    print("优化成功!")
    print(f"生产产品 A 的数量:{result.x[0]:.2f}")
    print(f"生产产品 B 的数量:{result.x[1]:.2f}")
    print(f"最大总利润:{-result.fun:.2f} 元")
else:
    print("优化失败。")
3.1 代码解释
  1. 目标函数: 由于 linprog 求解的是最小化问题,我们将最大化问题的目标函数系数 40x_1 + 30x_2 乘以 -1,转换为最小化问题,即-40x_1 - 30x_2​。

  2. 约束条件: 我们构造了资源 1 和资源 2 的约束条件矩阵 A和对应的资源数量 b。

  3. 变量的边界x_1 和 x_2​ 均为非负数。

  4. 求解方法: 使用 method='simplex' 指定单纯形法求解。

3.2 运行结果

运行程序后,我们将得到最优的生产数量以及最大化的利润。

示例运行结果:

优化成功!
生产产品 A 的数量:40.00
生产产品 B 的数量:20.00
最大总利润:2200.00 元

分析结果

  • 生产 40 单位的产品 A 和 20 单位的产品 B 可以获得最大利润 2200 元。

3.3 灵敏度分析

我们接下来将分析资源供应量和产品利润系数的变化对最优解的影响。

1. 资源供应量的灵敏度分析

假设我们将资源 1 的供应量从 100 单位增加到 120 单位,重新运行线性规划求解,观察最优解和利润的变化。

# 修改资源 1 的供应量
b_new = [120, 80]

# 重新求解
result_new = linprog(c, A_ub=A, b_ub=b_new, bounds=x_bounds, method='simplex')

# 输出结果
if result_new.success:
    print("优化成功!(资源 1 增加到 120 单位)")
    print(f"生产产品 A 的数量:{result_new.x[0]:.2f}")
    print(f"生产产品 B 的数量:{result_new.x[1]:.2f}")
    print(f"最大总利润:{-result_new.fun:.2f} 元")
else:
    print("优化失败。")

新运行结果:

优化成功!(资源 1 增加到 120 单位)
生产产品 A 的数量:50.00
生产产品 B 的数量:10.00
最大总利润:2300.00 元

分析:

  • 当资源 1 的供应量增加到 120 单位时,生产产品 A 的数量增加到了 50 单位,而产品 B 的数量减少到了 10 单位。
  • 最大利润提高到了 2300 元,这表明资源 1 的稀缺性对利润的影响较大。
2. 利润系数的灵敏度分析

假设产品 A 的利润从 40 元增加到 60 元,重新求解线性规划问题。

# 修改目标函数系数(产品 A 的利润从 40 增加到 60)
c_new = [-60, -30]

# 重新求解
result_new_profit = linprog(c_new, A_ub=A, b_ub=b, bounds=x_bounds, method='simplex')

# 输出结果
if result_new_profit.success:
    print("优化成功!(产品 A 利润增加到 60 元)")
    print(f"生产产品 A 的数量:{result_new_profit.x[0]:.2f}")
    print(f"生产产品 B 的数量:{result_new_profit.x[1]:.2f}")
    print(f"最大总利润:{-result_new_profit.fun:.2f} 元")
else:
    print("优化失败。")

新运行结果:

优化成功!(产品 A 利润增加到 60 元)
生产产品 A 的数量:50.00
生产产品 B 的数量:10.00
最大总利润:3000.00 元

分析:

  • 当产品 A 的利润提高到 60 元时,公司会更多地生产产品 A,生产产品 B 的数量减少。
  • 总利润增加到了 3000 元,说明产品 A 的利润对生产决策有显著影响。

四、总结

灵敏度分析是线性规划中一个重要的分析工具,通过分析参数变化的影响,帮助决策者了解模型对不同资源和成本变化的反应。在实际应用中,灵敏度分析可以用于资源调度、生产优化等场景,为优化决策提供有效的信息。

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

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

相关文章

SQLServer CXPACKET等待事件

文章目录 SQL Server 中的 CXPACKET 等待类型是最容易被误解的等待统计之一。CXPACKET 这个术语来源于 “Class Exchange Packet”(类交换包)。其本质可以描述为在单个进程的两个并行线程之间交换数据行的过程。其中一个线程是“生产者线程”&#xff0c…

理解Matplotlib构图组成

介绍 Matplotlib 是 Python 中最流行的数据可视化库之一。它提供了一系列丰富的工具,可以绘制高度自定义且适用于各种应用场景的图表。无论你是数据科学家、工程师,还是需要处理数据图形表示的任何人,理解如何操作和定制 Matplotlib 中的图表…

ElasticSearch 备考 -- 备份和恢复

一、题目 备份集群下的索引 task,存储快照名称为 snapshot_1 二、思考 这个涉及的是集群的备份,主要是通过创建快照,涉及到以下2步骤 Setp1:注册一个备份 snapshot repository Setp2:创建 snapshot 可以通过两种方…

Ubuntu18.04安装cuda11.1(出现c++版本问题)

一、概述 需要使用到ubuntu18.04进行cuda的配置,最新版本的cuda跟pytorch的版本不太适配,所以为了能够复现,我选择了一些老版本的cuda11,其使用的范围更加广泛。将自己 二、具体操作 (一)安装流程 1.官网…

为什么疾风气象大模型比传统天气预报更准?

近年来,气象大模型逐渐成为天气预报的核心工具,其预测精度和可靠性远超传统天气预报方法。本文将探讨气象大模型为何比传统天气预报更加准确的原因,分析其优势以及在气象预测领域的应用前景。 1. 传统天气预报的局限性 传统天气预报通常依赖…

win11/win10/windows下快安装并使用git

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Git 的特点?二、GIT安装方法1.打开GIT官网2.下载git安装程序整个安装过程基本上直接用默认选项就可以 总结 前言 提示:GIT介绍 GI…

十一不停歇-学习ROS2第一天 (10.2 10:45)

话题通信 1.1 发布第一个节点: import rclpy #导入此类模块 rcl类型 from rclpy.node import Node #从这个子模块中导入这类函数 def main(): #定义这个函数 rclpy.init() #使用初始化函数 node Node(hello_python) 将类函数里面的内容调给…

Pikachu- SQL Inject - http header 头注入

header 头注入,是一种场景;跟以往的没区别,只是发生在 header 响应头; 有些时候,后台开发人员为了验证客户端头信息(比如常用的cookie验证),或者通过http header头信息获取客户端的一些信息,比…

帝国CMS系统开启https后,无法登陆后台的原因和解决方法

今天本地配置好了帝国CMS7.5,传去服务器后,使用http访问一切正常。但是当开启了https(SSL)后,后台竟然无法登陆进去了。 输入账号密码后,点击登陆,跳转到/e/admin/ecmsadmin.php就变成页面一片…

【Kubernetes】常见面试题汇总(五十四)

目录 120.创建 init C 容器后,其状态不正常? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 属于【Kubernetes】的生产…

java版基于Spring Boot + Mybatis在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码

一、项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,…

关于邻域粗糙集的性质及自我理解

关于邻域粗糙集的性质及定理理解 以上是邻域粗糙集的一些基本定义。HU 等人提出了 NRS,是基于经典的在粗糙集模型提出的,该模型基于邻域关系而非等价关系,模型是建立在邻域结构上的,可以直接应用在连续型数据集上。 下面主要是对…

Navicat Premium 12 for Mac中文永久版

目录 一、安装二、修改rpk文件三、获取请求码四、获取jh码 Tip:由于一些jy词,一直不让我发布🙄,所以只能用拼音简写代替,是不是很无语,我也很无语,各位自行体会一下😒 为了避免每次换…

使用vscode调试wails项目(golang桌面GUI)

文章目录 安装 Golang 环境安装 NPM安装 VSCode安装 Go 插件安装 Go 插件依赖工具安装 Wails系统检查 准备项目Visual Studio Code 配置安装和构建步骤参考资料 安装 Golang 环境 访问 golang 官网下载环境安装包:https://go.dev/dl/ 安装 NPM 从 Node 下载页面 …

音视频入门基础:FLV专题(12)——FFmpeg源码中,解析DOUBLE类型的ScriptDataValue的实现

一、引言 从《音视频入门基础:FLV专题(9)——Script Tag简介》中可以知道,根据《video_file_format_spec_v10_1.pdf》第80到81页,SCRIPTDATAVALUE类型由一个8位(1字节)的Type和一个ScriptDataV…

ElasticSearch备考 -- 多字段查询

一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…

Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出

各个操作功能 部分功能 几种操作游戏物体的方式: Center:有游戏物体父子关系的时候,中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 :调试/暂停/下一帧 快捷键 1.Alt鼠标左键:可以实现巡游角度查看场景 2.鼠标滚轮…

龙芯1B开发板自检程序

本代码为当时,参加嵌入式系统开发与应用赛项,训练时编写的自检程序,用于将程序烧录后,逐个演示板载模块功能是否正常,快速定位问题。这代码编写的时间为2023年,好像原代码是参考2023年官方案例来编写的。目…

计算机的错误计算(一百一十二)

摘要 计算机的错误计算(六十三)与(六十八)以及(六十九)分别探讨了大数与 附近数以及 附近数 的余切函数的计算精度问题。本节讨论余切序列(即迭代 )的计算精度问题。 余切序列是指…

沉迷赌博卖妻卖女,演员吴晓亮被骂到微博沦陷

《浴火之路》自10月1日上映以来,便因其暴力复仇之极致爽快、影像风格之震撼、演员演技之精湛而收获了极高的关注度。 其中,“无情无义人贩子”陆永安沉迷赌博,不惜拐卖亲生女儿小叶子,这一角色让人咬牙切齿,而饰演者演…