用Python实现运筹学——Day 4: 线性规划的几何表示

news/2024/11/17 3:57:08/

一、学习内容

  1. 线性规划的几何表示: 线性规划问题的解通常位于一个凸多边形(即可行解空间)的顶点上,这意味着在求解线性规划问题时,只需要找到可行解空间中的顶点并计算出目标函数值,再选择其中的最优解。

    • 可行解空间:可行解空间是由约束条件定义的变量范围的集合。它由线性不等式形成的区域组成,该区域是一个凸集,即任意两个点之间的线段也完全在这个区域内。

    • 凸集:在几何学中,凸集是指在集合中的任意两点之间的线段都位于集合内的区域。在线性规划中,凸集是由所有满足约束条件的解所构成的集合。

  2. 图解法求解线性规划: 对于包含两个决策变量的线性规划问题,可以通过图解法直观地理解问题的几何性质。图解法通过绘制约束条件的线,将可行解空间(满足所有约束条件的解的区域)在坐标平面上展示出来,然后通过移动目标函数的等高线,找到使目标函数最大或最小的顶点。

  3. 图解法步骤

    • 绘制每个约束条件对应的直线。
    • 标出可行解空间(满足所有约束条件的区域)。
    • 将目标函数作为等值线画出,寻找该等值线在可行解空间上的最优解。

二、实战案例:简单生产分配问题的图解法求解

2.1 问题描述

一家公司生产两种产品 A 和 B。每种产品的利润和资源消耗如下:

产品每单位利润(元)每单位劳动时间(小时)每单位原材料需求(单位)
A6042
B5023

公司每天最多有 32 小时的劳动时间和 24 单位的原材料。公司希望通过合理安排生产数量,使利润最大化。

2.2 线性规划模型
  1. 决策变量

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

    Z = 60x_1 + 50x_2
  3. 约束条件

  • 劳动时间限制:4x_1 + 2x_2 \leq 32
  • 原材料限制:x_1 + 3x_2 \leq 24
  • 非负性约束:x_1 \geq 0, \quad x_2 \geq 0
2.3 图解法求解步骤
  1. 绘制约束条件对应的直线: 我们将绘制每个约束条件对应的直线,并找出可行解空间。可行解空间是满足所有约束条件的区域。

  2. 绘制目标函数的等高线: 我们将目标函数等高线绘制在同一张图上,通过逐渐平移目标函数线,寻找在可行解空间中的最优解。

2.4 Python 实现

我们将使用 matplotlib 库绘制图形,并直观地展示解法。

python">import numpy as np
import matplotlib.pyplot as plt# 创建决策变量范围
x1 = np.linspace(0, 10, 100)
x2 = np.linspace(0, 10, 100)# 定义约束条件
def labor_constraint(x1):return (32 - 4 * x1) / 2  # 从 labor constraint 解出 x2def material_constraint(x1):return (24 - 2 * x1) / 3  # 从 material constraint 解出 x2# 绘制可行解空间
plt.figure(figsize=(8, 6))# 绘制劳动时间限制
plt.plot(x1, labor_constraint(x1), label=r'$4x_1 + 2x_2 \leq 32$', color='blue')
plt.fill_between(x1, 0, labor_constraint(x1), where=(labor_constraint(x1) >= 0), color='blue', alpha=0.3)# 绘制原材料限制
plt.plot(x1, material_constraint(x1), label=r'$2x_1 + 3x_2 \leq 24$', color='green')
plt.fill_between(x1, 0, material_constraint(x1), where=(material_constraint(x1) >= 0), color='green', alpha=0.3)# 绘制坐标轴
plt.xlim((0, 10))
plt.ylim((0, 10))
plt.axhline(0, color='black',linewidth=1)
plt.axvline(0, color='black',linewidth=1)# 绘制目标函数的等高线
for z in [100, 200, 300, 400, 500, 600]:plt.plot(x1, (z - 60 * x1) / 50, '--', label=f'$Z={z}$', color='red')# 添加标签和标题
plt.xlabel(r'$x_1$ (产品 A 数量)')
plt.ylabel(r'$x_2$ (产品 B 数量)')
plt.title('线性规划的几何表示与图解法求解')# 添加图例
plt.legend()plt.grid(True)
plt.show()
2.5 代码解释
  1. 约束条件函数

    • labor_constraint(x1) 计算基于劳动时间约束下的 x_2
    • material_constraint(x1) 计算基于材料约束下的 x_2
  2. 图解法

    • 我们在图上绘制了劳动时间和材料的约束条件直线,填充满足约束条件的区域,表示可行解空间。
    • 同时,我们绘制了目标函数的等高线,通过观察等高线与可行解空间的交点,找到最优解。
2.6 运行结果分析

运行上述代码后,我们将看到一个二维图,展示了约束条件对应的直线及其定义的可行解空间。同时,目标函数的等高线也显示在图中。最优解位于可行解空间的某个顶点,我们可以通过观察得出最优的生产计划。

2.7 可视化结果示例

在图中,蓝色和绿色分别表示劳动时间和材料约束的可行解空间区域。红色虚线是目标函数的等高线。等高线越高,表示目标函数的值越大。最优解出现在等高线刚好触及可行解空间的某个顶点时,这就是我们需要找到的最优解点。

三、总结

通过图解法,我们可以直观地理解线性规划的几何性质。可行解空间是由约束条件定义的区域,而最优解通常位于这个空间的某个顶点。图解法适用于两个变量的问题,是学习线性规划几何表示的有效方式。


http://www.ppmy.cn/news/1531191.html

相关文章

车道线拟合

聚类如何帮助解决斑马线误拟合问题 聚类算法通过将相似的像素或特征点归为一类,可以用来分析图像中的不同结构(例如车道线和斑马线)。以下是一些具体的聚类方法和它们在车道线检测中的应用: 1. 基于几何特征的聚类 斑马线和车道…

解决R包依赖版本不兼容问题

ERROR: dependency ‘Matrix’ is not available for package ‘irlba’ removing ‘/root/anaconda3/envs/myview/lib/R/library/irlba’ ERROR: dependency ‘Matrix’ is not available for package ‘N2R’ removing ‘/root/anaconda3/envs/myview/lib/R/library/N2R’ ER…

【Python语言初识(五)】

一、文件和异常 在Python中实现文件的读写操作其实非常简单,通过Python内置的open函数,我们可以指定文件名、操作模式、编码信息等来获得操作文件的对象,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件&#…

C++读取txt文件中的句子在终端显示,同时操控鼠标滚轮(涉及:多线程,产生随机数,文件操作等)

文章目录 🌕运行效果🌕功能描述🌕代码🌙mian.cpp🌙include⭐MouseKeyControl.h⭐TipsManagement.h 🌙src⭐MouseControl.cpp⭐TipsManagement.cpp 🌕运行效果 🌕功能描述 线程一&am…

CAT1 RTU软硬件设计开源资料分析(TCP协议+Modbus协议+GNSS定位版本 )

01 CAT1 RTU方案简介: 远程终端单元( Remote Terminal Unit,RTU),一种针对通信距离较长和工业现场环境恶劣而设计的具有模块化结构的、特殊的计算机测控单元,它将末端检测仪表和执行机构与远程控制中心相连接。 奇迹TCP RTUGNS…

element ui中当el-dialog需要做全屏时,.fullscreen样式修改问题

element ui 饿了么UI中el-dialog样式修改问题 场景解决方法就是:去掉底部样式中的scoped,然后再进行页面级样式的更改即可。 场景 最近在使用element-ui时,使用到了弹窗组件: element-ui 官网链接地址: element-ui 官网链接地址…

LD3320语音识别模块的简单应用

文章目录 一、 前言二、硬件1.原理图2.产品参数 三、软件1.语音识别原理2.用户使用模式2.1 触发识别模式2.2 循环识别模式 3.语音识别程序3.1 并行方式读写3.2 初始化3.3 写入识别列表3.4 开始识别3.5 响应中断 4.烧写程序4.1 硬件连接4.2 打开STC-ISP软件4.3 按要求配置软件4.…

VS Code、Git与自动化脚本的效能之旅

---  在如今这个信息爆炸、竞争激烈的时代,提升工作效率已成为每一位程序员必须面对的挑战。而选择合适的编程工具,无疑是提升工作效率的关键所在。从智能的代码编辑器到强大的版本控制工具,再到那些能让我们事半功倍的自动化脚本&#xff…