当前位置: 首页 > news >正文

用Python实现运筹学——Day 10: 线性规划的计算机求解

一、学习内容

1. 使用 Python 的 scipy.optimize.linprog 进行线性规划求解

scipy.optimize.linprog 是 Python 中用于求解线性规划问题的函数。它实现了单纯形法、内点法等算法,能够处理求解最大化或最小化问题,同时满足线性约束条件。

  • 线性规划问题的形式: 线性规划问题可以描述为:

    目标函数

    \text{minimize } Z = c^T x

    约束条件

    A x \leq b,x \geq 0

    其中,x 是决策变量,c 是目标函数的系数向量,A 是约束条件的系数矩阵,b 是约束的右端常数项。

2. Python 实现线性规划求解

在 Python 中,我们可以通过 scipy.optimize.linprog 函数求解上述形式的线性规划问题。该函数接受目标函数的系数、约束条件、变量的上下界等参数,并返回最优解和相关信息。

3. 案例学习:公司生产问题

假设某公司生产两种产品 AAA 和 BBB,它们的每单位利润分别为 40 元和 30 元。生产这两种产品时需要消耗两种资源,资源 1 和资源 2 的需求及可用量如下:

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

资源 1 和资源 2 的可用量分别为 200 和 150 单位。公司希望最大化总利润。


二、线性规划模型

  1. 决策变量

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

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

        资源 1 的约束:3x_1 + x_2 \leq 200

        资源 2 的约束:2x_1 + 2x_2 \leq 150

        非负性约束:x_1 \geq 0, \quad x_2 \geq 0


三、Python 实现:使用 scipy.optimize.linprog 求解线性规划问题

import numpy as np
from scipy.optimize import linprog# 目标函数系数 (最大化问题转换为最小化,乘以 -1)
c = [-40, -30]  # 利润系数# 约束条件矩阵 A 和 b (左边系数和右边常数)
A = [[3, 1],  # 资源 1 的限制[2, 2]   # 资源 2 的限制
]
b = [200, 150]  # 资源 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("优化失败。")

代码解释

  1. 目标函数: 由于 linprog 求解的是最小化问题,我们将最大化问题的目标函数系数 40x_1 + 30x_2 乘以 -1,转换为最小化问题,即-40x_1 - 30x_2​。

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

  3. 变量的边界x_1 和 x_2 均为非负数,表示生产数量不能为负。

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

运行结果分析

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

示例运行结果

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

分析结果

  • 生产 50 单位的产品 A 和 50 单位的产品 B 可以获得最大利润 3500 元。
  • 通过合理分配资源,公司可以在约束条件下达到利润最大化。

四、总结

通过使用 Python 中的 scipy.optimize.linprog 函数,我们可以轻松地求解线性规划问题。在实际应用中,线性规划广泛用于生产、资源分配、物流等领域。使用 linprog 工具可以有效解决这些问题并找到最优解。同时,借助线性规划的数学模型,我们可以通过构造目标函数和约束条件对各种实际问题进行建模并求解。

相关文章:

用Python实现运筹学——Day 10: 线性规划的计算机求解

一、学习内容 1. 使用 Python 的 scipy.optimize.linprog 进行线性规划求解 scipy.optimize.linprog 是 Python 中用于求解线性规划问题的函数。它实现了单纯形法、内点法等算法,能够处理求解最大化或最小化问题,同时满足线性约束条件。 线性规划问题的…...

[C++]使用C++部署yolov11目标检测的tensorrt模型支持图片视频推理windows测试通过

官方框架: https://github.com/ultralytics/ultralytics yolov8官方最近推出yolov11框架,标志着目标检测又多了一个检测利器,于是尝试在windows下部署yolov11的tensorrt模型,并最终成功。 重要说明:安装环境视为最基…...

霍夫曼树及其与B树和决策树的异同

霍夫曼树是一种用于数据压缩的二叉树结构,通常应用于霍夫曼编码算法中。它的主要作用是通过对符号进行高效编码,减少数据的存储空间。霍夫曼树在压缩领域扮演着重要角色,与B树、决策树等数据结构都有一些相似之处,但又在应用场景和…...

CompletableFuture常用方法

一、获得结果和触发计算 1.获取结果 &#xff08;1&#xff09;public T get() public class CompletableFutureAPIDemo{public static void main(String[] args) throws ExecutionException, InterruptedException{CompletableFuture<String> completableFuture Com…...

本地化测试对游戏漏洞修复的影响

本地化测试在游戏开发的质量保证过程中起着至关重要的作用&#xff0c;尤其是在修复bug方面。当游戏为全球市场做准备时&#xff0c;它们通常会被翻译和改编成各种语言和文化背景。这种本地化带来了新的挑战&#xff0c;例如潜在的语言错误、文化误解&#xff0c;甚至是不同地区…...

使用rust实现rtsp码流截图

中文互联网上的rust示例程序源码还是太稀少&#xff0c;找资料很是麻烦&#xff0c;下面是自己用业余时间开发实现的一个对批量rtsp码流源进行关键帧截图并存盘的rust demo源码记录。 要编译这个源码需要先安装vcpkg&#xff0c;然后用vcpkg install ffmpeg安装最新版本的ffmpe…...

Cpp::STL—string类的模拟实现(12)

文章目录 前言一、string类各函数接口总览二、默认构造函数string(const char* str "");string(const string& str);传统拷贝写法现代拷贝写法 string& operator(const string& str);传统赋值构造现代赋值构造 ~string(); 三、迭代器相关函数begin &…...

一文搞懂SentencePiece的使用

目录 1. 什么是 SentencePiece&#xff1f;2. SentencePiece 基础概念2.1 SentencePiece 的工作原理2.2 SentencePiece 的优点 3. SentencePiece 的使用3.1 安装 SentencePiece3.2 训练模型与加载模型3.3 encode&#xff08;高频&#xff09;3.4 decode&#xff08;高频&#x…...

一个简单的摄像头应用程序1

这个Python脚本实现了一个基于OpenCV的简单摄像头应用,我们在原有的基础上增加了录制视频等功能,用户可以通过该应用进行拍照、录制视频,并查看已拍摄的照片。以下是该脚本的主要功能和一些使用时需要注意的事项: 功能 拍照: 用户可以通过点击界面上的“拍照”按钮或按…...

通过PHP获取商品详情

在电子商务的浪潮中&#xff0c;数据的重要性不言而喻。商品详情信息对于电商运营者来说尤为宝贵。PHP&#xff0c;作为一种广泛应用的服务器端脚本语言&#xff0c;为我们提供了获取商品详情的便捷途径。 了解API接口文档 开放平台提供了详细的API接口文档。你需要熟悉商品详…...

【Android】获取备案所需的公钥以及签名MD5值

目录 重要前提 获取签名MD5值 获取公钥 重要前提 生成jks文件以及gradle配置应用该文件。具体步骤请参考我这篇文章&#xff1a;【Android】配置Gradle打包apk的环境_generate signed bundle or apk-CSDN博客 你只需要从头看到该文章的配置build.gradle&#xff08;app&…...

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清,那么一般来说看电影不卡顿需要多大带宽呢? 以4K为例,这里引用一位网友的回答:“视频分辨率4092*2160,每个像素用红蓝绿三个256色(8bit)的数据表示,视频帧数为60fps,那么一秒钟画面的数据量是:4096*2160*3*8*60≈11.9Gbps。此外声音大概是视频数据量…...

解决IDEA中@Autowired红色报错的实用指南:原因与解决方案

前言&#xff1a; 在使用Spring Boot开发时&#xff0c;Autowired注解是实现依赖注入的常用方式。然而&#xff0c;许多开发者在IDEA中使用Autowired时&#xff0c;可能会遇到红色报错&#xff0c;导致代码的可读性降低。本文将探讨导致这种现象的原因&#xff0c;并提供几种解…...

408知识点自检(一)

一、细节题 虚电路是面向连接的吗&#xff1f;虚电路线路上会不会有其他虚电路通过&#xff1f;虚电路适合什么类型的数据交换&#xff1f;虚电路的可靠性靠其他协议还是自己&#xff1f;固态硬盘的优势体现在什么存取方式&#xff1f;中断向量地址是谁的地址&#xff1f;多播…...

负载均衡--相关面试题(六)

在负载均衡的面试中&#xff0c;可能会遇到一系列涉及概念、原理、实践应用以及技术细节的问题。以下是一些常见的负载均衡面试题及其详细解答&#xff1a; 一、什么是负载均衡&#xff1f; 回答&#xff1a;负载均衡是一种将网络请求或数据传输工作分配给多个服务器或网络资源…...

【Unity踩坑】Unity更新Google Play结算库

一、问题描述&#xff1a; 在Google Play上提交了app bundle后&#xff0c;提示如下错误。 我使用的是Unity 2022.01.20f1&#xff0c;看来用的Play结算库版本是4.0 查了一下文档&#xff0c;Google Play结算库的维护周期是两年。现在需要更新到至少6.0。 二、更新过程 1. 下…...

Redis:hash类型

Redis&#xff1a;hash类型 hash命令设置与读取HSETHGETHMGET 哈希操作HEXISTSHDELHKEYSHVALSHGETALLHLENHSETNXHINCRBYHINCRBYFLOAT 内部编码ziplisthashtable 目前主流的编程语言中&#xff0c;几乎都提供了哈希表相关的容器&#xff0c;Redis自然也会支持对应的内容&#xf…...

力扣9.30

1749. 任意子数组和的绝对值的最大值 给你一个整数数组 nums 。一个子数组 [numsl, numsl1, ..., numsr-1, numsr] 的 和的绝对值 为 abs(numsl numsl1 ... numsr-1 numsr) 。 请你找出 nums 中 和的绝对值 最大的任意子数组&#xff08;可能为空&#xff09;&#xff0c…...

kafka下载配置

下载安装 参开kafka社区 zookeeperkafka消息队列群集部署https://apache.csdn.net/66c958fb10164416336632c3.html 下载 kafka_2.12-3.2.0安装包快速下载地址分享 官网下载链接地址&#xff1a; 官网下载地址&#xff1a;https://kafka.apache.org/downloads 官网呢下载慢…...

nlp任务之预测中间词-huggingface

目录 1.加载编码器 1.1编码试算 2.加载数据集 3.数据集处理 3.1 map映射&#xff1a;只对数据集中的sentence数据进行编码 3.2用filter()过滤 单词太少的句子过滤掉 3.3截断句子 4.创建数据加载器Dataloader 5. 下游任务模型 6.测试预测代码 7.训练代码 8.保…...

《程序猿之Redis缓存实战 · Redis 与数据库一致性》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

【无标题】observer: error while loading shared libraries: libmariadb.so.3处理办法

文章目录 1.记录新装的oceanbase,使用observer帮助时&#xff0c;出现lib文件无法找到的处理过程 ./observer --help ./observer: error while loading shared libraries: libmariadb.so.3: cannot open shared object file: No such file or directory2.做一个strace跟踪&…...

极客兔兔Gee-Cache Day1

极客兔兔7Days GeeCache - Day1 interface{}&#xff1a;任意类型 缓存击穿&#xff1a;一个高并发的请求查询一个缓存中不存在的数据项&#xff0c;因此这个请求穿透缓存直接到达后端数据库或数据源来获取数据。如果这种请求非常频繁&#xff0c;就会导致后端系统的负载突然…...

[MAUI]数据绑定和MVVM:MVVM的属性验证

一、MVVM的属性验证案例 Toolkit.Mvvm框架中的ObservableValidator类,提供了属性验证功能,可以使用我们熟悉的验证特性对属性的值进行验证,并将错误属性提取和反馈给UI层。以下案例实现对UI层的姓名和年龄两个输入框,进行表单提交验证。实现效果如下所示 View<ContentP…...

2024年水利水电安全员考试题库及答案

一、判断题 1.采用水下钻孔爆破方案时&#xff0c;侧面应采用预裂爆破&#xff0c;并严格控制单响药量以保护附近建&#xff08;构&#xff09;筑物的安全。 答案&#xff1a;正确 2.围堰爆破拆除工程的实施应成立爆破指挥机构&#xff0c;并应按设计确定的安全距离设置警戒。…...

【快速删除 node_modules 】rimraf

目录 1. 什么是node_modules 2. 卸载一个npm包 3. 删除 node_modules 为什么这么慢 4. rimraf 5. 为什么rimraf 这么快 作为前端开发&#xff0c;无论我们关注不关注&#xff0c;每天都能接触到node_modules。通常产生于一个npm install命令&#xff0c;之后就不会多加关注…...

毕业设计选题:基于ssm+vue+uniapp的教学辅助小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

13-指针和动态内存-内存泄漏

一、视频笔记&#xff1a; C语言通过malloc&#xff0c;来获取堆上的内存。 动态调用内存&#xff1a; malloc 和 free &#xff1b;new 和 delete 都行。 内存泄漏指的是我们动态申请了内存&#xff0c;但是即是是使用完了之后&#xff08;从来都不去释放它&#xff09;。只…...

基于深度学习的视频摘要生成

基于深度学习的视频摘要生成是一种通过自动化方式从长视频中提取关键片段&#xff0c;生成简洁且有代表性的视频摘要的技术。其目的是在保留视频主要内容的基础上&#xff0c;大幅缩短视频的播放时长&#xff0c;方便用户快速理解视频的核心信息。以下是视频摘要生成的主要方法…...

适合初学者的[JAVA]: 基础面试题

目录 说明 前言 String/StringBuffer/StringBuilder区别 第一点: 第二点: 总结&#xff1a; 反射机制 JVM内存结构 运行时数据区域被划分为5个主要组件&#xff1a; 方法区&#xff08;Method Area&#xff09; 堆区&#xff08;Heap Area&#xff09; 栈区&#x…...

网页设计教程网站/手机网站模板下载

XCode中引入了静态分析器,用于发现普通编译错误以外的错误选择Build->Build and Analyze请看下面这段代码#import <Foundation/FOundation.h>int main(int agrc, const char *argv[]){NSAutoreleasePool *pool [[NSAutoreleasePool alloc] init];NSDate *date [[NSD…...

做行业网站如何采集信息/微信营销的方法

错误信息&#xff1a; 系统信息&#xff1a;CentOS7.2 64位&#xff1b;...

这样做微信网站/引流黑科技app

背景 客户报告了一个count(distinct)语句返回结果错误&#xff0c;实际结果存在值&#xff0c;但是用count(distinct)统计后返回的是0。 将问题简化后复现如下&#xff0c;影响已知的所有版本。 drop table if exists tb; set tmp_table_size1024; create table tb(id int auto…...

教育网站制作哪专业/网络推广营销方案免费

如果遇到windows7系统网速不稳定的问题怎么解决呢&#xff1f;网速的快慢影响的工作效率&#xff0c;如果网速慢了&#xff0c;打开一个网页要很久是&#xff0c;所以大家对网速的追求都比较高。一些小伙伴就遇到windows7网速不稳定&#xff0c;总是断断续续&#xff0c;影响上…...

高明专业网站建设哪家好/百度一下 你就知道官网 新闻

你好我是辰兮&#xff0c;很高兴你能来阅读&#xff0c;本篇总结了Java Scoket类的相关知识&#xff0c;并且整理了实现双向通信的相关代码也有案例实现截图&#xff0c;分享获取新知&#xff0c;大家一起进步。 JAVA基础面试常考问题 &#xff1a; JAVA面试基础常考题汇集JAVA…...

东莞信科网站建设/民宿平台搜索量上涨

手机很难离开系统任何电子产品都需要一定的条件来进行驱动&#xff0c;就拿手机产品来说&#xff0c;不仅需要芯片&#xff0c;还需要系统、电池、屏幕等&#xff0c;可以说需要的条件非常多&#xff0c;然后组合起来&#xff0c;才能诞生成为手机产品。而在手机产品中&#xf…...