2021数维杯国际赛数学建模-A题思路-新冠疫情

本思路转载于@数模孵化园   此大佬日常更新各种建模比赛的思路!!

先看赛题翻译

2020年初,新型冠状病毒疫情(或称COVID-19)在全球迅速蔓延。根据世 界卫生组织2021年7月31日的报告,新型冠状病毒疫情对人类的影响持续时间可 能比原先预计的更长。在这场疫情的影响下,许多国家遭受了不同程度的经济 损失,各行各业也面临着许多前所未有的困难,全球贸易发展也迎来了许多新 的挑战。

作为贸易发展最重要的环节之一,港航业同样难以幸免。新型冠状病毒疫 情的爆发,暴露出全球港口和航运业在运营、管理等方面缺乏系统协调。尤其 是港口和航运的多维度防疫措施,大大降低了全球港口的运营效率,导致航运 服务日益短缺,并导致整个行业内部发生不可预测的变化。

新冠肺炎对港口的影响:一是随着亚洲部分国家疫情的恢复,接单量持续 上升,造成港口严重拥堵。但在一些港口极度拥堵的情况下,另一些港口的货 运量却变得很小,出现了港口闲置的现象。这使得港口交通的不对称性更加普 遍。其次,新冠肺炎也导致了世界航运能力的缺乏。例如,波罗的海干散货指 数(BDI)在2021年8月20日飙升至4092点,这也是近11年来的最高点。此外, 由于港口服务效率低下和航运市场动荡,新冠肺炎也加剧了全球供应链的不确 定性,导致供应链中断的风险增加。因此,在新冠肺炎时代,对港口作业效率 提出了更高要求。

如今,随着COVID-19的持续肆虐,如何化解防控疫情带来的风险,成为摆 在我们面前的关键问题。

全球港口和航运业的可持续管理。在这种情况下,我们需要重新设计一个高度 灵活的系统和全球网络,以保持利益相关者之间牢固的合作关系,这些利益相 关者包括航运公司、港务局、码头运营商以及物流和港口服务提供商。

为了缓解受新冠肺炎影响的港口作业效率低下的问题,请用数学建模的方 法解决以下五个问题:

问题1:请结合附件1的数据和您的合理假设,从船公司联合对接的角度出发, 提供船公司之间的合作模式,以缓解港口拥堵或港口闲置过多的问题。你应该 深入分析船公司每个周期的每个停靠码头。

问题2:请根据附件1的数据,从码头经营人的角度出发,设计最优的船舶靠港 时间计划,并提出具体的奖惩措施,以有效提高港口的靠港效率。

问题3:请从 港口泊位、码头运营商和航运公司的角度提供船舶停靠策略。这种解决方案需 要在不减少防疫工作时间的前提下,尽量减少船舶在港口的停靠时间。

问题4:您能否提供一种策略,充分考虑一个地区多个港口之间的合作,从而有效减少港口拥堵。

问题5:如果港口安排周末休息1-2天,能否提出一个更通用的港口停靠优化模 型,并用附件1的数据进行论证。

思路:

首先来看附件数据。Sheet1表中运载能力一定是和营收有关;平均停靠小时,可以直接用这个参数;而停靠时间方差则反映了船停靠的不确定性,方差可作为你们的拓展,比如在寻优研究中给予作为代价函数中的一部分,本题没有做相关要求,可以不考虑;Sheet2中是船到港的频率;Sheet3中的时间需要取一个平均时间点,将其作为排队研究的基础数据,这个也可以考虑方差进行拓展研究;Sheet4中是泊位靠泊能力的数据,结合Sheet1中运载能力,我们猜想为能停靠船的最大运载能力限度,就是说船运载能力只有在这限度之下才能停靠该泊位,这里我们也可以在模型假设中写到假设船满载。

来看第一问,上面说到了,运载能力在泊位靠泊能力下的船舶才能停靠,本题为规划问题,通过优化算法进行求解,对于此类问题,由于个体中自变量长度不一,应将每个个体看作为一个方案,通过多目标寻优筛选出最有个体,在本为事船公司联合对接的角度出发,那么就是先确定船固定到一个泊位停靠

数据准备:由于开始停靠的日期是没有给定的,因此这里就假设所有船从第一天开始排,以Sheet2为依据进行推导,可推到出100天每个船停泊的状态,这里设停泊日期为1,其他日期为0,构建一个1127*100的0,1矩阵,最后可取出中间10天时间的矩阵数据用于后文研究,10天只是举个例子

Step1:生成初始个体,个体中基因长度为船数,每个基因位点为固定合作的泊位编号

Step2:遍历每一天,如果当天停靠同一泊位则按Sheet3中平均时间先后排队停靠

Step3:针对每一个体,设置两个目标函数,一个为所有船只等待时间(如果船到达时间有空闲泊位,则无等待时间,如果船到达泊位,仍有船处于停靠时间内,计算等待时间),第二个目标函数为被泊位闲置(这里的泊位闲置可以定义为所有泊位闲置时间总和且闲置时间从1个小时后统计,也可定义为当天被闲置的泊位数量)

Step4:整体框架建议采用模拟退火算法,多目标寻优配合NS-Ⅱ非支配排序

模拟退火算法程序框架:
clear
clc
T=1000; %初始化温度值
T_min=1; %设置温度下界
alpha=0.99; %温度的下降率
num=1000; %颗粒总数
n=2; %自变量个数
sub=[]; %自变量下限
up=[]; %自变量上限
for i=1:numfor j=1:nx(i,j)=;endfx(i,1)=fun(x(i,1),x(i,2));
end
%以最小化为例
[bestf,a]=min(fx);
bestx=x(a,:);
trace(1)=bestf;
while(T>T_min)for i=1:numfor j=1:nxx(i,j)=;endff(i,1)=fun(xx(i,1),xx(i,2));delta=ff(i,1)-fx(i,1);if delta<0fx(i,1)=ff(i,1);x(i,:)=xx(i,:);elseP=exp(-delta/T);if P>randfx(i,1)=ff(i,1);x(i,:)=xx(i,:);endend  endif min(fx)<bestf[bestf,a]=min(fx);bestx=x(a,:);endtrace=[trace;bestf];T=T*alpha;
end
disp('最优解为:')
disp(bestx)
disp('最优值为:')
disp(bestf)
NS-Ⅱ:
function [TT,chrom]=ns2(NN,F1,F2)
% 快速非支配排序
a = 0;
T1 = [];
T2 = [];
chrom=NN;
chrom1 = [];
chrom2 = [];
while a == 0 %根据被支配数进行分级和排序M = [];for i = 1:length(F1)M(i,1) = length(find(F1<F1(i,1)))+length(find(F2<F2(i,1)));%目标函数最小化这里为<,最大化改成>endb1 = [];b2 = [];[b1,b2] = sort(M); %b1返回从小到大排序,b2返回原始序号if  length(chrom)>0 && b1(1) == 0   %无被支配数进入一级用T1矩阵保存T1 = [T1;F1(b2(1)),F2(b2(1))];chrom1 = [chrom1;chrom(b2(1),:)];F1(b2(1)) = [];F2(b2(1)) = [];chrom(b2(1),:) = [];else  %有被支配数进入二级用T2矩阵保存a = 1;T2 = [F1,F2];chrom2 = chrom;end
end
T2 = T2(b2,:);
chrom2 = chrom2(b2,:);if size(T1,1) > 2  %T1矩阵不用进行拥挤度调整排序,直接对T2进行排序调整即可y = yongji(T1);%拥挤度for i = 2:size(T1,1)if y(i-1) > y(i)T1(i-1:1:i,:) = T1(i:-1:i-1,:); %根据拥挤度调整排序,如果后者优于前者则反转顺序chrom1(i-1:1:i,:) = chrom1(i:-1:i-1,:);endend
end
if length(T2) > 0  %T1矩阵不用进行拥挤度调整排序,直接对T2进行排序调整即可y = yongji(T2);%拥挤度for i = 2:size(T2,1)if b1(i) == b1(i-1)if y(i-1) > y(i)T2(i-1:1:i,:) = T2(i:-1:i-1,:); %根据拥挤度调整排序,如果后者优于前者则反转顺序chrom2(i-1:1:i,:) = chrom2(i:-1:i-1,:);endendend
end
%排序重组
TT = [T1;T2];
chrom = [chrom1;chrom2];

 

function y=yongji(H)
%计算拥挤度
y1=H(:,1);
y2=H(:,2);
[yy1,a1]=sort(y1);
[yy2,a2]=sort(y2);
L=[];
L=[1 1];
for i=2:length(yy1)-1L=[L;(yy1(i+1,1)-yy1(i-1,1))/(max(yy1)-min(yy1)),(yy2(i+1,1)-yy2(i-1,1))/(max(yy2)-min(yy2))];
end
L=[L;1 1];
L=[L(a1,1),L(a2,2)];
y=sum(L,2);
end

第二问,从经营收入角度出发,本问比较开放,可以自己设置费用单价,例如3小时内多少价格,超过3小时每小时多少价格,或者按分钟计费也行,要解决本问还要从船公司角度去思考,Sheet1中有船停靠平均时间和方差,假设船只停靠时间为满足正态分布的事件,有均值和方差,那就可以构建出关于时间的正太分布函数模型,例如ZH1,平均停靠时间7.4,方差为6.1,可以通过自定义函数fanwei求出每个船只在0.95水平的停靠时间范围,调用格式fanwei(平均时间,方差,0.95)

自定义函数下载链接https://pan.baidu.com/s/1F284360bohld5RO3Thp5AA提取码:z5ko

数据准备:采用第一问停靠0,1矩阵,计算每个船只停靠时间范围

Step1:生成初始个体,个体中基因长度为船数,每个基因位点为固定合作的泊位编号

Step2:遍历每一天,如果当天停靠同一泊位则按Sheet3中平均时间先后排队停靠

Step3:针对每一个体,计算停靠时间,如果采用上述第一种计费方法,那么船只就会出现一定的侥幸心里,比如对比最小停靠时间和平均停靠时间,如果前者不小于后者,那么船只就会有侥幸心理,会按平均时间停靠,如果前者小于后者,就会加快卸货效率,按最小停靠时间采取最小,这只是个例子,大家可以自由发挥。设置两个目标函数,一个为所有船只等待时间(如果船到达时间有空闲泊位,则无等待时间,如果船到达泊位,仍有船处于停靠时间内,计算等待时间),第二个目标函数为船总的停靠时间

Step4:整体框架建议采用模拟退火算法,多目标寻优配合NS-Ⅱ非支配排序

第三问,由于防疫工作的需要,尽可能减少船只前后停靠的间隔时间,例如港口A,当天有两只船a1、a2停靠,但是a1停靠完后需要过好几个小时a2才到港,如果船a3到港时间快一点,那么可以是否考虑将船a3插入进来或者重新安排a2的泊位。其实本问只需在第二问基础上增加一个目标函数即可

Step3:设置三个目标函数,一个为所有船只等待时间(如果船到达时间有空闲泊位,则无等待时间,如果船到达泊位,仍有船处于停靠时间内,计算等待时间),第二个目标函数为船总的停靠时间,第三个目标函数为当天泊位工作时间之和(每天的工作时间为第一个船只到港至最后一个船只离岗)

第四问,可能前面大家会觉得这步就是一个问题吗,No,做题要循循渐进,这个问才会考虑一个船可停靠多个泊位

数据准备:第一问中的0,1矩阵

Step1:生成初始个体,个体中基因长度为比如10天内的所有船只停靠次数,每个基因位点随机对应一个泊位编号

Step2:遍历每一天,如果当天停靠同一泊位则按Sheet3中平均时间先后排队停靠,这里为了降低运算量,可写一个判断:如果有满足停靠的其他空闲泊位,那么就优先从中选择

Step3:针对每一个体,设置三个目标函数,一个为所有船只等待时间(如果船到达时间有空闲泊位,则无等待时间,如果船到达泊位,仍有船处于停靠时间内,计算等待时间),第二个目标函数为船总的停靠时间,第三个目标函数为当天泊位工作时间之和(每天的工作时间为第一个船只到港至最后一个船只离岗)

Step4:整体框架建议采用模拟退火算法,多目标寻优配合NS-Ⅱ非支配排序

第五问,在第一问我们模拟了1127条船只基本Sheet2产生100天内停靠的0,1矩阵,这里我们就直接按每6天等间距将第七天列数据换为0,就当作休息日,那么原本在第七天到港的船只,就需要被重新安排至下周一(怎么安排也可以自己定,一般实际上是被安排至下一周一),同第四问求解一致

大家在做题的时候一定要看清楚问题的先后逻辑,并且题目背景是疫情,所以要尽可能减少港口泊位的运作时间

 

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

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

相关文章

linux vim 到底,真的有(很多)linux大牛用vim写项目吗?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼作为一名非程序员半吊子运维&#xff0c;很想问一个问题&#xff1a;真的有(很多)linux大牛用vim写项目吗&#xff1f;最近折腾自己的路由器&#xff0c;要在LEDE的luci框架里加个显示interface信息的模块。按照惯例ggl一下最后在s…

响应式布局Demo

顾名思义&#xff0c;响应式布局就是为适应不同终端而形成的一种技术。我总结了一个简单的例子帮助大家了解和学习响应式布局。 实现响应式布局的几种方式&#xff1a;媒体查询、JS、流体布局、弹性布局… 常用的meta标签 <meta content"widthdevice-width,initial-…

整数线性规划实现(lingo,python分枝界定法)

本文章为上篇建模学习打卡第二天的续 文章目录 一、本次问题 二、本题理解 三、问题求解 1.lingo实现 &#xff08;1&#xff09;先抛除整数约束条件对问题求解 &#xff08;2&#xff09;加入整数约束条件求解 2.python实现求解 &#xff08;1&#xff09;先抛除整数约…

Atmel跑Linux的arm芯片,Linux已被移植到Atmel的ATmega微控制器

Ubuntu Linux发行版已经被移植到最便宜、最便携的平台中&#xff1a;一个Atmel的ATmega微控制器。拥有一个20MHz的8位AVR处理器&#xff0c;128KB的闪存和整块16KB的SRAM&#xff0c;ATmega1284P并不是建立微型计算机最合乎逻辑的选择。它是在Arduino原型平台中找到的同样基础的…

Android Studio 详细安装教程

在我们的日常 Android 开发中&#xff0c;一个好的开发工具是必不可少的------Android Studio&#xff0c;是一个最重要的开发工具。 下面我将详细介绍Android Studio的下载安装。 一、安装环境及下载资源 1.1 安装环境 电脑系统 : Windows 10 JDK 版本 : 1.8 Android Stud…

零基础爬虫requests初阶教程,手把手教你爬数据

目录 一、环境与工具 二、学爬虫必备知识 三、简单体验 requests 四、get 请求 3.1 基础讲解一 3.3 基础讲解二 3.2 基础讲解三 3.4 获取cookie 3.5 获取请求头 3.6 添加请求头 3.5 知乎爬取反扒技术 3.6 抓取二进制数据 3.7 美女私房照爬取&#xff08; 准备发车…

vsftpd的主配置文件是什么linux,vsftpd.conf配置文件详解

vsftpd.conf配置文件详解# 是否允许匿名用户登录。默认值为YES。anonymousYES|NO# 是否允许匿名用户上传文件(如果设置为YES&#xff0c;则write_enable也必须设置为YES)。默认值为NO。anon_upload_enableYES|NO# 是否允许匿名用户创建目录(如果设置为YES&#xff0c;则write_e…

【youcans 的图像处理学习课】11. 形态学图像处理(上)

专栏地址&#xff1a;『youcans 的图像处理学习课』 文章目录&#xff1a;『youcans 的图像处理学习课 - 总目录』 【youcans 的图像处理学习课】11. 形态学图像处理&#xff08;上&#xff09; 【youcans 的图像处理学习课】11. 形态学图像处理&#xff08;中&#xff09; 【y…

Android Sdk 安装配置

在我们安装了Android Studio之后&#xff0c;我们发现不能使用&#xff0c;因为缺少一个Sdk的配置&#xff0c;下面就给大家详细介绍一下Sdk的配置。 打开我们的Android Studio。 选择Do not import settinge&#xff0c;然后点击OK。 点击 Cancel 退出即可&#xff0c;后面…

爬虫requests高阶篇详细教程

文章目录 一、前言 二、SSL验证 三、代理设置 四、超时设置 ​ 五、身份认证 1&#xff09;基本身份认证 2&#xff09;摘要式身份认证 六、总结 一、前言 本篇文高阶篇&#xff0c;上一篇为基础篇&#xff0c;希望你一定要学完基础再来看高阶篇内容 基础篇文章可以看大…

八进制转换成十进制c语言程序,C语言程序 十进制、八进制、十六进制的相互转化...

#include#includevoid main(){//***************************************// 把十进制转化为十六进制与八进制//***************************************int number1;printf("请输入一个十进制的数:\n");scanf("%d",&number1);printf("%s\n %X\n…

Android Studio 创建第一个项目应用

选择打开"Start a new Android Studio project"&#xff0c;新建一个Android项目。 选择一个空白的Activity&#xff0c;然后点击Next。 修改相应Android项目的名称、包名、项目位置等&#xff0c;以符合项目要求&#xff0c;点击Finish。 第一次创建项目可能会这样…

c语言教程我要自学网,超适合自学的C++基础视频_C++基础

教程列表&#xff1a;01_C基础课程的安排和需要持之以恒的学习态度02_简单的C程序helloworld03_用面向过程和面向对象方法求解圆形面积_类和对象的关系思考_传智扫地僧04_类中不写成员函数易犯错误模型05-易犯错误模型-为什么需要成员函数(补充资料)-传智扫地僧06_课堂答疑类中…

主成分分析(PCA)及其可视化——matlab

本文所用为matlab2016a matlab安装&#xff1a;待更新 matlab基础知识&#xff1a;待更新 如果本文内容已学会&#xff0c;可以看看python的哦 主成分分析&#xff08;PCA&#xff09;及其可视化——python_菜菜笨小孩的博客-CSDN博客 文章目录 一、主成分分析的原理 二…

Android studio真机调试

在我们进行Android开发的时候&#xff0c;调试这个环节是必不可少的也是至关重要的&#xff0c;使用真机调试可以更加准确清晰的显示效果。 真机调试Android应用 1.用数据线将手机连接到电脑&#xff0c;打开手机的开发者选项。 由于各个手机厂商的打开方式都不同&#xff0…

C语言伽罗华域乘法,伽罗瓦域上的乘法

一、前言伽罗瓦域上的乘法在包括加/解密编码和存储编码中经常使用&#xff0c;常见的AES 和Reed-Solomon 编码就使用了伽罗瓦域GF(28) 中的运算。以2 或者2w 形式的伽罗瓦域来说&#xff0c;加减法都是异或运算&#xff0c;乘法相对较复杂一些&#xff0c;本文就GF(2w) 上有限域…

主成分分析(PCA)及其可视化——python

可以看看这个哦python入门&#xff1a;Anaconda和Jupyter notebook的安装与使用_菜菜笨小孩的博客-CSDN博客 如果你学会了python 可以看看matlab的哦 主成分分析&#xff08;PCA&#xff09;及其可视化——matlab_菜菜笨小孩的博客-CSDN博客 目录 一、主成分分析的原理 二…

Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT

我们安装完毕Android Studio之后&#xff0c;创建第一个项目&#xff0c;我们想要使用模拟器进行运行&#xff0c;但是当我们启动模拟器的时候却发现无法启动&#xff0c;而且出现了错误信息。 首先我们要知道错误信息是什么&#xff1f; 提示信息的意思是说“avd系统路径找不…

c语言结构体多门成绩排序,c语言结构体按学号排序求大神帮忙改一下吧

struct record{char code[LEN1]; /* 学号 */char name[LEN1]; /* 姓名 */int age; /* 年龄 */char sex[3]; /* 性别 */char time[LEN1]; /* 出生年月 */char add[30]; /* 家庭地址 */char tel[LEN1]; /* 电话号码 */char mail[30]; /* 电子邮件地址 */}stu[N];int k1,n,m; /* 定…

多元线性回归模型-数学建模类-matlab详解

如果本文有点小难理解的话&#xff0c;可以看看我之前的基础线性规划啥的&#xff0c;有lingo&#xff0c;matlab还有python 就不给大家放链接了&#xff0c;想看的话&#xff0c;点击头像即可&#xff01;&#xff01; 文章目录 &#xff08;1&#xff09;一元线性回归之旧…