2018年认证杯SPSSPRO杯数学建模A题(第二阶段)海豚与沙丁鱼全过程文档及程序

2018年认证杯SPSSPRO杯数学建模

基于聚类分析的海豚捕食合作策略

A题 海豚与沙丁鱼

原题再现:

  沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗,所以在距离较远时,海豚只能使用回声定位方法来判断鱼群的整体位置,难以分辨每个个体。鱼群的行动是有协调性的,在没有外部威胁或障碍物时,鱼群常常会聚成接近球形的形态。而当海豚接触甚至冲进鱼群,鱼群则会进行协同的躲避,所以不易在大鱼群中追踪一个目标。沙丁鱼的这种群体行为降低了其被海豚捕食的概率。

  第二阶段问题: 智商较高的海豚会配合行动,以图提高捕食的效率。请你建立合理的数学模型,研究多条海豚配合捕食时应当采取怎样的合作策略。

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

  生态系统中,无论作为捕食者还是被捕食者,好多生物出于生存、觅食、避险和繁殖等原因通常采用集群运动行为。沙丁鱼群和海豚之间的对抗就属于典型的群体行为博弈。第一阶段建立的基于沙丁鱼个体之间疏密度控制的沙丁鱼群逃逸模型被运用到第二阶段中,沙丁鱼群的逃逸策略不仅要避免被海豚捕食,同时要拉开与沙丁鱼彼此的间距,采用了基于最远逃逸距离和最佳逃逸角度相结合的原则进行疏密度控制,使得逃逸的沙丁鱼群分布比较分散,这增大了海豚的捕食难度。在第二阶段,必须制定合适的海豚捕食策略,才能实现对分散逃逸、稀疏分布的沙丁鱼群的高效捕食。第二阶段模型主要工作内容在以下两个方面:
  其一、研究海豚群体行为模式,模拟海豚集群协作捕食的场景,设定了三种协作阵型:圆形包围阵型、三角进攻阵型和混合(围追堵截)阵型。圆形包围阵型实施对沙丁鱼向中心驱赶,沙丁鱼群的最远逃逸距离原则反而使得沙丁鱼群由四周向内聚拢,进一步被海豚合围压制,因此在圆形包围阵型在捕食初期能制约鱼群逃逸,获得很好的捕食效果。三角进攻阵型是从一个方向朝鱼群进攻,由于鱼群的较好的自适应逃逸策略,通过优化最远逃逸距离和最佳逃逸方向,总能避开海豚的追击。混合型阵型结合了两种阵型的特点,一部分海豚在一侧追击,另一部分在令一侧堵截。通过仿真对三种阵型捕食效果进行对比,在同等条件下,圆圈包围阵型对沙丁鱼平均捕获率为 16%;三角进攻阵型适合驱赶沙丁鱼群,平均捕获率为 0;混合(围追堵截)阵型的平均捕获率为 9%。因此,圆形包围阵型的效果最好。
  其二,研究海豚个体行为模式,制定了两种海豚个体的捕食策略:沙丁鱼近邻策略和沙丁鱼群密度聚类分析策略。近邻策略是指在海豚感知范围内,其捕食目标和行动路线始终朝向最近的沙丁鱼;聚类分析策略是指利用基于密度的聚类算法(DBSCAN),对在海豚的有效感知区域内散布的沙丁鱼进行聚类,从而判断沙丁鱼聚集的高密度区,使其捕食目标和行动路线朝向鱼群高密度区的中心。仿真结果显示:聚类法捕获的沙丁鱼数量比近邻法高出 80%,在捕食效果上基于密度的聚类法优于近邻策略。通过对海豚多组合作策略对比分析,本文得出结论:基于聚类法的海豚个体捕食策略结合圆形包围的海豚集群阵型是较好的合作捕食策略,该合作策略对进一步建立类似的高效捕食体系仿真模型具有参考价值。同时为三维空间海豚配合捕食运动建模奠定基础。

问题分析:

  第二阶段在沿用第一阶段背景的基础上,讨论针对沙丁鱼群协同避险行为和鱼群的逃逸运动规律,研究多条海豚配合捕食时的合作策略。针对多条海豚捕食合作一般分为以下几个阶段:
  第一阶段,当海豚发现一定距离范围有沙丁鱼群,提前实施相应的围攻策略,形成一定阵型,为进一步进攻捕食做足准备。
  第二阶段,海豚已经靠近目标鱼群,针对海豚进攻时刻周围鱼群的分布情况,采取的进攻捕食方向策略。
  基于上述两个阶段的海豚捕食过程的分析,大致可以将海豚的合作策略分为围攻策略和进攻捕食策略。首先,通过查找大量的相关文献,本文针对不同围攻策略,建立三种排布阵型;1)圆形阵型;2)三角阵型;3)组合阵型(即圆形和三角组合)。其次考虑到海豚周围鱼群不同的分布情况,海豚的进攻捕食方向有两种可能选择:1)向距离最近的沙丁鱼进攻;二、向密度较大的逃逸的鱼群展开追逐捕食。为了使问题清晰化,本文认为两种进攻过程中海豚应当具有对处在其必定捕杀距离范围内的沙丁鱼一击必杀的能力,并且其猎杀过程的时间与整个追逐沙丁鱼群的时间相比可忽略。同时,海豚能够利用回声定位对沙丁鱼群保持时刻的整体感知,其感知所耗费的时滞几乎不计。当海豚和沙丁鱼距离小于海豚捕食步长时,捕杀必定成功。通过分析对比海豚不同的捕食规律所对应的捕食沙丁鱼群的成功率来优化海豚捕食的合作策略。

模型假设:

  1、鱼群和海豚都活动在足够大的水域中,不受地形和海平面的影响;
  2、海豚的感知范围为以自身为中心,半径为 Sense 的圆域,简化处理,将沙丁鱼和海豚视为质点处理;
  3、海豚对沙丁鱼群的每一次进攻捕食都可以简化为直线运动;
  4、所有的海豚都具有相同的物理特性(包括运动能力和感知能力);
  5、海豚与沙丁鱼距离小于海豚运动步长时,海豚必定捕杀成功;
  6、海豚一次只能吃掉一条沙丁鱼;(此假设是基于俄勒冈大学和夏威夷大学共同研究成果制定,因为海豚不能像蓝鲸一样张大嘴巴,一次吞进大量的食物,它们需要以单条鱼为目标);
  7、海豚初始按照阵型规律前进;

论文缩略图:

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

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

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

%鲨鱼四周围捕,一起进攻
clear all;
clc
M=50;N=100;ls=20; Ns=4; h=20; Sense=150;%ls 鲨鱼步长;h 鲨鱼开始走直线的距离,Ns 鲨鱼
数量
d0=[99 99 99 99];
S(1,1)=-20;S(2,1)=-20;
S(3,1)=120;S(4,1)=120;
S(5,1)=120;S(6,1)=-20;
S(7,1)=-20;S(8,1)=120;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始小鱼的聚集球状%%%%%%%%%%%%%%%%%%%%%%%%%%%
x0=50;y0=50;O=[x0;y0];%圆心坐标
R = 10;%圆半径
deta = 360.*rand(N,1);%随机角度
r = R.*rand(N,1);%随机半径
dx = r.*cosd(deta);%计算 x 坐标增量
dy = r.*sind(deta);%计算 y 坐标增量
nx = x0 + dx;%计算随机点 x 坐标
ny = x0 + dy;%计算随机点 y 坐标
%%%%%%%%%%%%%%%%%%%%%%%%%%%% 鲨 鱼 的 移 动 %%%% 四条集中行动 %%%%% 近 邻 捕
食%%%%%%%%%%%%%%%%%%%%%%%%%
F(1,:)=nx;
E(1,:)=ny;
F=F';E=E';
for i=1:M;d0(1)=((O(1,1)-S(1,i))^2+(O(2,1)-S(2,i))^2)^0.5;d0(2)=((O(1,1)-S(3,i))^2+(O(2,1)-S(4,i))^2)^0.5;d0(3)=((O(1,1)-S(5,i))^2+(O(2,1)-S(6,i))^2)^0.5;d0(4)=((O(1,1)-S(7,i))^2+(O(2,1)-S(8,i))^2)^0.5; Dst1=sdy2_ss_Dist(S(1,i),S(2,i),F(:,i),E(:,i));Ds(:,1)=Dst1;[Dsmin(1),idx(1)]=min(Ds(:,1));Dst2=sdy2_ss_Dist(S(3,i),S(4,i),F(:,i),E(:,i));Ds(:,2)=Dst2;[Dsmin(2),idx(2)]=min(Ds(:,2));Dst3=sdy2_ss_Dist(S(5,i),S(6,i),F(:,i),E(:,i));Ds(:,3)=Dst3;[Dsmin(3),idx(3)]=min(Ds(:,3));Dst4=sdy2_ss_Dist(S(7,i),S(8,i),F(:,i),E(:,i));Ds(:,4)=Dst4;[Dsmin(4),idx(4)]=min(Ds(:,4));%Nx=F(idx);Ny=E(idx);
%theta=sdy2_ss_count(S(1,i-1),S(2,i-1),S(1,i),S(2,i),Nx,Ny);if Dsmin(1)<=lsS(1,i+1)=F(idx(1));S(2,i+1)=E(idx(1));[vol,col]=size(F(:,1)); if idx(1)<=vol;F(idx(1),:)=[];E(idx(1),:)=[];endelseif Dsmin(1)>ls && Dsmin(1)<=Sense[px1,py1]=sdy2_point(S(1,i),S(2,i),F(idx(1)),E(idx(1)),Dsmin(1),ls); S(1,i+1)=px1;S(2,i+1)=py1;elseS(1,i+1)=S(1,i)+ls*abs((O(1,1)-S(1,i)))/(sqrt((O(1,1)-S(1,i))^2+(O(2,1)-
S(2,i))^2));S(2,i+1)=S(2,i)+ls*abs((O(2,1)-S(2,i)))/(sqrt((O(1,1)-S(1,i))^2+(O(2,1)-
S(2,i))^2));endif Dsmin(2)<=lsS(3,i+1)=F(idx(2));S(4,i+1)=E(idx(2));[vol,col]=size(F(:,1)); if idx(2)~=idx(1) && idx(2) && idx(2)<=vol;F(idx(2),:)=[];E(idx(2),:)=[];endelseif Dsmin(2)>ls && Dsmin(2)<=Sense[px2,py2]=sdy2_point(S(3,i),S(4,i),F(idx(2)),E(idx(2)),Dsmin(2),ls); S(3,i+1)=px2;S(4,i+1)=py2;elseS(3,i+1)=S(3,i)-ls*abs((O(1,1)-S(3,i)))/(sqrt((O(1,1)-S(3,i))^2+(O(2,1)-
S(4,i))^2));S(4,i+1)=S(4,i)-ls*abs((O(2,1)-S(4,i)))/(sqrt((O(1,1)-S(3,i))^2+(O(2,1)-
S(4,i))^2));endif Dsmin(3)<=lsS(5,i+1)=F(idx(3));S(6,i+1)=E(idx(3));[vol,col]=size(F(:,1)); if idx(3)~=idx(2) && idx(3)~=idx(1) && idx(3)<=vol;F(idx(3),:)=[];E(idx(3),:)=[];endelseif Dsmin(3)>ls && Dsmin(3)<=Sense[px3,py3]=sdy2_point(S(5,i),S(6,i),F(idx(3)),E(idx(3)),Dsmin(3),ls);
S(5,i+1)=px3;S(6,i+1)=py3;elseS(5,i+1)=S(5,i)-ls*abs((O(1,1)-S(5,i)))/(sqrt((O(1,1)-S(5,i))^2+(O(2,1)-
S(6,i))^2));S(6,i+1)=S(6,i)+ls*abs((O(2,1)-S(6,i)))/(sqrt((O(1,1)-S(5,i))^2+(O(2,1)-
S(6,i))^2));endif Dsmin(4)<=lsS(7,i+1)=F(idx(4));S(8,i+1)=E(idx(4)); [vol,col]=size(F(:,1)); if idx(4)~=idx(3) && idx(4)~=idx(2)&& idx(4)~=idx(1) && idx(4)<=vol;F(idx(4),:)=[];E(idx(4),:)=[];endelseif Dsmin(4)>ls && Dsmin(4)<=Sense[px4,py4]=sdy2_point(S(7,i),S(8,i),F(idx(4)),E(idx(4)),Dsmin(4),ls); S(7,i+1)=px4;S(8,i+1)=py4;elseS(7,i+1)=S(7,i)+ls*abs((O(1,1)-S(7,i)))/(sqrt((O(1,1)-S(7,i))^2+(O(2,1)-
S(8,i))^2));S(8,i+1)=S(8,i)-ls*abs((O(2,1)-S(8,i)))/(sqrt((O(1,1)-S(7,i))^2+(O(2,1)-
S(8,i))^2));end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%沙丁鱼逃逸%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[N,nl]=size(F(:,1)); num=zeros(N,M); 
Ds=zeros(N,Ns);Dst1=zeros(N,1);Dst2=zeros(N,1);Dst3=zeros(N,1);Dst4=zeros(N,1);
Df=12; Dm=7; ohm=zeros(N,M);dn=zeros(N,M); SS=zeros(2,M);%df 沙丁鱼步长for j=1:Nmode(1)=((F(j,i)-S(1,i))^2+(E(j,i)-S(2,i))^2)^0.5;mode(2)=((F(j,i)-S(3,i))^2+(E(j,i)-S(4,i))^2)^0.5;mode(3)=((F(j,i)-S(5,i))^2+(E(j,i)-S(6,i))^2)^0.5;mode(4)=((F(j,i)-S(7,i))^2+(E(j,i)-S(8,i))^2)^0.5;[mm,l]=min(mode);dn(j,i)=mm;SS(1,i)=S((2*l-1),i);SS(2,i)=S((2*l-0),i);x=(F(j,i)-SS(1,i))/mm*Df;y=(E(j,i)-SS(2,i))/mm*Df;x0=F(j,i);y0=E(j,i);if F(j,i)>=E(j,i);F(j,i+1)=x*cos(ohm(j,i))+y*sin(ohm(j,i))+x0;E(j,i+1)=-x*sin(ohm(j,i))+y*cos(ohm(j,i))+y0;elseF(j,i+1)=x*cos(ohm(j,i))-y*sin(ohm(j,i))+x0;E(j,i+1)=x*sin(ohm(j,i))+y*cos(ohm(j,i))+y0;
endend
Fx=F(:,i); Fy=E(:,i);
numt=sdy_Dm(N,M,Fx,Fy,Dm);
num(:,i)=numt'; 
Pnum=num(:,i)/N;
ohmt=sdy2_judge(Pnum,dn);
ohm(:,i)=ohmt;
end
for i=1:5:M
figure(i)
plot(S(1,i),S(2,i),'ro');grid on;hold on;plot(S(3,i),S(4,i),'ro');hold 
on;plot(S(5,i),S(6,i),'ro');hold on;plot(S(7,i),S(8,i),'ro');hold on;axis([-400,600,-
400,600]);
plot(F(:,i),E(:,i),'b.');
title(['' num2str(i) ' 步']);
end;
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

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

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

相关文章

第4章 C++的类

类的保留字&#xff1a;class、struct 或 union 可用来声明和定义类。类的声明由保留字class、struct或union加上类的名称构成。类的定义包括类的声明部分和类的由{}括起来的主体两部分构成。类的实现通常指类的函数成员的实现&#xff0c;即定义类的函数成员。 class 类名;//…

C#,字符串匹配(模式搜索)Sunday算法的源代码

Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想&#xff1a;在匹配过程中&#xff0c;模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较&#xff0c;它在发现不匹配时&#xff0c;算法能跳过尽可能多的字符以进行下一步的匹配&…

港科夜闻|香港科大团队研发多功能,可重构和抗破坏单线感测器阵列

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大团队研发多功能、可重构和抗破坏单线感测器阵列。研究人员开发出一种受人类听觉系统启发的感测器阵列设计技术。透过模仿人耳根据音位分布来区分声音的能力&#xff0c;这种新型感测器阵列方法可能优化感测器阵列…

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

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

innoDB存储引擎

1.逻辑存储结构 行数据->行->页->区->段->表空间 表空间(ibd文件)&#xff0c;一个mysql实例可以对应多个表空间&#xff0c;来存储记录&#xff0c;索引等数据。 段&#xff1a;分为数据段和索引段&#xff0c;回滚段&#xff0c;数据段就是B树的叶子节点&am…

HR3D+HRAuido+HRUI+HR3D_Plugins(游戏引擎源码)

国内知名游戏公司开发的游戏引擎&#xff0c;简洁高效&#xff0c;代码值得参考。包含了这几部分&#xff1a;HR3DHRAuidoHRUIHR3D_Plugins HR3DHRAuidoHRUIHR3D_Plugins&#xff08;游戏引擎源码&#xff09; 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1…

使用xbindkeys设置鼠标侧键

1.安装如下包 sudo apt install xbindkeys xautomation 2.生成配置文件 xbindkeys --defaults > $HOME/.xbindkeysrc 3.确定侧键键号 在终端执行下面的代码&#xff1a; xev | grep button 此时会出现如下窗口&#xff0c;将鼠标指针移动到这个窗口上&#xff1a; 单…

【机器学习】调配师:咖啡的完美预测

有一天&#xff0c;小明带着一脸期待找到了你这位数据分析大师。他掏出手机&#xff0c;屏幕上展示着一份详尽的Excel表格。“看&#xff0c;这是我咖啡店过去一年的数据。”他滑动着屏幕&#xff0c;“每个月的销售量、广告投入&#xff0c;还有当月的气温&#xff0c;我都记录…

【MYSQL】事务隔离级别

脏读、幻读、不可重复读 脏读 一个事务正在对一条记录做修改&#xff0c;在这个事务完成并提交前&#xff0c;另一个事务也来读取同一条记录&#xff0c;读取了这些未提交的“脏”数据&#xff0c;并据此做进一步的处理&#xff0c;就会产生未提交的数据依赖关系。这种现象被形…

【控制篇 / 分流】(7.4) ❀ 01. 对指定IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带&#xff0c;一条ADSL拨号用来上网&#xff0c;一条移动SDWAN&#xff0c;已经连通总部内网服务器&#xff0c;领导要求&#xff0c;只有访问公司服务器IP时走移动SDWAN&#xff0c;其它访问都走ADSL拨号&#xff0c;如果你是管理员&#xff0c;你知道有…

自定义 React Hooks:编写高效、整洁和可重用代码的秘密武器

欢迎来到神奇的 React 世界 大家好!在 React 的世界中,有一个强大的秘密武器,它往往隐藏在显而易见的地方,由于缺乏理解或熟悉而没有得到充分利用。 这个强大的工具,被称为自定义 React hooks,可以彻底改变我们编写 React 应用程序代码的方式。通过提取组件中的有状态逻辑,自…

查找局域网树莓派raspberry的mac地址和ip

依赖python库&#xff1a; pip install socket pip install scapy运行代码&#xff1a; import socket from scapy.layers.l2 import ARP, Ether, srpdef get_hostname(ip_address):try:return socket.gethostbyaddr(ip_address)[0]except socket.herror:# 未能解析主机名ret…

Electron Apple SignIn 登录

本人写博客&#xff0c;向来主张&#xff1a;代码要完整&#xff0c;代码可运行&#xff0c;文中不留下任何疑惑。 最讨厌写博客&#xff0c;代码只留下片段&#xff0c;文中关键的东西没写清楚。之前看了那么多文章&#xff0c;就是不告诉我clientId从哪来的。 官方资料地址&…

WordPress后台底部版权信息“感谢使用 WordPress 进行创作”和版本号怎么修改或删除?

不知道各位WordPress站长在后台操作时&#xff0c;是否有注意到每一个页面底部左侧都有一个“感谢使用 WordPress 进行创作。”&#xff0c;其中WordPress还是带有nofollow标签的链接&#xff1b;而页面底部右侧都有一个WordPress版本号&#xff0c;如下图中的“6.4.2 版本”。…

chisel入门初步1——基4的booth编码的单周期有符号乘法器实现

基4的booth编码乘法器原理说明 基2的booth编码 本质来说就是一个裂项重组&#xff0c;乘法器最重要的设计是改变部分积的数量&#xff0c;另外在考虑有符号数的情况下&#xff0c;最高位符号位有特别的意义。 &#xff08;注&#xff1a;部分积是指需要最后一起加和的所有部分…

使用的uview 微信高版本 头像昵称填写能力

<template><view><button class"cu-btn block bg-blue margin-tb-sm lg" tap"wxGetUserInfo">一键登录</button><view><!-- 提示窗示例 --><u-popup :show"show" background-color"#fff">&…

关于C#中的async/await的理解

1. 使用async标记的方法被认为是一个异步方法&#xff0c;如果不使用await关键字&#xff0c;调用跟普通方法没有区别 static async Task Main(string[] args){Console.WriteLine("主线程id&#xff1a;" Thread.CurrentThread.ManagedThreadId);TestAwait();Consol…

翻译: Streamlit从入门到精通六 实战缓存Cache请求数据

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二翻译: Streamlit从入门到精通 构建一个机器学习应用程序 三翻译: Streamlit从入门到精通 部署一个机器学习应用程序 四翻译…

从matlab的fig图像文件中提取数据

这里用的是openfig&#xff08;&#xff09;函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…

StarRocks 生成列:百倍提速半结构化数据分析

半结构化分析主要是指对 MAP&#xff0c;STRUCT&#xff0c;JSON&#xff0c;ARRAY 等复杂数据类型的查询分析。这些数据类型表达能力强&#xff0c;因此被广泛应用到 OLAP 分析的各种场景中&#xff0c;但由于其实现的复杂性&#xff0c;对这些复杂类型分析将会比一般简单类型…