2018年认证杯SPSSPRO杯数学建模A题(第一阶段)海豚与沙丁鱼全过程文档及程序
2018年认证杯SPSSPRO杯数学建模
探究海豚猎捕时沙丁鱼群的躲避运动模型
A题 海豚与沙丁鱼
原题再现:
沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗,所以在距离较远时,海豚只能使用回声定位方法来判断鱼群的整体位置,难以分辨每个个体。鱼群的行动是有协调性的,在没有外部威胁或障碍物时,鱼群常常会聚成接近球形的形态。而当海豚接触甚至冲进鱼群,鱼群则会进行协同的躲避,所以不易在大鱼群中追踪一个目标。沙丁鱼的这种群体行为降低了其被海豚捕食的概率。
第一阶段问题: 请你建立合理的数学模型来描述沙丁鱼群在遇到一条海豚捕食时的运动规律。
整体求解过程概述(摘要)
沙丁鱼为细长的银色小型鱼,游泳迅速,没有外部威胁时鱼群常聚成接近球形的形态,而当捕食者进攻时会进行协同的躲避,从而降低其被捕食的概率。本文基于沙丁鱼群遭遇一条海豚捕食时的情景,研究沙丁鱼群对应的运动规律。考虑到海豚和沙丁鱼群的同向、相向运动,以及二者之间的距离,分析海豚进击模型。当距离较远时,海豚通过回声定位来判断鱼群的整体位置,此时沙丁鱼群并未意识到威胁的存在,以接近球形的形态稳定行进。考虑个体视野范围以及速率差异,改进 Boid 模型,建立无序聚集运动模型;并划分感知区域,降维构建有序环绕运动模型。
当海豚进攻沙丁鱼群时,鱼群进行协同躲避。考虑二者的相向、同向运动,分析四种外部空间结构(中空包围状、沙漏状、密集球状、驱赶聚集状)的动态变化。构造个体沙丁鱼安全场,划分为紧急逃离区域和适度逃离区域,分析各区域内影响个体沙丁鱼运动速度矢量的多种因素,采用主层次分析法提取出不同空间结构下不同区域内的主因子,建立四种空间结构下鱼群的躲避模型。考虑沙丁鱼空间密度等因素,引入随机森林算法对海豚捕食模型进行训练,动态优化四种躲避模型下沙丁鱼被捕食的概率结果,分析沙丁鱼群最优逃逸方式及运动规律。
采集大自然中海豚捕食沙丁鱼群的场景,提取图片中的数据信息进行模型的验证,结果表明:沙丁鱼群遭遇一条海豚捕食时会优选呈中空包围状和密集球状进行逃逸。
问题分析:
出于生存、避险、觅食等原因,鱼类的行为方式往往表现为群体行为,沙丁鱼往往以聚成大群的方式来对抗海豚的捕食。鱼群的行动是有协调性的,在没有外部威胁或障碍物时,鱼群常常会聚成接近球形的形态。而当海豚接触甚至冲进鱼群,一方面当近处的鱼快速逃避时,会给猎手海豚一个严重的心理错觉,以为远处的鱼还没发觉,于是扑向另外的对象。然而,鱼本身的侧线反馈机制会使远处的鱼逃避得更快,从而导致海豚找不到具体的目标,一无所获。
此外,鱼类集群运动机理的研究涉及团体动力学、集群行为学等领域,围绕该方向的研究主要分为两大流派:一类是利用理论推导和应用已有的结论,试图去理解鱼类集群行为的内在原因,另一类是从鱼类的实际集群运动和个体鱼的特征出发,通过搭建模型去探索鱼类实际集群运动中存在的规律。由上述分析可以将海豚的捕食过程分为发现目标后的匀速前进阶段、变加速阶段、猛击捕食阶段。基于海豚的捕食过程,可以沙丁鱼群的存在状态分为稳定状态和躲避状态。由于鱼群的形成是由个体逐渐汇集而成,所以可以将沙丁鱼的稳定状态分为无序聚集状态和有序环绕状态。沙丁鱼在逃避过程中,沙丁鱼群群体的形状、空间分布、结构等是处于不断变化的过程中,鱼群在遇到外部攻击时,鱼群的外部空间结构会出现动态变化,会呈现驱赶聚集状、中空包围状、沙漏状和密集球状。
建立数学模型来描述沙丁鱼群在遇到一条海豚捕食时的运动规律的实质就在于深入分析沙丁鱼群稳定集群模型、海豚的进击捕食模型以及沙丁鱼群多种的逃避模型,进而实现动态分析、动态寻优的过程。本文基于分析已有资料,采用从个体到局部、从局部到整体的思想,以 Boid 模型为基础,通过部分改良提出沙丁鱼群的无序聚集运动模型;采用降维的方法将三维模型降为二维模型,提出沙丁鱼稳定环绕状态模型以分析沙丁鱼的有序环绕运动。结合海豚的进击捕食模型,基于主成分分析方法简化沙丁鱼的运动方程,建立模型模拟驱赶聚集状、中空包围状、沙漏状和密集球状四种逃避轨迹,分析沙丁鱼在四种逃避状态下的被捕食概率,探索有利于沙丁鱼群体进化的最优逃避方式。
模型假设:
1. 假设本文中的个体沙丁鱼的一般游动是随机性的;
2. 假设每个沙丁鱼个体能够感知其在群体中的位置;
3. 该沙丁鱼群不受环境变化影响(地震、海啸等自然灾害);
4. 假设沙丁鱼群中的个体是存在部分差异的,主要表现为尺寸上的大、小两种;
5. 本文中模型所涉及的鱼群数量在短期内是不发生变化的(被海豚捕食情况除外),即不考虑个体沙丁鱼的突发死亡等非一般状况。
论文缩略图:



全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:(代码和文档not free)
clear;
clc;
n=400;
x(1,:)=10*rand(1,n);
y(1,:)=10*rand(1,n);
drc(1,:)=(rand(1,n)-0.5)*2*pi;
d=[];
for k=1:80for i=1:nfor j=1:nd(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);endendfor i=1:nd(i,i)=inf;endfor i=1:na=0;b=1;c=0;e=0;h=0;l=0;for j=1:nif d(i,j)<5a=a+1;c=c+x(j);e=e+y(j);m=atan(y(j)/x(j));l=l+m;endif d(i,j)<1b=b+1;g=atan((y(j)-y(i))/(x(j)-x(i)));h=h+g;endendD2=atan(e/a-y(i))/(c/a-x(i));D3=1/a;D4=h/b;drc(k+1,i)=0.4*drc(k,i)+0.3*D2+0.2*D3+0.1*D4;v=0.5;endfor i=1:nx(k+1,i)=x(k,i)+v*cos(drc(k+1,i))*1;
y(k+1,i)=y(k,i)+v*sin(drc(k+1,i))*1;if x(k+1,i)>30x(k+1,i)=x(k+1,i)-30;elseif x(k+1,i)<0x(k+1,i)=x(k+1,i)+30;endif y(k+1,i)>30y(k+1,i)=y(k+1,i)-30;elseif y(k+1,i)<0y(k+1,i)=y(k+1,i)+30;endend
end
for i=1:k%pause(0,1)plot(x(i,:),y(i,:),'.')axis([0 30 0 30])getframe
end
clear;
clc;
t=1;n=500;
x=[];y=[];xs=[];
x(1,:)=30*rand(1,n);y(1,:)=30*rand(1,n);
draction(1,:)=(rand(1,n)-0.5)*2*pi;
d=[];a=0;
xs(1,:)=30*rand(1,1);ys(1,:)=30*rand(1,1);
dractions(1,1)=(rand(1,1)-0.5)*2*pi;
for k=1:200dractions(k+1,1)=dractions(k,1);vs(k+1,1)=0.4;xs(k+1,1)=xs(k,1)+vs(k+1,1)*cos(dractions(k+1,1))*1;ys(k+1,1)=ys(k,1)+vs(k+1,1)*sin(dractions(k+1,1))*1;if xs(k+1,1)>30xs(k+1,1)=xs(k+1,1)-30;elseif xs(k+1,1)<0xs(k+1,1)=xs(k+1,1)+30;endif ys(k+1,1)>30ys(k+1,1)=ys(k+1,1)-30;elseif ys(k+1,1)<0ys(k+1,1)=ys(k+1,1)+30;end
for i=1:nds(i)=sqrt((x(k,i)-xs(k,1))^2+(y(k,i)-ys(k,1))^2);for j=1:nd(i,j)=sqrt((x(k,i)-x(k,j))^2+(y(k,i)-y(k,j))^2);endendfor i=1:nd(i,i)=inf;endfor i=1:nA=0;B=0.1;for j=1:nif d(i,j)<0.3A=A-draction(k,j)/d(i,j);B=B-1/d(i,j);if A~=0draction(k+1,i)=(1-t)*draction(k,i)-t*j/B;else draction(k+1,i)=draction(k,i);endelseif d(i,j)<5&&d(i,j)>=0.2A=A-draction(k,j)/d(i,j);B=B-1/d(i,j);if A~=0draction(k+1,i)=(1-t)*draction(k,i)+t*j/B;else draction(k+1,i)=draction(k,i);endendendif ds(i)<5a=a+1;%prevx=x;%prevy=y;if x(k,i)>xs(k,1)draction(k+1,i)=atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)));endif x(k,i)<xs(k,1)draction(k+1,i)=atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)))+pi;endendif ds(i)>=5&&ds(i)<10draction(k+1,i)=pi/2;endif ds(i)>=10&&ds(i)<20if x(k,i)>xs(k,1)
draction(k+1,i)=-atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)));endif x(k,i)<xs(k,1)draction(k+1,i)=-atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)))+pi;endendv(k+1,i)=0.2;end%×ø±ê¸üÐÂfor i=1:nif ds(i)<10x(k+1,i)=x(k,i)+v(k+1,i)*cos(draction(k+1,i))*1.5;y(k+1,i)=y(k,i)+v(k+1,i)*sin(draction(k+1,i))*1.5;elseif ds(i)>=10x(k+1,i)=x(k,i)+v(k+1,i)*cos(draction(k+1,i))*1;y(k+1,i)=y(k,i)+v(k+1,i)*sin(draction(k+1,i))*1;endif x(k+1,i)>30x(k+1,i)=x(k+1,i)-30;elseif x(k+1,i)<0x(k+1,i)=x(k+1,i)+30;endif y(k+1,i)>30y(k+1,i)=y(k+1,i)-30;elseif y(k+1,i)<0y(k+1,i)=y(k+1,i)+30;endend
end
for i=1:kpause(0.2)plot(x(i,:),y(i,:),'.',xs(i,:),ys(i,:),'ro','markersize',12)title('沙丁鱼群躲避海豚捕食的二维图')xlabel('x');ylabel('y');%legend('沙丁鱼','海豚')axis([0 30 0 30])getframe;
end
clear all
clc
warning off
load data.mat %储存数据信息
a = randperm(30);
Train = data(a(1:25),:);
Test = data(a(26:end),:);
P_train = Train(:,3:end);
T_train = Train(:,2);
P_test = Test(:,3:end);
T_test = Test(:,2);
model = classRF_train(P_train,T_train);
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
相关文章:
2018年认证杯SPSSPRO杯数学建模A题(第一阶段)海豚与沙丁鱼全过程文档及程序
2018年认证杯SPSSPRO杯数学建模 探究海豚猎捕时沙丁鱼群的躲避运动模型 A题 海豚与沙丁鱼 原题再现: 沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗,所以在距离较远时,海豚只能使用回声定位方法来判断鱼群的整体位置…...
【Webpack】预处理器 - 常用loader介绍
选用合适的loader来处理不同的资源和不同的功能,以下是一些主流的loader,但这并不是全部,因为每时每刻都可能有新的loader 发布到 npm上 babel-loader babe-loader 用来处理ES6并将其编译为ESS,它使我们能够在最新的工程中使用最…...
lodash 的 _.groupBy 函数是怎么实现的?
说在前面 🎈lodash的_.groupBy函数可以将一个数组按照给定的函数分组,返回一个新对象。该函数接收两个参数:第一个参数是要进行分组的数组,第二个参数是用于分组的函数。该函数会对数组中的每个元素进行处理,返回一个值…...
(2024,ViM,双向 SSM 骨干,序列建模)利用双向状态空间模型进行高效视觉表示学习
Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0.摘要 3. 方法 3.1. 基础知识 3.…...
docker容器和常用命令
1.什么是容器 容器是隔离的环境中运行的一个 进程 , 如果进程结束 , 容器就会停止. 细致: 容器的隔离环境 , 拥有自己的 ip 地址 , 系统文件 , 主机名 , 进程管理 , 相当于一个 mini的系统 2.容器 vs 虚拟机 3.Docker极速上手指南 #1.安装相关依赖. sudo yum install -y …...
【征服redis9】快速征服lua脚本
lua脚本,这个名字总让人想歪,不过老外发明名字,我们只能跟着叫了。这个脚本语言在redis里和Nginx里都有用,所以我们就来看一下。 目录 1 lua的介绍与说明 2 lua的基本语句体验 3.Lua的数据结构和高级特性 1 lua的介绍与说明 …...
vue3.2二次封装antd vue 中的Table组件,原有参数属性不变
vue3.2中的<script setup>语法 在项目中多处使用到表格组件,所以进行了一个基础的封装,主要是通过antd vue 中表格的slots配置项,通过配合插槽来进行封装自定义表格; 这次主要的一个功能是编辑之后变成input框 修改了之后变成完成发送请求重新渲染表格: 子…...
GBASE南大通用分享,如何修改可信上下文
在以下示例中,假设该可信上下文对象 appserver 存在并启用。以下的 ALTER TRUSTED CONTEXT 语句将 appserver 可信上下文对象的对象方式重置为 DISABLE。当其处于该方式时, appserver 可信上下文仍然存在,但是它不能用于存取数据库服务器。 …...
冻结Prompt微调LM: T5 PET (a)
T5 paper: 2019.10 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer Task: Everything Prompt: 前缀式人工prompt Model: Encoder-Decoder Take Away: 加入前缀Prompt,所有NLP任务都可以转化为文本生成任务 T5论文的初衷如…...
119 BFS和DFS解二叉树的所有路径
问题描述:给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。 DFS求解:定义一个全局的链表,用来装所有的结果,通过DFS遍历,一旦遍历到当前节点没有子节点…...
SpringBoot缓存相关注解的使用
CacheConfig:主要用于配置该类中会用到的一些共用的缓存配置 Cacheable:主要方法的返回值将被加入缓存。在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问 CachePut:主要用于数据新增和修改操作 CacheEvi…...
SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)
1. 漏洞介绍 SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数,该调用了自定义函数validScript,该函数中用户能够控制 functi…...
计算机网络-甘晴void学习笔记
计算机网络 计科210X 甘晴void 202108010XXX 文章目录 计算机网络期中复习1计算机网络和因特网1.1 因特网1.2 网络边缘1.3 网络核心1.4 分组交换的时延/丢包和吞吐量1.5 协议层次与服务模型 2 应用层原理2.1 应用层协议原理2.2 Web和Http2.3 因特网中的电子邮件2.4 DNS&#x…...
vue中使用echarts实现省市地图绘制,根据数据在地图上显示柱状图信息,增加涟漪特效动画效果
文章目录 一、实现效果二、实现方法1、安装echarts插件2、获取省市json数据3、本例中data 数据4、吉林省地图的绘制5、柱状图样式6、设置柱状底部涟漪特效样式7、数据处理 三、示例代码已上传,去顶部可下载四、效果展示 一、实现效果 使用echarts实现省市地图绘制&…...
Android aar包集成与报错
Android Studio引用AAR的方式,分为gradle7.0之前与7.0之后 一、集成步骤 方法一: 1.将对应的xxx.aar包复制到项目的libs目录下(xxx代表需要引入的aar包名称) 2.然后在模块的build.gradle文件中配置implementation files(libs/lib…...
CentOS 7.9 安装图解
特特特别的说明 CentOS发行版已经不再适合应用于生产环境,客观条件不得不用的话,优选7.9版本,8.5版本次之,最次6.10版本(比如说Oracle 11GR2就建议在6版本上部署)! 引导和开始安装 选择倒计时结…...
Gitea Webhook报错 webhook.ALLOWED_HOST_LIST setting
Gitea Webhook报错 webhook.ALLOWED_HOST_LIST setting 登录到Gitea中,编辑app.ini vi /data/gitea/conf/app.ini [webhook] ALLOWED_HOST_LIST 你的IP地址示例 [webhook] ALLOWED_HOST_LIST 192.168.3.98...
SQL 最大连续合格次数 最大连胜记录次数 最大连败记录次数
有这样一个问题,工厂中要统计某个供应商送货检验的情况,依照其连续合格次数,决定是否免检,不使用游标或者循环,如何写这个sql。 此情景也可以用于统计连胜记录等 先要学习一下 窗函数LAG,指的是按分组和排…...
着色器语言GLSL学习
1 初步尝试 import { Scene, WebGLRenderer, OrthographicCamera, PlaneGeometry, ShaderMateria } from three.jsconst scene new Scene() const camera new OrthographicCamera(-1,1,1,-1,0.1, 10)const renderer new WebGLRenderer() renderer.setSize(window.innerWidt…...
C#: form 窗体的各种操作
说明:记录 C# form 窗体的各种操作 1. C# form 窗体居中显示 // 获取屏幕的宽度和高度 int screenWidth Screen.PrimaryScreen.Bounds.Width; int screenHeight Screen.PrimaryScreen.Bounds.Height;// 设置窗体的位置 this.StartPosition FormStartPosition.M…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
