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

一、学习内容

  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 库绘制图形,并直观地展示解法。

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 解出 x2

def 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.mfbz.cn/a/883753.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++之分割字符串的两种方式

方式一 #include <string> #include <vector> #include <sstream> #include <iostream>std::vector<std::string> split(const std::string& str, char delim) {std::stringstream ss(str);std::string item;std::vector<std::string>…

C语言贪吃蛇小游戏演示和说明

C语言贪吃蛇小游戏演示和说明 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础&#xff0c;训练编程思维&#xff0c;培养解决问题的思路&#xff0c;领略多姿多彩的C语言。 游戏开始后&#xff0c;会在中间位置出现一条只有三个节点的贪吃蛇&#xff0c;并随机出现一个食物&am…

keepalived+lvs集群,实现高可用

环境准备&#xff1a;两台虚拟机&#xff0c;关闭防火墙&#xff0c;selinux,配置阿里云仓库&#xff0c;配置epel 192.168.88.21 dr1 负载均衡器 master 192.168.88.22 dr2 负载均衡器 backup 192.168.88.23 rs1 web1 192.168.88.24 rs2 web2 实验说明&…

项目启动错误

说明&#xff1a;记录一次项目启动&#xff0c;报数据库访问错误&#xff0c;如下&#xff1a; 错误信息&#xff1a;Invalid default&#xff1a;public abstract java.lang.Class tk.mybatis.spring.annotation.MapperScan.fatoryBean() 解决 没有引入mybatis依赖&#xff…

通信工程学习:什么是VIM虚拟化基础设施管理器

VIM:虚拟化基础设施管理器 VIM(Virtualized Infrastructure Manager)虚拟化基础设施管理器,是一种负责管理和控制虚拟化环境中所有虚拟资源的工具和系统。以下是关于VIM虚拟化基础设施管理器的详细解释: 一、定义与功能 VIM是网络功能虚拟化(NFV)架构中…

HarmonyOS---权限和http/Axios网络请求

网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用&#xff08;建议&#xff09;3.1 使用方式一3.2 使用方式二&#xff08;建议&#xff09; 一、应用权限管理 应用权限保护…

Leetcode面试经典150题-322.零钱兑换

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示…

uniapp 常用高度状态栏,导航栏,tab栏,底部安全高度

实际效果 使用 //使用 let posConfig this.getPosConfig(); // 传false返回值为 px大小 console.log(posConfig.safeBottomH) // 入参 是否转换为rpxgetPosConfig(toRpx true) {const systemInfo uni.getSystemInfoSync();// #ifdef MPconst menuButtonInfo uni.getMenuBu…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

Linux云计算 |【第四阶段】NOSQL-DAY2

主要内容&#xff1a; Redis集群概述、部署Redis集群&#xff08;配置manage管理集群主机、创建集群、访问集群、添加节点、移除节点&#xff09; 一、Redis集群概述 1、集群概述 所谓集群&#xff0c;就是通过添加服务器的数量&#xff0c;提供相同的服务&#xff0c;从而让…

计算机毕业设计之:微信小程序的校园闲置物品交易平台(源码+文档+讲解)

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

卷积神经网络-迁移学习

文章目录 一、迁移学习1.定义与性质2.步骤 二、Batch Normalization&#xff08;批次归一化&#xff09;三、ResNet网络1.核心思想2.残差结构&#xff08;1&#xff09;残差块&#xff08;2&#xff09;残差结构类型 四、总结 一、迁移学习 迁移学习&#xff08;Transfer Lear…

书生大模型实战营学习[9] OpenCompass 评测 InternLM-1.8B 实践

准备工作 打开开发机&#xff0c;选择cuda11.7环境&#xff0c;A100选择10%&#xff0c;点击创建&#xff0c;然后进入开发机即可&#xff0c;和之前的操作一样。接下来创建环境&#xff0c;下载必要的依赖包 conda create -n opencompass python3.10 conda install pytorch2…

Altium Designer(AD)百度云下载与安装(附安装步骤)

在我们日常使用当中&#xff0c;Altium designer常常也被简称为AD&#xff0c;是一款一体化的电子产品开发系统软件&#xff0c;主要运行在Windows操作系统上。 我们通过Altium designer把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技…

Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法

1&#xff0c;下载mat后安装&#xff0c;打开时提示 jdk版本低&#xff0c;需要升级到jdk17及以上版本&#xff0c;无奈就下载了jdk17&#xff0c;结果安装后提示没有jre环境&#xff0c;然后手动生成jre目录&#xff0c;命令如下&#xff1a; 进入jdk17目录&#xff1a;执行&…

鸿蒙界面开发(九):列表布局 (List)

列表布局 当列表项达到一定数量&#xff0c;内容超过屏幕大小时&#xff0c;可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集&#xff0c;例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求&#xff08;如通讯录、音乐列表、购物清单等&#xf…

Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用

文章目录 前言代码实现运行效果技术分析 前言 同事有个需求 授权获取用户头像 和 昵称 。之前做过线上小程序发版上线流程 就实现了下 最新的方法和 api 有些变化 记录下 代码实现 先直接上代码 <template><view class"container"><buttonclass&qu…

解决macOS安装redis以后不支持远程链接的问题

参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…

IDEA服务启动时无法输出日志

起服务时&#xff0c;控制台啥日志也没有 解决方案&#xff1a;选择【启用调试输出】 SQL的日志无法打印 原来安装了一个Mybatis Log Free&#xff0c;用的好好的。 后来换了个项目&#xff0c;SQL执行日志就打印不出来了。 解决方案&#xff1a;换个插件&#xff0c;我换了…

使用离火插件yoloV8数据标注,模型训练

1. 启动 2.相关配置 2.1 data.yaml path: D:/yolo-tool/yaunshen-yolov8/YOLOv8ys/YOLOv8-CUDA10.2/1/datasets/ceshi001 train: images val: images names: [蔡徐坤,篮球] 2.2 cfg.yaml # Ultralytics YOLOv8, GPL-3.0 license # Default training settings and hyp…