数学建模 - 线性规划入门: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 比其他大规模优化器有明显优势。

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

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

相关文章

代码随想录 Leetcode77.组合

题目&#xff1a; 代码&#xff08;首刷看解析 2024年2月1日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> res;vector<int> path;void backtracing(int n, int k, int startIndex) {if (path.size() k) {res.push_back(path);re…

【Linux C | I/O模型】Unix / Linux系统的5种IO模型 | 图文详解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

嵌入式学习 Day16

一. 共用体 形式&#xff1a; union 共用体名 { 成员列表; //各个变量 }; //表示定义一个共用体类型 注意&#xff1a; 1.共用体 初始化 --- 只能给一个值&#xff0c;默认是给到第一个成员变量的 2.共用体成员变量 共用体用的数据最终存储的 --…

了解Ansible自动化运维工具及模块的使用

一、Ansible的相关知识 1.1 Ansible工具的了解 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。Ansible…

aspose-words基础功能演示

我们在Aspose.Words中使用术语“渲染”来描述将文档转换为文件格式或分页或具有页面概念的介质的过程。我们正在讨论将文档呈现为页面。下图显示了 Aspose.Words 中的渲染情况。 Aspose.Words 的渲染功能使您能够执行以下操作&#xff1a; 将文档或选定页面转换为 PDF、XPS、H…

gitlab操作手册

git操作篇 1. 项目克隆 git clone gitgitlab.test.cn:pro/project1.git2. 项目的提交 注&#xff1a;如果要查看文件的状态可以用git status命令&#xff1a; 如上图所示&#xff0c;文件已经修改了。 3. 项目的推送 git push origin feature/test01注&#xff1a;如果要查…

【遥感入门系列】遥感分类技术之遥感解译

遥感的最终成果之一就是从遥感图像上获取信息&#xff0c;遥感分类是获取信息的重要手段。同时遥感图像分类也是目前遥感技术中的热点研究方向&#xff0c;每年都有新的分类方法推出。 本小节主要内容&#xff1a; 遥感分类基本概念常见遥感分类方法 1 遥感分类概述 遥感图…

【Qt】Json在Qt中的使用

Json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛用于互联网应用程序之间的数据传输。JSON基于JavaScript中的对象语法&#xff0c;但它是独立于语言的&#xff0c;因此在许多编程语言中都有对JSON的解析和生成支持。…

C++ 音视频流媒体浅谈

C流媒体开发 今天就浅浅聊一下C流媒体开发 流媒体开发中最常见的是FFmpeg&#xff08;编解码器&#xff09; 业务逻辑主要是播放器了&#xff08;如腾旭视频 爱奇艺等等&#xff09; FFmpeg是一个开源的音视频处理工具集&#xff0c;可以用于处理、转换和流媒体传输音视频…

python-自动化篇-办公-文件-加解密

解说 要使⽤Python进⾏⽂件的加密和解密&#xff0c;可以使⽤第三⽅加密库&#xff0c;如cryptography或pycryptodome。 ⼀个基本的⽰例&#xff0c;演⽰如何使⽤cryptography库对⽂件进⾏加密和解密&#xff1a; 安装cryptography库&#xff1a; pip install cryptography⽂…

运行程序时出现“无效类”的解决方法

最近做开发时&#xff0c;遇到了一个奇怪的问题&#xff0c;打开的烧录软件突然出现了“无效类”的字样&#xff0c;以前打开却时正常的&#xff0c;真的是莫名其妙。 然后找了很久的解决办法&#xff0c;终于在某一天运行一个系统软件出现了同样的问题&#xff0c;有提示到WMI…

Kore.ai获10亿元融资,提供定制化类ChatGPT助手

1月31日&#xff0c;生成式AI和企业对话平台Kore.ai在官网宣布&#xff0c;获得1.5 亿美元&#xff08;约10.7亿元&#xff09;融资。本次由FTV Capital 领投&#xff0c;英伟达等跟投。 Kore.ai主要提供银行、医疗、零售、营销、人力资源等多种领域的&#xff0c;定制化类Cha…

【Qt学习笔记】(二)信号和槽

信号和槽 1 信号和槽概述2 信号和槽的使用3 可视化生成槽函数4 自定义信号和槽5 带参数的信号和槽6 信号与槽的连接方式7 信号与槽的断开8 使用 Lambda 表达式来定义槽函数 1 信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮&q…

在Android Studio中配置OpenCV

在Android Studio中配置OpenCV 1 下载OpenCV2 导入OpenCV模块3 修改配置4 增加依赖5 拷贝libopencv_java.so6 Activity中加入代码1 下载OpenCV 下载OpenCV的Android包并解压。 2 导入OpenCV模块 在Android应用中,导入OpenCV模块。 导入目录时选择Opencv Android中的sdk目…

杠杆交易在伦敦金市场的优势与风险

伦敦金作为黄金市场的灯塔&#xff0c;每天吸引着全球投资者的目光。伦敦金的特殊地位使得以它为基准的杠杆交易成为众多投资者追逐的目标。在这篇文章中&#xff0c;我们将深入探讨伦敦金杠杆交易的奥秘&#xff0c;带你揭开这一盛宴的神秘面纱。 伦敦金杠杆交易的核心在于通过…

bs4模块

bs4模块与案例 使用指南 bs4&#xff0c;全称BeautifulSoup 4&#xff0c;是Python中一个强大的网页解析库&#xff0c;它可以帮助我们方便地从网页中提取数据。bs4将复杂HTML文档转换成树形结构&#xff0c;每个节点都是Python对象&#xff0c;所有对象可以归纳为4种&#xf…

vue动态修改侧边菜单栏宽度

1.添加可修改宽度的dom元素 <div style"background: #f5f7fa;padding: 20px 10px;"><label>菜单宽度 </label><el-input v-model"sideWidth" placeholder"请输入宽度值" style"width: 100px"/> px<el-but…

PMP认证是如何评估项目管理能力的?

当提及项目管理能力时&#xff0c;PMP认证是广泛接受的评估标准。作为项目管理领域的权威认证&#xff0c;PMP评估了申请人在项目管理方面的专业能力和实践经验。那么&#xff0c;PMP认证如何评估项目管理能力呢&#xff1f;本文将揭示PMP认证的评估体系和流程。 PMP认证的评估…

Notion 开源替代品:兼容 Miro 绘图 | 开源日报 No.162

toeverything/AFFiNE Stars: 25.6k License: NOASSERTION AFFiNE 是下一代知识库&#xff0c;将规划、排序和创建集于一身。它是一个注重隐私、开源、可定制且即插即用的替代方案&#xff0c;可以与 Notion 和 Miro 相媲美。主要功能和优势包括&#xff1a; 超融合&#xff1…

Android系统-应用程序中的View框架

源码分析基于Android 7 应用程序中的View框架如图所示 1. View和ViewRoot 单单从名称看很容易让人产生误解&#xff0c;因为ViewRoot并不属于View树的一分子。源码上ViewRoot和View对象也没有继承关系。更准确说ViewRoot理解为View输的管理者&#xff0c;ViewRoot有一个mView成…