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)<=ls
 S(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),:)=[];
 end
 elseif 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;
 else
 S(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));
 end
 
 if Dsmin(2)<=ls
 S(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),:)=[];
 end
 elseif 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;
 else
 S(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));
 end
 
 if Dsmin(3)<=ls
 S(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),:)=[];
 end
 elseif 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;
 else
 S(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));
 end
 
 if Dsmin(4)<=ls
 S(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),:)=[];
 end
 elseif 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;
 else
 S(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:N
 mode(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;
 else
 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;
end
 end
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.mfbz.cn/a/333343.html

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

相关文章

cKDTree中的query_ball_point()函数用法

1. 用法 x可以是一个点也可以是一堆点&#xff0c;要找x邻域内的点。 r是搜索的半径。 eps是一个非负的float型小数&#xff0c;如果最近邻的点距离比r/(1eps)还大&#xff0c;则不再进行搜索。 返回找到的点的索引。 from scipy.spatial import cKDTree #point cloud data -&…

PBR材质纹理下载

03:10 按照视频里的顺序 我们从第6个网站开始倒数 点击本行文字或下方链接 进入查看 6大网站地址 网址查看链接&#xff1a; http://www.uzing.net/community_show-1962-48-48-35.html 06 Tectures Wood Fence 001 | 3D TEXTURES 简介&#xff1a;最大的纹理网站之一&#x…

Vcruntime140_1.dll丢失的错误提示怎么解决,关于Vcruntime140_1.dll文件

在使用电脑时你是否遇到过关于Vcruntime140_1.dll文件丢失的错误提示&#xff0c;出现这样的提示时是不是不知所措&#xff0c;今天就给大家讲解Vcruntime140_1.dll文件的一些相关介绍&#xff0c;希望能够帮助大家解决Vcruntime140_1.dll丢失的难题。 一.Vcruntime140_1.dll文…

Docker 安装 CentOS

Docker 安装 CentOS CentOS&#xff08;Community Enterprise Operating System&#xff09;是 Linux 发行版之一&#xff0c;它是来自于 Red Hat Enterprise Linux(RHEL) 依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码&#xff0c;因此有些要求高度稳定性…

2023年全球软件质量效能大会(QECon深圳站):核心内容与学习收获(附大会核心PPT下载)

随着科技的快速发展&#xff0c;软件行业面临着越来越多的挑战和机遇。为了更好地应对这些挑战&#xff0c;不断提升软件的质量和效能&#xff0c;大会将汇聚全球的软件开发者、架构师和项目经理&#xff0c;共同探讨和分享关于软件质量保证、测试、性能优化、用户体验设计、人…

寒假刷题-递归与递推

寒假刷题 92. 递归实现指数型枚举 解法1递归 使用递归对每一个坑位进行选择&#xff0c;每个坑位有两种选择&#xff0c;填或者不填&#xff0c;使用st数组来记录每个坑位的状态&#xff0c;u来记录已经有多少坑位有了选择。 每个坑位有2钟选择&#xff0c;n个坑位的复杂度就…

基于gd32f103移植freemodbus master 主栈

1.移植freemodbus master需要先移植RT-Thread操作系统 GD32F103C8T6移植 RTT Nano 教程-CSDN博客 2.移植freemodbus master协议栈 在移植了RTT以后,我们需要移植就只有串口相关的函数 移植freemodbus master协议栈具体步骤 下载移植freemodbus master协议栈 源码添加协议栈…

PPT 编辑模式滚动页面不居中

PPT 编辑模式滚动页面不居中 目标&#xff1a;编辑模式下适应窗口大小、切换页面居中显示 调整视图大小&#xff0c;编辑模式通过Ctrl 鼠标滚轮 或 在视图菜单中点击适应窗口大小。 2. 翻页异常&#xff0c;调整视图大小后&#xff0c;PPT翻页但内容不居中或滚动&#xff0c…

2024开放式耳机怎么选?最新开放式耳机选购指南,实测避坑!

在音乐的世界中&#xff0c;开放式耳机为听者提供了一种与众不同的聆听体验&#xff0c;它们能够让你更深入地感受音乐&#xff0c;长时间佩戴也更加舒适健康&#xff0c;2024年市场上涌现出了众多优质的开放式耳机&#xff0c;为音乐爱好者提供了丰富的选择&#xff0c;但如何…

AWS CI/CD之三:CodePipeline

前提 在搞定CodeBuild和CodeDeploy之后&#xff0c;就可以配置CodePipeline&#xff0c;这是AWS CI/CD最后一个核心服务了。 1. 设置源 打开CodePipeline主页&#xff0c;开始创建管道&#xff0c;如下图&#xff1a; 管道设置&#xff0c;如下图&#xff1a; 设置源&…

排序:计数排序

目录 思想&#xff1a; 操作步骤&#xff1a; 思路&#xff1a; 注意事项&#xff1a; 优缺点&#xff1a; 代码解析&#xff1a; 完整代码展示&#xff1a; 思想&#xff1a; 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 操作步骤&#xff…

我用 ChatGPT 做了一次探索性数据分析,真的太太太实用了!

ChatGPT 经过短短1年时间的发展&#xff0c;其功能越来越强&#xff0c;现在已经是大多数企业和个人不可或缺的助手。特别是最新的 GPT-4 版本&#xff0c;专门在左边菜单栏给出了两个工具&#xff08;一个是数据分析&#xff0c;另一个是根据文字描述生成图片&#xff09;&…

RT-Thread Studio学习(十六)定时器计数

RT-Thread Studio学习&#xff08;十六&#xff09;定时器计数 一、简介二、新建RT-Thread项目并使用外部时钟三、启用PWM输入捕获功能四、测试 一、简介 本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用定时器对输入脉冲进行计数。 硬件及开发环境如下…

使用pyechart创建折线图

import json from pyecharts.charts import Line from pyecharts import options# 首先使用文件打开数据 f_us open(Desktop/python/Project/数据可视化/美国.txt,r,encoding"UTF-8") f_rb open(Desktop/python/Project/数据可视化/日本.txt,r,encoding"UTF-8…

springboot106大学城水电管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的大学城水电管理系统 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 …

密码学学习笔记(二十四):TCP/IP协议栈

TCP/IP协议栈的基础结构包括应用层、传输层、网络层、数据链路层和物理层。 应用层 应用层位于TCP/IP协议栈的最顶层&#xff0c;是用户与网络通信的接口。这一层包括了各种高级应用协议&#xff0c;如HTTP&#xff08;用于网页浏览&#xff09;、FTP&#xff08;用于文件传输…

c# 自定义 滑块TrackBar

辛苦半天做出来的&#xff0c;如果觉得好用&#xff0c;记得点赞 效果图如下&#xff1a; 具体操作&#xff1a; 1 、添加代码&#xff08;代码在下面&#xff09;&#xff0c;重新生成下整个工程&#xff0c;在工具栏中就出现控件&#xff0c;将控件拖到窗体中 2、只需要调整…

【Qt5】QString的成员函数trimmed

2024年1月19日&#xff0c;周五下午 QString 的 trimmed 方法是用于移除字符串两端的空白字符&#xff08;空格、制表符、换行符等&#xff09;的方法。它返回一个新的字符串&#xff0c;该字符串是原始字符串去除两端空白后的结果。 下面是一个简单的示例&#xff1a; #incl…

瑞_Java开发手册_(六)工程结构

文章目录 工程结构的意义(一) 应用分层(二) 二方库依赖(三) 服务器 &#x1f64a;前言&#xff1a;本文章为瑞_系列专栏之《Java开发手册》的工程结构篇&#xff0c;主要介绍应用分层、二方库依赖、服务器。由于博主是从阿里的《Java开发手册》学习到Java的编程规约&#xff0c…

往docker中cloudbeaver的容器添加达梦数据库、impala数据库连接支持(cloudbeaver添加自定义数据连接)

cloudbeaver默认没有开放impala连接&#xff0c;更不会支持国产数据库了 docker安装运行cloudbeaver可以参考文章&#xff1a;docker安装运行CloudBeaver并设置默认语言为中文 本文跳过cloudbeaver镜像拉取&#xff0c;直接就开始实现自定义数据库连接功能 1、初始化cloudbe…
最新文章