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:80
 for i=1:n
 for j=1:n
 d(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2);
 end
 end
 for i=1:n
 d(i,i)=inf;
 end
 for i=1:n
 a=0;b=1;c=0;e=0;h=0;l=0;
 for j=1:n
 if d(i,j)<5
 a=a+1;
 c=c+x(j);e=e+y(j);
 m=atan(y(j)/x(j));
 l=l+m;
 end
 if d(i,j)<1
 b=b+1;
 g=atan((y(j)-y(i))/(x(j)-x(i)));
 h=h+g;
 end
 end
 D2=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;
 end
 for i=1:n
 x(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)>30
 x(k+1,i)=x(k+1,i)-30;
 elseif x(k+1,i)<0
 x(k+1,i)=x(k+1,i)+30;
 end
 if y(k+1,i)>30
 y(k+1,i)=y(k+1,i)-30;
 elseif y(k+1,i)<0
 y(k+1,i)=y(k+1,i)+30;
 end
 end
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:200
 dractions(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)>30
 xs(k+1,1)=xs(k+1,1)-30;
 elseif xs(k+1,1)<0
 xs(k+1,1)=xs(k+1,1)+30;
 end
 if ys(k+1,1)>30
 ys(k+1,1)=ys(k+1,1)-30;
 elseif ys(k+1,1)<0
 ys(k+1,1)=ys(k+1,1)+30;
 end
for i=1:n
 ds(i)=sqrt((x(k,i)-xs(k,1))^2+(y(k,i)-ys(k,1))^2);
 for j=1:n
 d(i,j)=sqrt((x(k,i)-x(k,j))^2+(y(k,i)-y(k,j))^2);
 end
 end
 for i=1:n
 d(i,i)=inf;
 end
 for i=1:n
 A=0;B=0.1;
 for j=1:n
 if d(i,j)<0.3
 A=A-draction(k,j)/d(i,j);
 B=B-1/d(i,j);
 if A~=0
 draction(k+1,i)=(1-t)*draction(k,i)-t*j/B;
 else draction(k+1,i)=draction(k,i);
 end
 elseif d(i,j)<5&&d(i,j)>=0.2
 A=A-draction(k,j)/d(i,j);
 B=B-1/d(i,j);
 if A~=0
 draction(k+1,i)=(1-t)*draction(k,i)+t*j/B;
 else draction(k+1,i)=draction(k,i);
 end
 end
 end
 if ds(i)<5
 a=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)));
 end
 if x(k,i)<xs(k,1)
 draction(k+1,i)=atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)))+pi;
 end
 end
 if ds(i)>=5&&ds(i)<10
 draction(k+1,i)=pi/2;
 end
 if ds(i)>=10&&ds(i)<20
 if x(k,i)>xs(k,1)
draction(k+1,i)=-atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)));
 end
 if x(k,i)<xs(k,1)
 draction(k+1,i)=-atan((y(k,i)-ys(k,1))./(x(k,i)-
xs(k,1)))+pi;
 end
 end
 v(k+1,i)=0.2;
 end
 %×ø±ê¸üÐÂ
 for i=1:n
 if ds(i)<10
 x(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)>=10
 x(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;
 end
 if x(k+1,i)>30
 x(k+1,i)=x(k+1,i)-30;
 elseif x(k+1,i)<0
 x(k+1,i)=x(k+1,i)+30;
 end
 if y(k+1,i)>30
 y(k+1,i)=y(k+1,i)-30;
 elseif y(k+1,i)<0
 y(k+1,i)=y(k+1,i)+30;
 end
 end
end
for i=1:k
 pause(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名片即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网页版短信系统功能简介|短信平台开发搭建源码

网页版短信系统功能简介|短信平台开发搭建源码 随着互联网的发展&#xff0c;科技的进步和人们对通讯方式的需求不断增加&#xff0c;短信成为了人们日常生活中必不可少的沟通工具之一。而网页版短信系统的出现&#xff0c;为人们提供了更加便捷和灵活的短信发送和接收方式。 网…

Ant Design Vue上传多个图片

模板代码&#xff1a; 定义变量&#xff1a; 文件限制的函数&#xff1a; 上传的函数&#xff1a; 样式函数&#xff1a; 完整代码&#xff1a; <template><div class"dialog-upload" v-if"showUploadDialog"><div class"dialog-uplo…

MySQL 基于创建时间进行RANGE分区

MySQL是一款广泛使用的关系型数据库。在MySQL中&#xff0c;大量数据场景提高查询效率是非常关键的&#xff0c;所以&#xff0c;对数据表进行分区是一个很好的选择。 在创建分区表之前&#xff0c;需要了解一下MySQL分区的基本概念。MySQL分区可以将一个大表分成多个小表&…

学习JavaEE的日子 day14 继承,super(),this(),重写

Day14 1.继承的使用 理解&#xff1a;子类继承父类所有的属性和方法 使用场景&#xff1a;多个类似的类&#xff0c;有相同的属性和方法&#xff0c;就可以把相同属性和方法抽取到父类 优点&#xff1a;减少代码的冗余&#xff1b; 使类与类之间产生了关系(多态的前提) 缺点&a…

前端实现轮训和长连接

简介 轮训和长连接相关内容可以参考之前的文章消息推送系统。消息推送系统-CSDN博客文章浏览阅读106次。在餐饮行业中&#xff0c;店内应用有pos、厨显屏等&#xff0c;云端应用为对应数据中心。为了实现云端数据和操作指令下发到店内应用&#xff0c;需要有一个系统实现这个功…

群晖nas内网穿透

目录 一、前言 二、操作步骤 &#xff08;一&#xff09;查看群晖是否有ipv6地址 &#xff08;二&#xff09;下载安装docker &#xff08;三&#xff09;docker里面安装ddns-go &#xff08;四&#xff09;阿里云官网购买域名 &#xff08;五&#xff09;域名解析 阿里…

Yolov8_使用自定义数据集训练模型1

前面几篇文章介绍了如何搭建Yolov8环境、使用默认的模型训练和推理图片及视频的效果、并使用GPU版本的torch加速推理、导出.engine格式的模型进一步利用GPU加速&#xff0c;本篇介绍如何自定义数据集&#xff0c;这样就可以训练出识别特定物体的模型。 《Yolov8_使用自定义数据…

AuxTools - 浮鱼渗透辅助工具箱 V4.2

免责声明 由于传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章及作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&#xff01;如有侵权烦请告知&#xff0c;我们会立即删除并致歉。谢谢&#xff…

【学习总结】动力学方程的龙格库塔积分法(含具体例子与代码)

本文仅用于个人学习总结&#xff0c;如有错误请批评指正。 参考资料 徐超江等&#xff0c;常微分方程基础教程&#xff0c;高等教育出版社&#xff0c;2023年。 1、欧拉法 1.1 前向欧拉 欧拉积分部分不用展开介绍&#xff0c;较为简单。直接拍照课本。 1.2 梯形法/隐式格式…

4D毫米波雷达——原理、对比、优势、行业现状

前言 4D 毫米波雷达是传统毫米波雷达的升级版&#xff0c;4D指的是速度、距离、水平角度、垂直高度四个维度。 相比传统 3D 毫米波雷达&#xff0c;4D 毫米波雷达增加了“高度”的探测&#xff0c;将第四个维度整合到传统毫米波雷达中。 4D毫米波雷达被视为未来车载雷达的一…

eBPF运行时安全

引言 eBPF作为当前linux系统上最为炙手可热的技术&#xff0c;通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控&#xff0c;当下比较知名的项目有Cilium、Falco等。 Cilium 是一个开源的容器网络和安全性项目&#xff0c;致力于提供高效的容器通信和强大的安…

【备战蓝桥杯】探索Python内置标准库collections的使用

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-q0zvWxZtAIdSGZ8R {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

大模型学习之书生·浦语大模型5——基于LMDeploy大模型量化部署实践

目录 大模型部署背景 LMDeploy部署 量化 TurboMind API server 动手实践环节 1.创建开发机 2.创建虚拟环境 3.服务部署 在线转换模型 离线转换 4.TurboMind推理 TurboMindAPI服务 提供了一些API的接口 Gradio Demo演示 API server作为后端 注意这里要同时启动API serv…

7款值得收藏的前端动画特效(附效果图在线预览)

分享7款有趣也实用的前端动画特效 其中有CSS动画、canvas动画、js小游戏等等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 canvas粒子空间特效 基于canvas实现的一款粒子空间特效 该特效初始时会从四周扩散粒子并随时间…

Java_二叉树详解

前言 程序员优劣之间最明显的就是数据结构和算法的掌握程度,二叉树作为数据结构中不可缺少的一员,可见其重要程度.我们一起来简单地学习二叉树吧~ 树型结构 在我们学习二叉树前先了解一下树型结构(二叉树是树型结构中的一种) 树是一种非线性的数据结构,它是有n (n>0) 个…

条码WMS仓储管理系统的价值与优势

在全球化和数字化的时代&#xff0c;企业面临着诸多挑战。在复杂的运营环境中&#xff0c;如何提高运营效率和效果&#xff0c;降低成本&#xff0c;增强竞争力&#xff0c;成为企业关注的焦点。而库存管理作为企业运营的关键环节&#xff0c;其重要性不言而喻。本文将深入探讨…

【PyTorch】PyTorch之Tensors索引切片篇

文章目录 前言一、ARGWHERE二、CAT、CONCAT、CONCATENATE三、CHUNK四、GATHER五、MOVEDIM和MOVEAXIS六、PERMUTE七、RESHAPE八、SELECT九、SPLIT十、SQUEEZE十一、T十二、TAKE十三、TILE十四、TRANSPOSE十五、UNBIND十六、UNSQUEEZE十七、WHERE 前言 介绍常用的PyTorch之Tenso…

【DC-DC】APS54085降压恒流 高辉度调光降压恒流芯片

产品描述 APS54085 是一款 PWM 工作模式,高效率、 外围简单、内置功率 MOS 管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。最大电流 2.0A。 APS54085 可实现线性调光和 PWM 调光&#xff0c; 线性调光有效电压范围 0.52-2.55V. PWM 调光频率范围 100…

山西电力市场日前价格预测【2024-01-19】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-19&#xff09;山西电力市场全天平均日前电价为499.01元/MWh。其中&#xff0c;最高日前电价为898.49元/MWh&#xff0c;预计出现在18:00。最低日前电价为373.35元/MWh&#xff0c;预计…

elasticsearch 中热词使用遇到的坑

在使用es检索时,一般会创建索引以及索引下mapping和setting一样配置,如下: 命令创建配置方式: PUT /my_index { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "title": { …