2022年天府杯全国大学生数学建模竞赛B题第一“君”情解题全过程文档及程序

news2024/10/7 14:25:02

2022年天府杯全国大学生数学建模竞赛

B题 第一“君”情

原题再现:

  近日俄罗斯和乌克兰的冲突日益加剧,不难发现现代战争仍然是以人为主的战争,并未进入到全机械化的战争状态。那么在战争中军事物资的补给显得十分重要,中国古代兵法中讲到“兵马未动,粮草先行”就是这一点的体现。现代战争中,士兵往往不会一次性带上大量的食物和弹药,如果陷入了较为持久的战斗状态则需要调动补给站中的后勤部队快速补充物资。
  在某地的补给站附近,同时有 4 支部队需要补充物资,而补给站有 A,B 两种类型的飞机,A 类飞机有 6 架,最大载重 13 吨,飞行速度 260km/h;B 类飞机有 10 架,最大载重 20 吨,飞行速度 50km/h.飞机可以沿直线前往部队投放物资,且每次只能前往一个目的地投放物资,投放结束需要回到补给站再前往下一个部队投放物资。
  每支部队可以接受多于所需要的物资,但接受的物资数量不能超过所需数量的 150%。飞机装卸也需要时间,A 类飞机装卸均为 20min;B 类飞机装载货物需要 30min,卸载货物需要 40 分钟。
  由于军情紧急,物资全部运送完成的时间不得超过该部队的最晚需求时间。4 支部队的坐标、请求物资的数量最晚的需求时间见表 1。现在该补给站邀请你作为飞机调度的决策者,请解决以下问题:
  (1)假设旧补给站被敌军炸毁,需要紧急建设新补给站。不考虑其他因素,仅仅考虑能最大程度给各个部队提供支援,请建立合适的数学模型确定新补给站的修建地点。
  (2)由于种种原因,新补给站被修建在坐标为(10,30)的位置,请建立数学模型确定飞机的调用方案。
  (3)各个部队接到上级要求需要再收到补给后继续移动前往下一个地点执行任务,因此不能携带超过所需数量 110%的物资,且由于搬运过程中 A 类飞机会有5%-10%的损耗,B类飞机有3%-7%的损耗。请建立数学模型确定转运方案。

在这里插入图片描述

整体求解过程概述(摘要)

  军事物资的补给是战争中一项非常重要的工作,一场战争陷入较为持久的战斗时则需要调动补给站中的后勤部队快速补充物资,所以研究战争物资调度问题很有意义。
  针对问题一,首先将题目要求转化为相应的数学问题,以新建补给站到各个部队的总距离最短表示最大程度给各个部队提供支援,由此可以建立无约束优化模型,自变量即新建补给站的位置坐标。本文采用两种方法求解无约束问题,分别为梯度下降法和鲸鱼优化算法。两种算法求解的结果分别为(10.49,5.05)和(9.0055,4.9992),对比发现,鲸鱼优化算法求解的最优位置正是部队 A122,因此从战争因素考虑将补给站设置在(10.49,5.05)最好,到四个部队的总距离为 15.3737km。
  针对问题二,首先,将题目要求的确定飞机调用方案转化为最小化完成所有运输任务的时间,并以此为目标函数,最晚需求时间、飞机超出物资数量要求、飞机总数量为约束条件建立单目标整数规划模型,明确自变量为 6 架飞机 A 和10 架飞机 B 的调度方案。考虑智能优化算法在本问中对产生新解的要求过高,本问采用贪心算法求解模型二。结合两种飞机的属性,将每次调度均选择距离补给站最远的部队和优先考虑 B 类飞机为贪心方式,求解得到的结果是派遣 4 架 B飞机去部队 A102、5 架 A 飞机和 1 架 B 飞机去部队 A121、7 架 A 飞机去部队B121 和 5 架飞机去部队 B404,完成所有任务的运输时间为 102.01 分钟。最后,改动贪心算法的贪心方式对模型进行检验,结果显示,改变后的贪心算法并不能改变最短时间,但是会影响多出物资的数量,证明了模型二是可靠的。
  针对问题三,首先,在问题二模型的基础上,引入最小化多出物资为第二个目标函数,调整约束条件超出物资的数量,并考虑飞机运输过程中的损失因素,引入损失因子概念,将不确定的损失因子规定为范围内的期望值,建立多目标整数规划模型。模型三是多目标优化问题,因此贪心算法在模型三中存在很大的限制,本文采用模拟退火算法求解问题三,将最小化完成运输任务的时间转化为约束条件,并考虑新解的产生固定在问题的解空间内,经过 150 次迭代后算法找到的最优解为:派遣 2 架 A 飞机和 3 架 B 飞机去部队 A102、4 架 B 飞机去部队A122、6 架 A 飞机和 1 架 B 飞机去部队 B121、4 架 A 飞机和 2 架 B 飞机去部队B404。此外,模拟退火求解的物资总数为334.3吨,相比于贪心算法的结果370.375吨提高了 10.79%,最短时间仍然可以达到 102.01 分钟。最后,通过调整损失因子的值对参数损失因子进行灵敏度检验,结果显示,当物资损失的程度在期望值的小范围内波动时,模型求解的结果并不会存在很大差异,但是当损失程度过大时,飞机的调度方案将会发生大变化,此时完成所有运输任务的最短时间将会增加 46.98%。

模型假设:

  一、 假设飞机在运送过程中都是装满出发的,不存在一架飞机未装满就出发的情况;
  二、 假设所有的飞机可以同时起飞、同时出发,并且支持并行;
  三、 问题三的补给站位置就是第二问的补给站位置;
  四、 飞机在飞行过程中不会存在耽误时间,默认用给定速度恒定飞行;

问题分析:

  本题要求我们作为飞机调度的决策者,解决三个不同情况下的优化问题。解决这类纯优化类问题,解题思路主要分为两步:第一步明确题目的目标函数,找到题目要求的约束条件;第二步采用优化方法求解模型;对于问题一无约束优化问题,可以借助梯度的方法求解,也可以采用智能优化算法进行求解。对于问题二有约束的整数规划问题,最简单的求解办法就是指定贪心规则,采用贪婪算法求解。对于问题三,需要考虑约束条件的变化以及双目标的选择,本文采用模拟退火算法进行求解。
   问题一的分析
  问题一中假设旧的补给站被敌军炸毁,需要紧急建设新的补给站。不考虑其它因素,仅仅考虑能最大程度给各个部队提供支援,该题的思路分为两个步骤:
  1. 确定题目要求的考虑最大程度给各个部队提供支援的意义,将建站问题转化为数学问题。对附件表格中的数据进行分析,我们发现可以将最大程度给各个部队提供支援理解为新建站到四个部队的总距离最小,于是我们就可以建立无约束优化模型;
  2. 求解无约束的方法各种各样,最主流的方法就是基于梯度的方法,例如梯度下降法、牛顿法和拟牛顿法等等,不基于梯度的方法例如演化算法和群智能算法等等,常见的有模拟退火、遗传算法和粒子群算法等等,本文选择了一种求解能力相较于常规算法更强的群智能优化算法——鲸鱼算法。并对两种算法求解的结果进行了对比分析,给出了在不同现实情况下的建站方案。
   问题二的分析
  在问题二中,由于种种原因,新补给站被修建在坐标为(10,30)的位置,让我们建立数学模型确定飞机的调用方案。在知道新建补给站的坐标位置后,我们就可以使用给定的坐标位置来调度飞机运送物资了,至于如何调度飞机就是第二问需要确定的。同第一问思路类似,我们必须先找到合适的目标函数和约束条件,从而将飞机调度问题转化为规划问题。本文需要考虑多种因素,比如物资全部运送完成的时间不得超过该部队的最晚需求时间、所有飞机的存在最大载重等等。很明显,这是一个整数规划模型,自变量是 16 架飞机的调度情况。目标函数题目并没有明确给出,但是在考虑到实际情况下将目标函数确定为最小化完成运输时间。解决整数规划的方法有很多,例如模拟退火,贪婪算法等等均可,如何选择最优的解决方法需要考虑题目所给的约束条件,本文采用贪婪算法来求解规划模型,相较于模拟退火算法,贪婪算法更加简单,并且贪婪算法不需要像模拟退火一样每次生成在解空间的解,贪婪算法是逐步迭代的,每一步都取最优的,最后总结果即是最优的。最后,我们对贪婪算法求解的结果进行了检验分析,给出了更加精确的改进方案。
  问题三的分析
  问题三是在问题二的基础上加上新的约束条件,即题目明确规定了各个部队需要在收到补给后继续移动前往下一个地点执行任务,因此每个部队所存储的物资量不能超过所需数量的 110%。且在第三问新增加了搬运过程的损耗,且 A 类飞机的损耗和 B 类飞机的损耗不同,这就对模型求解的结果造成了一定的随机性,对于这类带有随机性的问题,我们一般解决的办法有两种。第一种就是将随机性因素转化成固定的因素,从而减小复杂度,但是这样做的结果就是模型的鲁棒性不强。另一种方法就是保持随机性,且每次的决策都需要考虑随机因素,显然这样做将会加大题目的难度。除此之外,在第三问中我们考虑到最优调度不仅仅是时间上最优,调度的结果也需要最优,于是我们引入最小化多出物资为第二个目标函数,建立了多目标整数优化模型。为了简化求解的难度,我们先固定了损耗因子的值,并将最小化运输时间转化为约束条件,从而使双目标模型变为单目标模型,采用模拟退火算法求解模型,最后对模型的损耗因子参数进行了灵敏度分析。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

1. clc   
2. clear   
3.    
4. % 绘图函数  
5. % draw  
6.    
7. % 求最优位置  
8.    
9. % 鲸鱼算法  
10.% 参数初始化  
11.a = 2; % 初始游动因子的值,后续会不断缩减  
12.MAX_iter = 200; % 迭代次数  
13.iter = 1; % 初始化迭代次数  
14.b = 3; % 螺旋系数  
15.number = 100; % 定义鲸鱼的数量  
16.fitt = zeros(number,1); % 初始化适应度  
17.x = zeros(number,2); % 初始化种群  
18.l_min = ‐100; %自变量下界  
19.l_max = 100; % 自变量上界  
20.for i = 1:number % 初始化种群和适应度  
21.    x(i,1) = l_min + rand(1) * (l_max ‐ l_min);  
22.    x(i,2) = l_min + rand(1) * (l_max ‐ l_min);  
23.    fitt(i) = fit(x(i,:));  
24.end   
25.fit_best = min(fitt); % 记录最优适应度  
26.ind = find(fitt == min(fitt),1);  
27.X_best = x(ind,:); % 记录最优位置  
28.X_BEST = []; % 记录全局  
29.FITT = []; % 记录全局  
30.%% 迭代开始  
31.while iter <= MAX_iter  
32.    for i = 1:number  
33.        if rand() < 0.5 % 采用游动捕食  
34.            a = 2 * (1 ‐ iter / MAX_iter); % 更新游动因子  
35.            r = rand(1,2); % 随机数  
36.            C = 2 * r; % 计算摆动因子  
37.            A =  2 * r * a ‐ a; % 计算收敛因子  
38.            if sqrt(A(1)^2 + A(2)^2) < 1 % 采取包围捕食  
39.                D = abs(C .* X_best ‐ x(i,:)); % 计算最优距离  
40.                x(i,:) = X_best ‐ A .* D; % 这里是位置更新  
41.                if x(i,1) < l_min || x(i,1) > l_max % 判断是否超
出边界
42.                    x(i,1) = l_min + rand(1) * (l_max ‐ l_min);
43.                end   
44.                if x(i,2) < l_min || x(i,2) > l_max  
45.                    x(i,2) = l_min + rand(1) * (l_max ‐ l_min);
46.                end   
47.            else % 采取随机游动  
48.                rand_ind = unidrnd(20); % 随机抽取鲸鱼  
49.                D = abs(C .* x(rand_ind,:) ‐ x(i,:));  
50.                x(i,:) = x(rand_ind,:) ‐ A .* D;  
51.                if x(i,1) < l_min || x(i,1) > l_max % 判断是否超
出边界  
52.                    x(i,1) = l_min + rand(1) * (l_max ‐ l_min);
53.                end   
54.                if x(i,2) < l_min || x(i,2) > l_max  
55.                    x(i,2) = l_min + rand(1) * (l_max ‐ l_min);
56.                end   
57.            end   
58.        else % 采用气泡捕食  
59.            D_1 = abs(X_best ‐ x(i,:));  
60.            l = unifrnd(‐1,1); % 随机数  
61.            x(i,:) = D_1 * exp(b * l) * cos(2 * pi * l) + X_best
;  
62.            if x(i,1) < l_min || x(i,1) > l_max % 判断是否超出边
界  
63.                x(i,1) = l_min + rand(1) * (l_max ‐ l_min);  
64.            end   
65.            if x(i,2) < l_min || x(i,2) > l_max  
66.                x(i,2) = l_min + rand(1) * (l_max ‐ l_min);  
67.            end   
68.        end   
69.        fitt(i) = fit(x(i,:)); % 每更新一次位置,求解一次适应度  
70.    end   
71.    disp(['当前迭代次数为:',num2str(iter)])   
72.    % 迭代完一次更新数据  
73.    fit_best = min(fitt); % 更新当前代数中种群的最优解  
74.    ind = find(fitt == min(fitt),1);  
75.    X_best = x(ind,:); % 更新最优位置  
76.    X_BEST = [X_BEST;X_best]; 
77.    FITT = [FITT;fit_best];  
78.    iter = iter + 1;  
79.end   
80.Fit_Best = min(FITT);  
81.ind_best = find(FITT == min(FITT),1);  
82.X_BE = X_BEST(ind_best,:);  
83.disp(['找到的最优解为:',num2str(Fit_Best)])   
84.disp(['最优解对应的 X:',num2str(X_BE)])   
85.figure(2)   
86.plot(1:MAX_iter,FITT)  
87.title('种群迭代图')   
88.xlabel('迭代次数')   
89.ylabel('适应度值') 

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

Opencv(图像处理)-基于Python-图像的基本运算-给图片加水印

1. 图像运算概念2. 图像运算2.1 add()2.2 substract()部分代码示例&#xff1a; 2.3 multiply()/divide()2.4 addWeighted()部分代码展示 2.5 与/或/非bitwise_and()bitwise_or()bitwise_not()bitwise_xor部分代码展示 3.给一幅图像添加水印 1. 图像运算概念 在计算机的世界里…

git工作流实践

常见分支命名 远程仓库的分支&#xff1a;主干分支master, 开发分支dev&#xff0c;发布分支release 个人开发分支&#xff1a;特性分支feature, 缺陷修改分支bugfix&#xff0c; 热更新分支 hotfix 一般工作流如下 创建个人本地开发分支&#xff1a; git checkout -b feat…

Benewake(北醒) 快速实现TFmini-i-RS485与电脑通信操作说明

目录 一、前言二、工具准备1. USB-RS485 转接器2. TFmini-i-RS4853. 兆信直流电源4.连接线、绝缘胶带、螺丝刀5. PC&#xff1a;Windows 系统6. 串口助手软件 三、连接方式1. USB-RS485 转接板接口说明2. TFmini-i-RS485 引脚定义3. 连接图 四、TFmini-i-RS485 与电脑通信操作说…

cisp pte模拟题

1.信息搜集 本题共三个key 端口 1433 27689 存活ip 192.168.85.137 2.访问网站27689进行信息搜集 一个登录框&#xff0c;sql注入失败&#xff0c;暴力破解失败 扫描目录 发现三个文件robots.txt ,web.config 除了robots.txt,其他都访问不了 访问robots.txt,发现一个file参数…

ChatGPT实际上是如何工作的?

ChatGPT是如何工作的&#xff1f; 我们深入研究了广受欢迎的AI聊天机器人ChatGPT的内部运作方式。如果您想了解它是如何进行生成式人工智能魔术的&#xff0c;请继续阅读。 谷歌、Wolfram Alpha和ChatGPT都通过一个单行文本输入框与用户进行交互&#xff0c;并提供文本结果。谷…

Ubuntu18.04下搭建Ardupliot开发环境

本文参考的文章: -Ardupilot开发环境搭建&#xff08;Ubuntu18.04&#xff0c;20190407&#xff09; -Ardupilot环境搭建 1、下载文件 1.在GitHub上下载ardupilot文件&#xff0c;网速很慢的时候科学上网。 git clone https://github.com/ArduPilot/ardupilotcd ardupilotgit…

音乐推荐系统实战

文章目录 1. 项目背景2. 数据处理2.1 统计用户播放总量2.2 统计歌曲播放总量2.3 过滤出实验数据2.4 加入音乐详情信息2.5 查看音乐集情况2.6 查看用户播放量的分布 3. 推荐系统3.1 排行榜单排序3.2 基于歌曲相似度的推荐&#xff08;协同过滤&#xff09;3.3 基于矩阵分解&…

市面上流行的 5 大网页制作工具总结

这里是对市面上流行的 5 大网页制作工具的总结&#xff1a; 1. 即时设计 即时设计是一款国内新一代在线协作设计工具&#xff0c;具备原型、设计、交付、协作和资源管理等功能&#xff0c;适合个人用户和团队使用。它提供丰富的社区设计资源和原型模板&#xff0c;支持 UI/UX…

Python 的十大特性

摘要 在了解 Python 的特性之前&#xff0c;我们首先要了解 Python 编程语言是什么。Python 编程语言是世界上发展最快的编程语言。这一高级通用编程语言提供了广泛的实际应用&#xff0c;并且是一种非常流行的认证。 Python 可以让程序员更加高效地工作和集成系统。Python 的…

vue中如何通过iframe方式加载本地的vue页面

这个需求一般很少能遇到&#xff0c;只要说去了iframe&#xff0c;很多人就会唾弃。 但是有时候的确无法避免使用它&#xff0c;当iframe的特性带来的优势远远高于自己用div模拟的时候 啥时候需要用到iframe加载本地的vue文件呢 我在写一个demo&#xff0c;我需要demo效果模拟…

【接口测试】神器JMeter

‍1 JMeter是什么 Apache JMeter是Apache组织开发的一款开源软件&#xff0c;是一款非常好用的接口测试工具。它的特点是开源免费&#xff0c;简单好用。 我们在测试过程需要做接口测试的话就可以使用它&#xff0c;也可以用来批量造数据&#xff0c;接下来我们就来看看JMete…

Django框架之验证码简单实现

是一种方式防止csrf的策略。在用户注册、登录页面的时候使用&#xff1b;为了防止暴力请求&#xff0c;减轻服务器压力。 目录 安装pillow库 验证码显示 引入类库 视图方法 创建路由 创建表单 模板内容 模板路由 模板视图 视图验证 路由 引入 验证视图 效果 成功…

从7K到20K,在测试行业摸爬滚打的这5年,想个2023年还没找到工作的提个醒~

我是一名转IT测试人&#xff0c;我的专业是化学&#xff0c;去化工厂实习才发现这专业的坑人之处&#xff0c;化学试剂害人不浅&#xff0c;有毒&#xff0c;易燃易爆&#xff0c;实验室经常用丙酮&#xff0c;甲醇&#xff0c;四氯化碳&#xff0c;接触多了&#xff0c;吃个饭…

JMeter 接口测试教程,详解 HTTP Request 取样器和 fiddler 调试技巧!

目录 前言&#xff1a; 一、HTTP Request取样器介绍 二、使用HTTP Request取样器进行接口调试 1. 创建测试计划&#xff08;Test Plan&#xff09;和线程组&#xff08;Thread Group&#xff09; 2. 配置HTTP Request取样器参数 3. 添加断言 4. 运行接口测试 三、结合f…

Linux 企业级安全原理和防范技巧

Linux 企业级安全原理和防范技巧 1. 企业级Linux系统防护概述1.1 企业级Linux系统安全威胁1.2 企业级Linux系统安全立体式防范体系1.2.1 Linux文件系统访问安全1.2.2 Linux进程安全1. 进程的种类2. 进程管理方法 1.2.3 Linux用户管理安全1. 管理用户及组文件安全2. 用户密码管理…

【云计算】云存储是什么意思?与本地存储有什么区别?

云计算环境下&#xff0c;衍生了云存储、云安全、云资源、云管理、云支出等等概念。今天我们就来了解下什么是云存储&#xff1f;云存储与本地存储有什么区别&#xff1f; 云存储是什么意思&#xff1f; 云存储是一种新型的数据管理方式&#xff0c;它通过网络将大量不同类型、…

UGUI进阶知识[二十九]循环GridView

节省内存的常用滑动列表还有一种形式&#xff0c;上下滑动的GridView。这种格式的滑动列表可用于移动设备的背包&#xff0c;仓库&#xff0c;商店UI等数据可能海量从而导致产生特别多但又看不见的UI的情况。 于是基于 UGUI进阶知识[八]循环利用滑动列表的循环ListView工程做了…

普源1G带宽4通道10G采样率数字示波器MSO8104

超高性价比七合一 集成示波器在如今的集成设计领域&#xff0c;一款集成度较高的综合示波器已经成为设计工程师必不可少的得力工具。 MSO8000 系列数字示波器&#xff0c;它集 7 种独立仪器于一体&#xff0c;包括一台示波器、一台 16 通道逻辑分析仪、一台频谱分析仪、一台任…

煤矿电子封条建设实施方案算法 yolov7

煤矿电子封条建设实施方案算法通过yolov7网络模型深度学习技术&#xff0c;煤矿电子封条建设实施方案算法作为一种智能化安全新模式被广泛应用于各类场景中。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研究团队希望它能够同时支持移动 GPU 和从边缘到云端的…

高完整性系统:Separation Logic for Automated Verification

目录 1. INTRODUCTION TO SEPARATION LOGIC 分离逻辑 1.1 霍尔推理&#xff08;Hoare Reasoning&#xff09; 1.2 堆指针的影响 1.3 全局和局部推理&#xff08;Global and Local Reasoning&#xff09; 1.4 组合推理&#xff08;Compositional Reasoning&#xff09; 1.…