360易托管建站工具/域名估价

360易托管建站工具,域名估价,做国际物流需网站,网页客服系统源码目录​​​​​​ 前言 一 优化模型的类型 二 线性规划1 线性规划2 三 0-1规划 总结 前言 数学建模主要是将问题转化为模型,然后再以编程的形式输出出来 算法都知道,数学建模也需要用到算法,但是不是主要以编程形式展示,而是…

目录​​​​​​

前言

一 优化模型的类型

 二  线性规划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.mzph.cn/pingmian/72459.shtml

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

相关文章

网络空间安全(32)Kali MSF基本介绍

前言 Metasploit Framework&#xff08;简称MSF&#xff09;是一款功能强大的开源安全漏洞检测工具&#xff0c;被广泛应用于渗透测试中。它内置了数千个已知的软件漏洞&#xff0c;并持续更新以应对新兴的安全威胁。MSF不仅限于漏洞利用&#xff0c;还包括信息收集、漏洞探测和…

目标在哪里?——寻找人生的意义与方向

在职场中&#xff0c;许多人都会经历这样的困惑&#xff1a;工作看似顺利&#xff0c;却逐渐失去了成就感和成长感。一位在500强企业工作的学员就遇到了这样的问题。她曾考虑过转型做培训&#xff0c;但苦于找不到明确的切入点&#xff0c;对未来的目标感到迷茫。她不禁问自己&…

C++类与对象——拷贝构造与运算符重载

拷贝构造函数和赋值运算符重载就是C类默认六个函数之二。 拷贝构造函数&#xff1a; 如果⼀个构造函数的第⼀个参数是自身类类型的引用&#xff0c;且任何额外的参数都有默认值&#xff0c;则此构造函数 也叫做拷贝构造函数&#xff0c;也就是说拷贝构造是⼀个特殊的构造函数…

Linux:进程程序替换

目录 前言 一 进程程序替换的概念 二 进程程序替换的原理 三 为什么需要进行进程程序替换 四 如何进行进程程序替换 1. 进程替换函数 ➊ execl()函数 ➋execv()函数 ➌execlp()函数 ➍execle()函数 ➎execve()* 前言 一般情况下&#xff0c;对应的语言写的程序只…

Umi-OCR 全家桶

介绍&#xff1a; 下载 访问官网地址 https://github.com/hiroi-sora/umi-ocrhttps://github.com/hiroi-sora/umi-ocr 点击下载&#xff08;.exe 文件 安装即可&#xff09; 桌面使用 安装完毕后去安装路径下点击 Umi-OCR.exe &#xff08;默认不会生成桌面的快捷方式&…

2023南京理工大学计算机复试上机真题

2023南京理工大学计算机复试上机真题 2023南京理工大学计算机复试机试真题 历年南京理工大学计算机复试上机真题 在线评测&#xff1a;传送门&#xff1a;pgcode.cn 括号匹配二 题目描述 苗苗今天刚刚学会使用括号&#xff0c;不过他分不清小括号&#xff0c;中括号&#…

Axios简单说明,快速上手

Ajax&#xff1a;异步的JavaScript和XML 作用&#xff1a; 数据交换异步交互 Axios&#xff1a;就是对原生Ajax进行封装&#xff0c;简化书写&#xff0c;快速开发 使用逻辑&#xff1a; 首先要安装Axios&#xff0c;可以通过npm在项目中安装&#xff1a; 打开命令行工具…

模型评估——acc、P、R、F值、交叉验证、K折交叉验证

模型评估&#xff1a;对预测函数地预测精度的评估。 多重回归&#xff1a;涉及三个及其以上的变量的回归问题。 评估模型的方法&#xff1a; 交叉验证&#xff1a;将数据集分成测试集和训练集&#xff0c;可以采用3&#xff1a;7或者2&#xff1a;8的比例方式进行划分&#xff…

JVM 2015/3/15

定义&#xff1a;Java Virtual Machine -java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行 自动内存管理&#xff0c;垃圾回收 数组下标越界检测 多态 比较&#xff1a;jvm/jre/jdk 常见的JVM&…

Compose 实践与探索九 —— DrawModifier 解析

本篇讲解 DrawModifier 的基本用法与代码原理&#xff0c;介绍原理的目的在于可以判断绘制与绘制的关系&#xff0c;绘制与布局的关系。知道达成某种绘制效果应该怎么写&#xff0c;面对复杂的 Modifier 链时对效果有大致预判。 DrawModifier 管理绘制&#xff0c;需要以负责管…

华为手机助手输入连接码时光标乱跳

问题复现&#xff1a;输入12345678&#xff0c;光标自动跳转导致连接码出现乱序情况。 千万别试着找出规律&#xff0c;已试动态规律非大牛误轻试 问题原因&#xff1a; 想啥呢&#xff1f;华哥的软件又不是我开发我要Know Why干啥 我只需关心解决方案 &#xff08;可能时输入…

Windows 11 安装Docker Desktop环境

1、确认CPU开启虚拟化 打开任务管理器&#xff0c;切换到“性能”选项卡&#xff0c;查看 CPU 信息。若“虚拟化”状态显示为“已启用”&#xff0c;则表示虚拟化已开启&#xff1b;若显示为“已禁用”&#xff0c;则需要在启动时进入 BIOS 开启虚拟化设置&#xff08;若显示已…

STM32如何精准控制步进电机?

在工业自动化、机器人控制等场合&#xff0c;步进电机以其高精度、开环控制的特性得到了广泛应用。而在嵌入式系统中&#xff0c;使用STM32进行步进电机的精确控制&#xff0c;已成为开发者的首选方案之一。 本文将从嵌入式开发者的角度&#xff0c;深入探讨如何基于STM32 MCU…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 JavaWeb 项目的部署:从开发环境到生产环境

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开发环境…

算法题(98):大数加法

审题&#xff1a; 本题需要我们解决大数加法&#xff0c;大数直接运算会超出范围&#xff0c;所以我们需要转换成字符串一位位进行计算 思路&#xff1a; 方法一&#xff1a;高精度加法 我们将两个大数的每一个位分别计算&#xff0c;然后头插到answer字符串中即可 解题&#x…

C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)

BitComet GreenLight,内网黄灯转绿灯 (HighID), 增加p2p连接率提速下载-CSDN博客 前两天写个这个&#xff0c;每次开机关机后要重来一遍很麻烦的索性写个自动化。 先还是按照上面的教程自己制作一遍&#xff0c;留下Luck 以及 路由器相关的 端口记录信息。 &#xff08;因为自…

python---序列 (str,list,tuple)

一、 序列类型入门 python的数据类型&#xff1a;int float bool str 运算符 - * / % > < and or not 流程控制ifelsewhilefor掌握python的2大容器类型数值类型&#xff08;3个&#xff09;&#xff1a;int float bool序列类型容器(3个)&#xff1a;str &#xff1a; …

CSS元素层叠顺序规则

CSS元素层叠顺序规则 看图说话总结: background/borderz-index(<0)blockfloatinline/inline-blockz-index(0,auto)z-index (>0)

ArcGIS Pro将有文字标注底图切换为无标注底图(在线地图图源)

今天介绍一下在ArcGIS Pro将有标注的地形底图换成无标注的底图。 大家在这项目底图时候会经常调用ArcGIS Pro自带的地形图&#xff0c;但是这个地形图自带是有注记的&#xff0c;如下图。 如何更改&#xff0c;才可以调用无文字注记的呢&#xff1f; 对于一个已经切好图的有注记…

Xxl-Job学习笔记

目录 概述 核心架构 核心特点 应用场景 什么是任务调度 快速入门 获取源码 初始化调度数据库 基本配置 数据源datasource 邮箱email&#xff08;可选&#xff09; 会话令牌access token 启动调度中心 启动执行器 依赖 yaml基本配置 XxlJobConfig类配置 定义执…