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

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中,人们常常会遇到各种优化问题。例如,在生产经营中,我们总是希望制定最优的生产计划,充分利用已有的人力、物力资源,获得最大的经济效益;在运输问题中,我们总是希望设计最优的运输方案,在完成运输任务的前提下,力求运输成本最小等。针对优化问题的数学建模也是数学建模竞赛中一类比较常见的问题,这样的问题常常可以使用数学规划模型进行研究。

数学规划是运筹学的一个重要分支,而线性规划又是数学规划中一部分主要内容。很多实际问题都可以归结为“线性规划”问题。线性规划(Linear Programming,LP)有比较完善的理论基础和有效的求解方法,在实际问题中有极其广泛的应用。

一句话:在什么限制(约束)下变量取什么值可以让的目标最优。

分析:

  1. 求什么?3种产品的产量 – 决策变量
  2. 考虑什么条件?原来料不能用光 and 总加工时间得够用 – 约束条件
  3. 达到什么目标?使得利润最大 – 目标函数

产品的产量应收到某些条件的限制。首先,两种原材料每天的实际消耗量不能超过其可用数量,因此有

步骤:

  1. 分析问题,找出决策变量
  2. 根据问题给出的条件,找出决策变量必须满足的一组线性等式或者不等式约束,即为约束条件。
  3. 根据问题的目标,构造关于决策变量的一个线性函数,即为目标函数。

有了决策变量、约束条件和目标函数这3个要素之后,一个线性规划模型就建立起来了。

求解:

使用Gurobi求解器, Why Gurobi? 还是那句话:专业的事情专业的干

# 1.Gurobi版本
profit = [70, 50, 60]  # 各产品恒单位利润
MatA = [2, 4, 3]    # 各产品单位消耗的A原材料
MatB = [3, 1, 5]   # 各产品单位消耗的B原材料
time = [7, 3, 5]   # 各产品单位生产时间resA = 150  # A原材料每天可用量
resB = 160   # B原材料每天可用量
available_time = 200  # 每天可用生产时间from gurobipy import *
m = Model("maximize_profit") # 给模型起个名字
# 变量
x = m.addVars(3, vtype=GRB.CONTINUOUS, name="x")
# 目标
m.setObjective(sum(profit[i]*x[i] for i in range(3)), GRB.MAXIMIZE)
# 约束
m.addConstr(sum(MatA[i]*x[i] for i in range(3)) <= resA, "c0")
m.addConstr(sum(MatB[i]*x[i] for i in range(3)) <= resB, "c1")
m.addConstr(sum(time[i]*x[i] for i in range(3)) <= available_time,  "c2")m.optimize()
print("-----------------------------------------------------------------")
print("最大化利润为: ", m.objVal, "元")
# 检查模型是否存在最优解
if m.status == GRB.OPTIMAL:# 输出每种产品的生产数量for i in range(3):print(f'产品{i+1} 生产数量: {x[i].x} 公斤')

根据结果答:生产A产品15.90公斤,B产品29.54公斤,不生产C产品时利润最大2590.90元

注:如果大家安装Gurobi失败,可以先用python的pulp库做替代。

PuLP 是一个开源的 Python 语言线性规划建模库。它提供了构建线性规划(LP)、整数规划(IP)以及混合整数规划(MIP)模型的能力。PuLP 不自带求解器,而是作为一个接口层,可以与多个第三方求解器结合使用,包括但不限于 COIN-OR 的 CBC、GLPK、Gurobi、CPLEX 等。用户可以通过 PuLP 定义变量、约束条件和目标函数,并选择合适的求解器来解决问题。Pulp默认的求解器是CBC。

在全球最著名的专业优化器评比网站 Decision Tree for Optimization Software (plato.asu.edu/bench.html) 中,Gurobi 比其他大规模优化器有明显优势。

相关文章:

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中&#xff0c;人们常常会遇到各种优化问题。例如&#xff0c;在生产经营中&#xff0c;我们总是希望制定最优的生产计划&#xff0c;充分利用已有的人力、物力资源&#xff0c;获得最大的经济效益&#…...

SpringBoot security 安全认证(二)——登录拦截器

本节内容&#xff1a;实现登录拦截器&#xff0c;除了登录接口之外所有接口访问都要携带Token&#xff0c;并且对Token合法性进行验证&#xff0c;实现登录状态的保持。 核心内容&#xff1a; 1、要实现登录拦截器&#xff0c;从Request请求中获取token&#xff0c;从缓存中获…...

详解WebRTC rtc::Thread实现

rtc::Thread介绍 rtc::Thread类不仅仅实现了线程这个执行器&#xff08;比如posix底层调用pthread相关接口创建线程&#xff0c;管理线程等&#xff09;&#xff0c;还包括消息队列&#xff08;message_queue)的实现&#xff0c;rtc::Thread启动后就作为一个永不停止的event l…...

阿赵UE学习笔记——13、贴花

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。这次介绍一种特殊的材质类型&#xff0c;贴花。 一、获取贴花资源 在没有分析贴花的原理之前&#xff0c;可以先去获得一些免费的贴花资源来使用&#xff0c;比如在Quixel上面就有专门的一个资源…...

简单说说mysql的日志

今天我们通过mysql日志了解mysqld的错误日志、慢查询日志、二进制日志&#xff0c;redolog, undolog等。揭示它们的作用和用途&#xff0c;让我们工作中更能驾驭mysql。 redo 日志 如果mysql事务提交后发生了宕机现象&#xff0c;那怎么保证数据的持久性与完整性&#xff1f;…...

如何在CentOS安装DataEase数据分析服务并实现远程访问管理界面

如何在CentOS安装DataEase数据分析服务并实现远程访问管理界面 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 202…...

HTTP请求传递参数方式【2024-02-01】

1、HTTP请求传递参数分类 1.1、按照请求方式分类 GET方法:通过查询字符串&#xff08;Query String&#xff0c;每个参数由参数名和参数值组成&#xff0c;使用等号 连接&#xff0c;不同参数之间使用 & 符号分隔&#xff09;的方式或直接将参数放在URL中来传递参数POST…...

Error: Projects must list all files or use an ‘include‘ pattern.

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

移动应用开发的方式

移动应用开发的方式(三种) Native App&#xff1a; 本地应用程序&#xff08;原生App&#xff09; Web App&#xff1a;网页应用程序&#xff08;移动web&#xff09; Hybrid App&#xff1a;混合应用程序&#xff08;混合App&#xff09; hybrid应用场景 1、微信公众号&…...

C#学习笔记_类(Class)

类的定义 类的定义是以关键字 class 开始&#xff0c;后跟类的名称。类的主体&#xff0c;包含在一对花括号内。 语法格式如下&#xff1a; 访问标识符 class 类名 {//变量定义访问标识符 数据类型 变量名;访问标识符 数据类型 变量名;访问标识符 数据类型 变量名;......//方…...

壹[1],Xamarin开发环境配置

1&#xff0c;环境 VS2022 注&#xff1a; 1&#xff0c;本来计划使用AndroidStudio&#xff0c;但是也是一堆莫名的配置让人搞得很神伤&#xff0c;还是回归C#。 2&#xff0c;MAUI操作类似&#xff0c;但是很多错误解来解去&#xff0c;且调试起来很卡。 3&#xff0c;最…...

SAM:基于 prompt 的通用图像分割模型

Paper: Kirillov A, Mintun E, Ravi N, et al. Segment anything[J]. arXiv preprint arXiv:2304.02643, 2023. Introduction: https://segment-anything.com/ Code: https://github.com/facebookresearch/segment-anything SAM 是 Meta AI 开发的一款基于 prompt 的通用视觉大…...

2024美赛数学建模C题思路+模型+代码+论文

2024美赛A-F题思路代码模型论文&#xff1a;2.2开赛第一时间更新&#xff0c;获取见文末名片 美赛流程以及经验分享 今天主要和大家分享一下我之前参加美赛的经验&#xff0c;主要分两部分来讲。一部分是美赛流程&#xff0c;另一部分是美赛经验。 一 美赛流程 比赛前&#x…...

npm run serve和npm run dev的区别

1. 功能&#xff1a;通常&#xff0c;"npm run serve"用于启动开发服务器&#xff0c;提供实时的开发环境&#xff0c;支持自动重新加载和热模块替换。这样可以在开发过程中实时查看代码更改的效果。而"npm run dev"可以是一个自定义的指令&#xff0c;用于…...

已解决:winform开发中删除某方法导致窗体设计报错

一、报错截图 二、解决方案 第一步&#xff0c;点击上图的转到代码 第二步&#xff0c;注释掉报错的部分&#xff08;代码前面加//&#xff09; 第三步&#xff0c;重新编译 最后&#xff0c;恢复正常...

开源软件的影响力

开源软件如何推动技术创新 开源软件通过开放源代码,为全球开发者提供了共同的平台,促进了协作、交流,并推动了软件技术的创新和发展。以下是一些关键方面的分析: 透明度与信任: 开源软件的源代码是公开可见的,这种透明度带来了更高水平的信任。开发者和用户能够审查代码,…...

postgresql lc_ctype不同值之间的转换

LC_CTYPE 用于决定字元是否为数字,字母,空格,标点符号,及大小写等[1]。将 LC_CTYPE 设为「C」表示 isupper(c) 或 tolower(c) 等 C 语言函数[2]仅针对 US-ASCII 范围内的字元给出预期结果。因为像 upper()、lower() 或 initcap 这类型的Postgres SQL 语句是在libc 函数上实…...

纸盒生产ERP软件怎么样?常用纸盒生产ERP系统有哪几种

市场上的纸盒种类繁多&#xff0c;这些差异化的商品对应多元化的销售渠道和营销策略&#xff0c;日常的经营管理工作较为繁琐。而纸盒生产涉及原材料、发料、车间、工时评估、排产、质检、委外、工单等诸多流程&#xff0c;想要随时掌握各环节进度&#xff0c;及时处理存在的问…...

2024年重庆市考报名照上传失败的原因

2024年重庆市考报名照需要根据以下要求生成&#xff1a; 1、近期6个月&#xff0c;免冠证件照。 2、照片背景白底或者蓝底或者红底背景。 3、照片文件jpg格式&#xff0c;大小在20KB以下 4、照片像素大小&#xff0c;295*413像素 5、照片必须使用审核工具审核后才能上传...

2023年出版的新书中提到的《人月神话》(202402更新)(1)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...