数模方法论-线性规划

一、基本概念

        在实际生产过程中,人们经常面临如何有效利用现有资源来安排生产,以实现最大经济效益的问题。这类问题构成了运筹学的一个重要分支——数学规划,而线性规划(Linear Programming, LP)是数学规划中的一个关键领域。线性规划是一种用于解决优化问题的数学方法,其主要目标是最大化或最小化一个线性目标函数,同时满足一系列线性约束条件。

目标函数

          线性规划的目标是优化一个线性目标函数。假设有n个决策变量x_1, x_2, \ldots, x_n,目标函数可以表示为:

\text{Maximize (or Minimize)} \quad z = c_1 x_1 + c_2 x_2 + \cdots + c_n x_n

        其中,c_1, c_2, \ldots, c_n是目标函数的系数。

约束条件

线性规划问题需要满足一组线性约束条件。这些约束条件可以是以下形式的线性不等式或等式:

a_{11} x_1 + a_{12} x_2 + \cdots + a_{1n} x_n \leq b_1\\ a_{21} x_1 + a_{22} x_2 + \cdots + a_{2n} x_n \leq b_2\\ \vdots\\ a_{m1} x_1 + a_{m2} x_2 + \cdots + a_{mn} x_n \leq b_m

        其中,a_{ij}是约束条件中的系数,b_i 是约束条件的常数项。

非负约束

        通常情况下,线性规划问题要求所有的决策变量都是非负的,即:

x_i \geq 0 \quad \text{for} \; i = 1, 2, \ldots, n

标准形式

        为了便于求解,线性规划问题通常会被转化为标准形式。标准形式要求:

  • 目标函数为最大化形式:

\text{Maximize} \quad z = c_1 x_1 + c_2 x_2 + \cdots + c_n x_n \\

  • 所有约束条件为等式形式:

a_{11} x_1 + a_{12} x_2 + \cdots + a_{1n} x_n = b_1 \\ a_{21} x_1 + a_{22} x_2 + \cdots + a_{2n} x_n = b_2 \\ \quad \vdots \\ a_{m1} x_1 + a_{m2} x_2 + \cdots + a_{mn} x_n = b_m \\

  • 所有决策变量非负:

x_i > 0 \quad \text{for} \ i = 1, 2, \ldots, n

图1 《数学建模算法与应用》(第二版)中的例题

二、求解方法

线性规划的求解方法包括:

  • 单纯形法(Simplex Method):这是最常用的线性规划求解方法,通过在一个多面体的顶点上移动来寻找最优解。
  • 内点法(Interior-Point Method):这是一种通过迭代在可行区域的内部寻找最优解的方法,适用于大规模问题。

现在的数模竞赛都是使用软件进行求解,首先需要列出线性规划的标准形式,然后再编写求解程序,例如求解以下线性规划问题:

1、将问题转化成标准形式

2、编写求解代码

Python代码:

import numpy as np
from scipy.optimize import linprog# 定义目标函数系数
f = [-2, -3, 5]# 定义约束矩阵和约束向量
A = [[-2, 5, -1], [1, 3, 1]]
b = [-10, 12]# 定义等式约束矩阵和等式约束向量
A_eq = [[1, 1, 1]]
b_eq = [7]# 调用 linprog 进行线性规划
result = linprog(c=f, A_ub=A, b_ub=b, A_eq=A_eq, b_eq=b_eq, bounds=[(0, None)]*3)# 提取结果
x = result.x
y = -result.funprint("x:", x)
print("y:", y)

matlab代码: 

f=[-2; -3; 5];
a=[-2,5,-1;1,3,1]; b=[-10;12];
aeq=[1,1,1];
beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
x, y=-y

三、应用实例

线性规划可以应用于多个实际问题,包括:

  • 生产调度:如何安排生产以最小化成本或最大化利润。
  • 运输问题:如何将货物从多个供应点运输到多个需求点,以最小化运输成本。
  • 金融投资:如何在不同的投资组合中分配资金,以最大化收益或最小化风险。

1、生产调度问题

        农作物的种植策略(2024国赛c题目):该问题可以使用线性规划来求解,思路可参考下面的文章2024 年高教社杯全国大学生数学建模竞赛C题—农作物的种植策略(讲解+代码+成品论文助攻,均已更新完毕)_农作物的替补与互补性-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/qq_41489047/article/details/141961294

2、投资的收益和风险

 1、问题假设(符合假设和条件假设)

  2、模型分析与建立

 

 

3、 模型求解

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import linprog# 初始化变量
a = 0# 准备绘图
plt.figure()
plt.ion()  # 开启交互模式while a < 0.05:# 定义目标函数系数c = [-0.05, -0.27, -0.19, -0.185, -0.185]# 定义不等式约束矩阵和向量A = np.hstack((np.zeros((4, 1)), np.diag([0.025, 0.015, 0.055, 0.026])))b = a * np.ones(4)# 定义等式约束矩阵和向量A_eq = [1, 1.01, 1.02, 1.045, 1.065]b_eq = 1# 定义下界bounds = [(0, None)] * 5# 求解线性规划result = linprog(c, A_ub=A, b_ub=b, A_eq=[A_eq], b_eq=[b_eq], bounds=bounds)# 提取结果x = result.xQ = -result.fun# 绘图plt.plot(a, Q, '*k')# 更新变量a += 0.001# 设置标签和标题
plt.xlabel('a')
plt.ylabel('Q')
plt.show()

matlab代码:

clc,clear
a=0;
hold on
while a<0.05c=[-0.05,-0.27,-0.19,-0.185,-0.185];A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];b=a*ones(4,1);Aeq=[1,1.01,1.02,1.045,1.065];beq=1;LB=zeros(5,1);[x,Q]=linprog(c,A,b,Aeq,beq,LB);Q=-Q;plot(a,Q,'*k');a=a+0.001;
end
xlabel('a'),ylabel('Q')

4、分析结果

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

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

相关文章

Facebook的虚拟现实计划:未来社交的全新视角

随着科技的不断进步&#xff0c;虚拟现实&#xff08;VR&#xff09;正逐步成为我们日常生活的一部分。作为全球领先的社交平台&#xff0c;Facebook正在大力投入虚拟现实技术&#xff0c;以重新定义社交互动的方式。本文将深入探讨Facebook的虚拟现实计划&#xff0c;分析其如…

网络高级(学习)2024.9.11

目录 Modbus库函数 1.初始化和释放函数 2.功能函数 3.功能案例 Modbus RTU 1.特点 2.协议格式 3.编程思路 Modbus库函数 1.初始化和释放函数 modbus_t* modbus_new_tcp(const char *ip, int port) 功能&#xff1a;以TCP方式创建Modbus实例&#xff0c;并初始化 参数…

蓝桥杯3. 压缩字符串

题目描述 实现一个算法来压缩一个字符串。压缩的要求如下&#xff1a; 需要判断压缩能不能节省空间&#xff0c;仅在压缩后字符串比原字符串长度更短时进行压缩。 压缩的格式是将连续相同字符替换为字符 数字形式&#xff0c;例如 "AAABCCDDDD" 变为 "A3BC2D…

ffmpeg编译连接报错 undefined reference to `uncompress‘

答案&#xff08;添加-lz到链接选项&#xff09;&#xff1a; -lz问题&#xff1a; Consolidate compiler generated dependencies of target cap_save [ 50%] Linking CXX executable cap_save /usr/bin/ld: /home/jn/Desktop/3rdParty/libs/ffmpeg/lib/libavcodec.a(cscd.o…

基于vue框架的城市智慧地铁管理系统73c2d(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,站点查询,车次线路,站点周边 开题报告内容 基于Vue框架的城市智慧地铁管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速和人口的不断增长&#xff0c;城市交通压力日益增大。地铁作为城市公共交通的重要…

C++--模板

1 泛型编程 如何将Swap实现乘成一个通用的交换函数 void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char& left, char&…

Docker 的安装和使用

参考资料&#xff1a; 通俗易懂了解什么是docker?Docker 教程 | 菜鸟教程Ubuntu 22.04 安装 DockerDocker 超详细基础教程WSL2 支持 systemctl 命令systemd 和 systemctl 是什么&#xff1f;使用正确的命令重启 WSL 子系统Ubuntu 修改源镜像方法Docker 中出现 ‘/etc/resolv.…

深入理解Java虚拟机:Jvm总结-Java内存区域与内存溢出异常

第二章 Java内存区域与内存溢出异常 2.1 意义 对于C、C程序开发来说&#xff0c;程序员需要维护每一个对象从开始到终结。Java的虚拟自动内存管理机制&#xff0c;让java程序员不需要手写delete或者free代码&#xff0c;不容易出现内存泄漏和内存溢出问题&#xff0c;但是如果…

【网络安全】-文件上传漏洞

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录 前言 什么是文件上传漏洞&#xff1f; 文件上传的验证与绕过&#xff1a; 1.前端js验证&#xff1a;   Microsft Edge浏览器&#xff1a; Google Chrome浏览器&#xff1a; 2.后端…

LeetCode之常用函数

收集了 LeetCode 面试经典150 & LeetCode 热题100中常用的函数与技巧 LeetCode之数组/字符串 地址链接 public static void main(String[] args) {// 1. 数组排序int[] array new int[]{3, 7, 5, 2};Arrays.sort(array);// 结果: [2, 3, 5, 7]System.out.println(Arrays.…

【video clips 专栏 2 -- videopad 视频拼接】

文章目录 常用视频剪辑工具推荐videopad 视频拼接如何在 VideoPad 中并排放置两个视频 转自&#xff1a;https://www.imangodoc.com/CHxTwkIj.html 常用视频剪辑工具推荐 请阅读&#xff1a;https://www.videosoftdev.com/cn/free-video-editing-software-no-watermark vide…

Linux 基础命令-文件与目录操作

在 Linux 操作系统中&#xff0c;文件和目录是组织和管理数据的核心单元。作为一个命令行驱动的操作系统&#xff0c;Linux 提供了一系列强大且灵活的命令来操作文件和目录。掌握这些命令不仅是管理 Linux 系统的基础&#xff0c;也是高效使用 Linux 环境的关键。 一、文件与目…

Taro实现微信小程序自定义拍照截图识别

效果图&#xff1a; 代码&#xff1a; <template><view class"lary-top" :style"{ height: ${topBarHight}px }"></view><Camerav-show"!canvasShow"class"camera-photo":style"{width: ${info.windowWidt…

LIO-SAM如何保存地图

一、找到LIO-SAM配置文件&#xff0c;路径为config/params.yaml&#xff0c;修改以下两项参数&#xff1a; savePCD: true # https://github.com/TixiaoShan/LIO-SAM/issues/3savePCDDirectory: "/home/slam/catkin_ws/src/maps" …

Http带消息头两种请求办法

API接口最近经常碰到&#xff0c;协调几个乙方来回对接&#xff0c;把我折腾晕了&#xff0c;索性自己写一个小的工具&#xff0c;导入历史数据。 获取平台免登录token 接口说明 URL Path&#xff1a;gateweb/bigm-dm/openApi/ologin/openLogin 说明&#xff1a;第三方免登…

Java架构师实战篇Redis亿级数据统计方案

目录 1 Redis亿个keys数据统计方案2 Redis聚合统计(SUNIONSTORE)3 Redis排序统计(LRANGE)4 值状态统计(bitmap)4.1 位图简介4.2 应用场景4.3 常用的命令4 基数统计(SADD)5 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 Redis亿个keys数据统计方案 在 Web 和移动…

Spring Cloud Gateway中的常见配置

问题 最近用到了Spring Cloud Gateway&#xff0c;这里记录一下这个服务的常见配置。 spring:data:redis:host: ${REDIS_HOST:xxx.xxx.xxx.xxx}port: ${REDIS_PORT:2345wsd}password: ${REDIS_PASS:sdfsdfgh}database: ${REDIS_DB:8}session:redis:flush-mode: on_savenamespa…

.NET 一款用于解密web.config配置的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

SpringBoot2:请求处理原理分析-接口参数解析原理(argumentResolvers)

一、知识回顾 我们知道&#xff0c;接口的参数&#xff0c;一般都要配上注解来一起使用。 不同的参数注解&#xff0c;决定了传参的方式不同。 为什么会这样&#xff1f; 如果让你设计接口参数解析&#xff0c;你会怎么做&#xff1f; 首先&#xff0c;我们知道方法参数是形…

软件设计基础知识(5)

1.Cache与主存的地址映像需要专门的硬件自动完成&#xff0c;使用硬件来处理具有更高的转换速率。 2.指令寄存器用来存放当前正在执行的指令&#xff0c;对用户是完全透明的。 3.构造哈夫曼树的过程是首先从给出的权值集合中找出最小的两个权值。 4.PC(程序计数器) AR(地址寄…