数学建模 第一节

devtools/2025/3/17 16:43:25/

目录​​​​​​

前言

一 优化模型的类型

 二  线性规划1

      线性规划2

 三 0-1规划

总结


前言

数学建模主要是将问题转化为模型,然后再以编程的形式输出出来
算法都知道,数学建模也需要用到算法,但是不是主要以编程形式展示,而是利用模型和有关于数学建模的公具加以展示,这里主要以问题的形式引出数学建模的知识点和编程知识点


一 优化模型的类型

1线性规划
2非线性规划
3正数规划
4"0-1"规划

 二  线性规划1

问题一:合理利用线材问题
现在要做100套钢架,每套用长为2.9m,2.1m,1.5m的元钢各一根,已知原料长7.4m,问应该如何进行下料使用的原材料更小



首先我们要知道我们这个题目明显是一个取最优解的问题,那么就是一个切割最优问题
其次就要去找题目里面的未知量,找到未知量,才可以构建出模型
模型的确定是根据目标函数和约束条件确定的

为什么是线性规划
我们需要确定如何从7.4米长的原料中切割出所需的2.9米、2.1米和1.5米的元钢,以最小化浪费的材料。这个问题可以表示为一个线性规划问题,因为:

  • 目标函数是线性的:我们的目标是最小化使用的原料根数,即 x1​+x2​+x3​+x4​+x5​+x6​,这是一个线性函数。

  • 约束条件是线性的:我们需要满足切割出的元钢总数至少为100根的条件,这些条件可以表示为线性不等式,例如 2.9*x1​+2.9*2x2​+2.9x5​≥100。

  • 变量是非负的:切割的套数 xi​ 必须是非负整数。

那么我们知道这些未知量了,我们就要构建模型,首先我们来构建一个表格

方案1方案2方案3方案4方案5
2.912❌ 1❌ 
2.1❌ ❌ 221
1.5312❌ 3

首先我们有这么多种的方案,每一个方案构建的总值都是小于7.4m的
这里讲讲为什么不考虑使用2.9 2.1 1.5各自取一根不加?
📌 结论

  1. 单看浪费大小不够,要考虑整体优化
  2. 如果一个方案的浪费比其他方案都大,通常不会被选入最优解
  3. 有些方案即使浪费稍多,但可能是拼凑 100 套钢架的“必要补充”,可以加入
  4. 最好的方法是用整数规划(ILP)求解,让计算机自动决定是否要用某个方案

💡 所以,加不加 6.5m 方案?可以加,但最终让计算机决定! 🚀
因为我们看倒数第二个,这个是已经到7.1了,之前都是7.4,7.3,7.2,这个是7.1所以加入,但是我们到第五种方案的时候已经到达了6.6,跨度很大,这个时候,我们就取这个,首先我们电脑是会自己判断这个方案取不取的,这个时候我们加上是为了避免电脑取最优解要用到,保险,这个时候,其实没有必要加这个方案六,每个都取一根,因为我们已经有一个保险的了

即使你加了也没事,因为这个电脑可能不会选择,不考虑这个方案,我们这个题目是要减少浪费的

那么我们要怎么判断是否要加上方案呢?以下是al分析,作者先记下来,方便下次复习看
📌 原则 1:能否减少浪费?

  • 计算当前已有方案的最小浪费(例如,方案 2 只浪费 0.1m)。
  • 如果你的新方案浪费比所有已知方案都多(例如浪费 0.9m),那它几乎不会被选入最优解。
  • ✅ 选择浪费更少的方案,❌ 排除浪费更多的方案

示例对比(假设现有方案最小浪费 0.1m):

方案切割方式总长浪费
方案 22.9m ×2 + 1.5m ×17.3m0.1m ✅(最优之一)
方案 32.1m ×2 + 1.5m ×27.2m0.2m
方案 52.1m ×1 + 1.5m ×36.6m0.8m ❓(可能需要)
你的方案2.9m ×1 + 2.1m ×1 + 1.5m ×16.5m0.9m ❌(比 0.8m 更差,不需要)

🔍 如果新方案的浪费比已有方案大,基本就不会被选取

📌 原则 2:能否帮助满足 100 套需求?

即使方案本身浪费稍多,但如果它能让其他方案更好地拼接成 100 套,也可能有用!

如何判断?

  1. 尝试去掉某个方案,看看是否还能刚好满足 100 套需求。
  2. 如果去掉某个方案会导致解不可行,说明它是必要的,即使它浪费稍多。
  3. 如果所有方案能凑够 100 套,而某个方案总是没被选中,那它可以去掉

💡 结论:如果一个方案不会被用到,或者可以被更优的方案替代,就不取!

📌 实践方法:让 ILP 自动决定

如果你不确定某个方案是否应该加入,可以让整数规划(ILP)自动决定

  1. 先把所有可能的方案(包括 6.5m 方案)都放进去
  2. 让 ILP 计算最优解,如果某个方案没有被选取,说明它不是最优的。
  3. 查看最终结果,看看哪些方案真正被使用了

接下来我们就要把这个模型转换到这歌软件上进行操作

接下来我们就要用到这个LINGO来编写
首先这个sets:和endsets是表示定义一个aa集合,aa集合里面有x这个变量,然后这个1..5就是这个变量的下标

然后这个min就是求解最小值,@sum表示求和,遍历集合aa的里的i,然后紧接着根据这个aa(i)遍历里面的变量
也就是遍历里面aa里面的i,然后这个后面这个是aa集合里面的变量,随着者aa里的i进行改变
下面就是一些约束条件了

@gin(x(i)) 指定 x(i) 必须是整数变量,然后for循环就是遍历这里面的变量,这些变量的值不可以是小数,而是整数

最后就输出90根钢铁了

三  线性规划2

问题二  某昼夜服务的公交路线每天个时间区段都需要的工作人员如下表格,设工作人员分别再各个时间区段一开始上班,并连续工作8小时,问该公交至少需要多少工作人员
 

班次时间需要人数
16:00-10:0060
210:00-14:0070
314:00-18:0060
418:00-22:0050
522:00-2:0020
62:00-6:0030

接下来我们要分这个题目 
首先我们题目问的是总共的工作人员最少,那么就是每个时间段的人我都是不知道那么是多少,删一个题目每一根钢材我都是知道的,我只需要设置出方案数量,然后把这些方案给规划起来求出值
所以我们这里设置的未知量就是每一个时间段的人数,考虑这里面的未知量

接下来我们就分析出了模型,接下来我们就可以编程了


 编程答案

Sets:aa /1..6/: y;bb/1..6/: x;
Endsetsdata:x = 60,70,60,50,20,30;
enddataMin = @sum(aa(i): y(i));y(1) + y(6) >= x(1);
y(2) + y(1) >= x(2);
y(3) + y(2) >= x(3);
y(4) + y(3) >= x(4);
y(5) + y(4) >= x(5);
y(6) + y(5) >= x(6);! 变量必须是整数;
@for(aa(i): @gin(y(i)));

这样才是正确的,答案为14

 三 0-1规划

在一个公司在市东南西三区建立门市部,有7个位置点(Ai,i=1.2.3...7)可供选择,规定:
1)在东区,由A1 A2 A3三个点至多选择两个
2)在西区,由A4 A5两个点至少选择一个
3)在南区,由A6 A7两个点至少选择一个
如果选用Ai点,设备投资估计为bi元,每年获利利润估计为ci元,但是投资总量不可以超过M元,问应该选择哪几个点建立门市部使得年利润最大

首先这个就是典型的0-1问题,每一个点我们都有选择和不选择,1就是选择,0就是不选择
那么我们就要考虑怎么选择就好了

接下来我们就只需要编程就好了

sets:aa/1..7/:b,c,x;
endsetsdata:c = 1,5,7,4,6,8,9; b = 12,56,45,34,32,78,89;M = 200;
enddatamax = @sum(aa(i):c(i)*x(i));
x(1) + x(2) + x(3) <= 2;
x(4) + x(5) >=1;
x(6) + x(7) >=1;
@sum(aa(i):b(i)*x(i)) <= M;
@for(aa(i):@bin(x(i)));

 1  for循环的错误使用

@sum(@for(aa(i):b(i)*x(i))) <= M;

这样是不对的,sum里面已经隐式包括了相加的迭代,所以这么写会出现语法错误 


2  错误提示栏的报错

这个通常是我么缺少了右括号才有的错误

这里的bin函数是直接随机取值,然后转化为01,这样就可以运用到0-1规划


总结

首先我们学习到了线性规划和0-1规划
0-1规划还是很好理解,但是这个线性规划还是有点抽象

首先第一个钢铁问题就是取走最优的部分,你可以看到这个就是把资源浪费最少的放上去,然后最后一个弄一个保险的就好了

第二个就是找出安排时间的问题,我们只需要把相邻的时间段弄出来,然后最后算出最后人数的最小值就好了因为这个是一环扣着一环的

你只需要把问题利用数学模型描述出来,编程就会自动帮你跑出来,也就是C++里面的抽象


http://www.ppmy.cn/devtools/167871.html

相关文章

【后端】【django drf】Django DRF API 编写规范(程序设计规则)

Django DRF API 编写规范&#xff08;程序设计规则&#xff09; 为了确保 Django DRF 代码的可维护性、可扩展性和高质量&#xff0c;API 设计不仅要符合 RESTful 规范&#xff0c;还需要遵循一定的程序设计规则。以下是一些关键的编写规范&#xff0c;以保证代码的清晰性、可…

DeepSeek R1 与 ktransformers:结合苹果 M4 Mac 的 LLM 推理深度分析

引言 大型语言模型&#xff08;LLM&#xff09;的快速发展为人工智能领域带来了革命性变化。DeepSeek R1 和 ktransformers 代表了软件层面的最新突破&#xff0c;而苹果在 2025 年 3 月 12 日发布的 M4 Mac 系列则提供了硬件支持。本文将深入分析这些技术的交汇点&#xff0c…

Git版本控制系统详解

文章目录 一、Git简介二、Git的基本原理三、Git的安装与配置安装配置 四、Git常用指令详解1. git init2. git clone3. git add4. git commit5. git status6. git diff7. git log8. git branch9. git checkout10. git merge11. git pull12. git push 五、Git的进阶用法1. 远程仓…

animes 和 css对比

Anime.js 并不是纯粹的 CSS 动画库&#xff0c;而是一个基于 JavaScript 的动画库。它可以通过操作 DOM 元素的属性&#xff08;如 style、transform、opacity 等&#xff09;来实现动画效果。虽然 Anime.js 的某些功能与 CSS 动画类似&#xff0c;但它的工作原理和功能范围与 …

HTTPS 证书相关

通常涉及到政府机构或官方组织的网站&#xff0c;这类网站对安全性和可信度要求较高&#xff0c;因此在选择 HTTPS 证书时需要特别注意。以下是适合的证书类型&#xff1a; 1. OV&#xff08;Organization Validation&#xff09;证书 适用场景&#xff1a;适用于需要验证组织…

设备管理VTY(Telnet、SSH)

实验目的&#xff1a;物理机远程VTY通过telnet协议登录AR1,ssh协议登录AR2和sw 注意配置Cloud1&#xff1a; 注意&#xff01;&#xff01;博主的物理机VMnet8--IP&#xff1a;192.168.160.1&#xff0c;所以AR1路由0/0/0端口才添加IP&#xff1a;192.168.160.3&#xff0c;每个…

Spring Boot + Vue 基于RSA+AES的混合加密

目录 一、后端实现 二、前端实现&#xff08;Vue2&#xff09; 三、补充 1.增强安全措施 四、最后说明 步骤大致如下&#xff1a; 后端生成RSA密钥对&#xff0c;提供公钥接口。前端请求公钥&#xff0c;生成随机AES密钥和IV。用RSA公钥加密AES密钥&#xff0c;用AES密钥加密…

【ES6】03-Set + Map

本文介绍两种集合 set map 的操作和方法。 目录 1. Set 1.1 set基本使用 1.2 add 1.3 delete 1.4 has 1.5 size 1.6 set转换为数组 1.7 拓展运算符 1.8 for...of 1.9 forEach 1.10 set给数组去重 2. Map 2.1 创建map集合 2.2 set添加元素 2.3 delete删除元素 …