数学建模-线性规划讲解(Matlab版本)

引言

相信不少小伙伴刚开始接触数学建模时,第一个学习的算法就是运筹学的重要分支--数学规划,而数学规划当中重要的分支就是线性规划了。在这里笔者参考了司守奎和孙玺菁老师的《数学建模算法与应用》(第三版)这本书,以此来讲讲关于线性规划当中的基础知识。

作为数学建模的基础算法,线性规划学习起来的难度并不大。在1947年提出线性规划当中的单纯形法后,线性规划趋于成熟,在工业界和商业界中都发挥着较为重要的作用。

线性规划模型的形式

一般而言,线性规划模型的形式有

  1. 线性规划模型的一般形式

简写形式为 

2.也能用向量的形式表示

3.还能用矩阵的形式表示 

解的概念

一般线性规划问题的数学标准型为 

这里有两个重要概念为 

可行解

满足上图约束条件的解x=[X_1,X_2,...,X_n]^T,称为线性规划问题的可行解,
而使上图中的目标函数达到最大值的可行解称为最优解

可行域:

所有可行解构成的集合称为问题的可行域,记为R′

例题

我们来看一道相当经典的问题

机床厂生产甲、乙两种机床’每台机床销售后的利润分别为4千元与3千元。生产甲机床需用A、B机器加工’加工时间分别为每台2h和每台1h;生产乙机床需用A、B、C三种机器加工’加工时间均为每台1h°若每天可用于加工的机器时数分别为A机器10h、B机器8h和C机器7h’问该厂应生产甲、乙机床各几台才能使总利润最大?

问题分析

决策变量

我们将甲机床和乙机床的产量分别定义为x_1x_2

目标函数:

我们开始分析这个问题时,就得先看看题目的目标是什么。这里是要让总利润最大化,那么我们确定影响目标的目标函数,目标函数

maxZ=4x_1+3x_2(即要最大化Z

约束条件

我们发现生产甲机床需要用到A机器和B机器共同生产才行,它需要A机器2小时,B机器1小时,对于乙机器呢,它则需要A,B,C各个工作一小时,再根据题目中各个机器的工作时长我们可以得到以下关系式 

  • 2x_1+x_2\leq 10
  • x_1+x_2\leq8
  • x_3\leq7

模型建立:

而我们刚刚所构建的数学模型为

这个就是我们所构建的数学模型啦,下面我们用matlab来实现一下我们所设计的数学模型

clc,clear;
f=[-4,-3];
a=[2,1;1,1;0,1];
b=[10,8,7];
[x,y]=linprog(f,a,b);
x,y=-y;
disp(y)

运行结果: 


Optimal solution found.x =26>> disp(y)26

注意!!!matlab当中的标准形式为求解最小值,在求解最大值时,我们得加个负号。 

建立线性模型的三个步骤

通过这样一道经典的例题,我们总结一下求解思路

  1. 分析问题,找出决策变量。

  2. 根据问题所给定的条件,找出决策变量必须要满足的一组线性等式或者不等式约束,即为约束条件。

  3. 根据问题的目标,构造关于决策变量的一个线性函数,即为目标函数。

走完这三步后,我们就能构建起我们的一个数学模型了

在做完我们的建模后,我们要对我们所构建的模型还要对我们的模型做一个灵敏度分析。

灵敏度分析

概念

所谓的灵敏度分析就是指对系统因周围条件变化而显示出来的敏感程度分析。其实就是对我们的数学模型和算法进行优化 。

实现方式

我们通常会提出这两个疑问,并去解答我们的疑问

  1. 如果参数a_{ij},b_i,c_j中的一个或者几个发生了变化’现行最优方案会有什么变化?
  2. 将这些参数的变化限制在什么范围内’原最优解仍是最优的?

一些见解 

 在实际应用当中,给定参变量一个步长使其重复求解线性规划问题,以观察最优解的
变化情况,不失为一种可用的数值方法,特别是使用计算机求解时。(对于这一点,笔者在国赛时感触较大,虽然不是应用在线性规划上

对于数学模型的灵敏度分析,我们在后面的博文当中会有所涉及的,感兴趣的同学可以等一下后面的文章,可以与笔者交流一下心得。

Matlab求解

求解线性规划模型已经有比较成熟的算法。对-般的线性规划模型’常用的求解方
法有图解法、单纯形法等;虽然针对线性规划的理论算法已经比较完善,但是当需要求解
的模型的决策变量和约束条件数量比较多时’手工求解模型是十分繁杂甚至不可能的’通
常需要借助计算机软件来实现。

目前’求解数学规划模型的常用软件有Matlab,Python,Lingo等多种,笔者后续文章中出现的
数学规划模型主要使用Matlab软件求解。Matlab求解数学规划问题(包括线性规划、整
数规划和非线性规划)采用两种模式:基于求解器的求解方法和基于问题的求解方法

1.基于求解器的求解方法

线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是
小于等于号也可以是大于等于号。为了避免这种形式多样性带来的不便,Matlab基于求
解器的求解方法中规定线性规划的标准形式为

代码

[x,fval] =linprog(f,A,b)
[x,fval] =linprog(f,A,b,Aeq,beq)
[x,fcal] =linPr○g(f,A,b,Aeq,beα,lb,ub)
%%x返回决策向量的取值
%%5fval返回目标函数的最优值
%%f为价值向量
%%A,b对应线性不等式约束
%%Aeq’beq对应线性等式约束
%%lb和ub分别对应决策向量的下界向量和上界向量

 2.基于问题的求解

Matlab基于问题的求解数学规划方法,首先需要用变量和表达式构造优化问题,然后
solve函数求解。具体求解步骤可以通过下面例子看出来,或者在命令窗口运行doc
optimproblem
,看Matlab的详细帮助。

代码

clc,clear
prob= optimroblem(‘ObjectiveSense','max')%目标函数最大化的优化间题
c =[4;3];b= [10:8;7];
a=[2,1;1,1;0,1]?
x= optimvar('x',2,'LowerBound',0); %决策变量
prob.Objective = c'*x; %目标函数
prob.Constraints.con 玉 a*x<=b; %约束条件
[sal,fval,flag,out]=solve(prob)% fval返回最优值
Bol.x %显示决策变量的值

这几行代码是基于刚刚那个例子给出的基于问题求解的方式,而我们刚刚在例题当中所给出的解答方案呢,则是使用了基于求解器的求解方式。

应用

线性规划在军事作战,经济分析, 经营管理,工程技术等领域都发挥着十分重要的作用,在讲完整数规划后,笔者会专门写一篇文章,讲解相关应用和例题求解

总结

这是笔者关于数学建模相关的文章,略有不足,请各位读者多多指教,笔者也会在后期推出更为复杂和有意思的数学模型以及算法内容

最后不要忘记关注一下笔者,谢谢各位小伙伴。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTML5】html5开篇基础(3)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

多元函数微分学基础题

这是基础题&#xff01;&#xff01;原则上必须要在第一轮初学并做完课后习题之后再做这个基础题&#xff0c;不能有错误&#xff08;马虎大意除外&#xff09;或无法解答。如有错误&#xff0c;该单元需要重学&#xff01;&#xff01; 多元函数微分学填空题 一、填空题 如…

在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型

在深度学习模型的训练过程中&#xff0c;学习率作为一个关键的超参数&#xff0c;对模型的收敛速度和最终性能有着重大影响。传统方法通常采用统一的学习率&#xff0c;但随着研究的深入&#xff0c;我们发现为网络的不同层设置不同的学习率可能会带来显著的性能提升。本文将详…

基于Java的停车场管理微信小程序 停车场预约系统【源码+文档+讲解】

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、停车场管理微…

巴鲁夫rfid读头国产平替版——高频RFID读写器

随着RFID技术的不断发展&#xff0c;国内RFID企业的数量也在不断地变多&#xff0c;国产RFID读写器的质量也越来越高。具有着价格实惠、质量可靠等特点&#xff0c;成为了可平替国外RFID产品的首要选择。健永科技的高频RFID读写器JY-H830&#xff0c;是一款可平替巴鲁夫rfid读头…

基于SSM的“实习支教中小学学校信息管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“实习支教中小学学校信息管理系统”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 主页 注册页面 师资力量界面 个…

机器学习(5):机器学习项目步骤(二)——收集数据与预处理

1. 数据收集与预处理的任务&#xff1f; 为机器学习模型提供好的“燃料” 2. 数据收集与预处理的分步骤&#xff1f; 收集数据-->数据可视化-->数据清洗-->特征工程-->构建特征集和数据集-->拆分数据集、验证集和测试集 3. 数据可视化工作&#xff1f; a. 作用&…

【ArcGIS Pro实操第三期】多模式道路网构建(Multi-model road network construction)原理及实操案例

ArcGIS Pro实操第三期&#xff1a;多模式道路网构建原理及实操案例 1 概述1.1 原理 2 GIS实操2.1 新建文件并导入数据2.2 创建网络数据集2.3 设置连接策略&#xff08;Setting up connectivity policies&#xff09;2.4 添加成本&#xff08;Adding cost attributes&#xff09…

使用dockerfile来构建一个包含Jdk17的centos7镜像(构建镜像:centos7-jdk17)

文章目录 1、dockerfile简介2、入门案例2.1、创建目录 /opt/dockerfilejdk172.2、上传 jdk-17_linux-x64_bin.tar.gz 到 /opt/dockerfilejdk172.3、在/opt/dockerfilejdk17目录下创建dockerfile文件2.4、执行命令构建镜像 centos7-jdk17 : 不要忘了后面的那个 .2.5、查看镜像是…

毕业设计——springboot+netty+websocket实现一个简单的ChatGpt机器人聊天

作品详情 WebSocket是html5开始浏览器和服务端进行全双工通信的网络技术。在该协议下&#xff0c;与服务端只需要一次握手&#xff0c;之后建立一条快速通道&#xff0c;开始互相传输数据&#xff0c;实际是基于TCP双向全双工&#xff0c;比http半双工提高了很大的性能&#x…

AURIX单片机示例:开发入门与点亮LED

文章目录 目的模板工程Blinky_LED示例链接总结 目的 这个例程比较简单&#xff0c;主要通过这个例程来介绍 AURIX™ Development Studio(ADS) 和 iLLD 库来开发 AURIX 系列单片机一些入门的内容。一些更为基础的资料等内容可以参考下面文章&#xff1a; 《英飞凌 AURIX TriCo…

翻译:Recent Event Camera Innovations: A Survey

摘要 基于事件的视觉受到人类视觉系统的启发&#xff0c;提供了变革性的功能&#xff0c;例如低延迟、高动态范围和降低功耗。本文对事件相机进行了全面的调查&#xff0c;并追溯了事件相机的发展历程。它介绍了事件相机的基本原理&#xff0c;将其与传统的帧相机进行了比较&am…

完全二叉树的节点个数 C++ 简单问题

完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层&#xff0c;则该层包含 1~ 2h 个节点。 示例 1&#xff…

基于微信小程序的智慧社区的设计与实现

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

使用 PowerShell 命令更改 RDP 远程桌面端口(无需修改防火墙设置)

节选自原文&#xff1a;Windows远程桌面一站式指南 | BOBO Blog 原文目录 什么是RDP&#xfffc;开启远程桌面 检查系统版本启用远程桌面连接Windows 在Windows电脑上在MAC电脑上在Android或iOS移动设备上主机名连接 自定义电脑名通过主机名远程桌面使用Hosts文件自定义远程主…

LeetCode 427. 建立四叉树

LeetCode 427. 建立四叉树 &#xff08;题干略&#xff09; """ # Definition for a QuadTree node. class Node:def __init__(self, val, isLeaf, topLeft, topRight, bottomLeft, bottomRight):self.val valself.isLeaf isLeafself.topLeft topLeftself.t…

进阶美颜功能技术开发方案:探索视频美颜SDK

视频美颜SDK&#xff08;SoftwareDevelopmentKit&#xff09;作为提升视频质量的重要工具&#xff0c;越来越多地被开发者关注与应用。接下俩&#xff0c;笔者将深入探讨进阶美颜功能的技术开发方案&#xff0c;助力开发者更好地利用视频美颜SDK。 一、视频美颜SDK的核心功能 …

HarmonyOS鸿蒙系统开发应用程序,免费开源DevEco Studio开发工具

DevEco Studio 是华为为 HarmonyOS 和 OpenHarmony 开发者提供的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;它基于 IntelliJ IDEA Community 版本打造&#xff0c;提供了代码编辑、编译、调试、发布等一体化服务。 一、DevEco Studio支持系统 DevEco Studio支持…

windows系统中后台运行java程序

在windows系统中后台运行java程序&#xff0c;就是在启动java程序后&#xff0c;关闭命令行行窗口执行。 1、命令行方式 命令行方式运行java程序 启动脚本如下&#xff1a; echo off start java -jar app.jar exit启动后的结果如下 这种方式下&#xff0c;会马上启动一个命…

【初阶数据结构】排序——选择排序

目录 前言选择排序堆排序 前言 对于常见的排序算法有以下几种&#xff1a; 下面这节我们来看选择排序算法。 选择排序 基本思想&#xff1a;   每一次从待排序的数据元素中遍历选出最大&#xff08;或最小&#xff09;的元素放在序列的起始位置&#xff0c;直到全部待排序…