MATLAB实现基于“蚁群算法”的AMR路径规划

目录

1 问题描述

2 算法理论

3 求解步骤

4 运行结果

5 代码部分

1 问题描述

       移动机器人路径规划是机器人学的一个重要研究领域。它要求机器人依据某个或某些优化原则 (如最小能量消耗,最短行走路线,最短行走时间等),在其工作空间中找到一条从起始状态到目标状态的能避开障碍物的最优路径。机器人路径规划问题可以建模为一个有约束的优化问题,都要完成路径规划、定位和避障等任务

2 算法理论

        蚁群算法(Ant Colony Algorithm,ACA),最初是由意大利学者Dorigo M. 博士于1991 年首次提出,其本质是一个复杂的智能系统,且具有较强的鲁棒性,优良的分布式计算机制等优点。该算法经过十多年的发展,已被广大的科学研究人员应用于各种问题的研究,如旅行商问题,二次规划问题,生产调度问题等。但是算法本身性能的评价等算法理论研究方面进展较慢。

        Dorigo 提出了精英蚁群模型(EAS),在这一模型中信息素更新按照得到当前最优解的蚂蚁所构造的解来进行,但这样的策略往往使进化变得缓慢,并不能取得较好的效果。

        次年Dorigo 博士给出改进模型(ACS),文中 改进了转移概率模型,并且应用了全局搜索与局部搜索策略,来得进行深度搜索。

        Stützle 与Hoos给出了最大-最小蚂蚁系统(MAX-MINAS),所谓最大-最小即是为信息素设定上限与下限,设定上限避免搜索陷入局部最优,设定下限鼓励深度搜索。蚂蚁作为一个生物个体其自身的能力是十分有限的,比如蚂蚁个体是没有视觉的,蚂蚁自身体积又是那么渺小,但是由这些能力有限的蚂蚁组成的蚁群却可以做出超越个体蚂蚁能力的超常行为。蚂蚁没有视觉却可以寻觅食物,蚂蚁体积渺小而蚁群却可以搬运比它们个体大十倍甚至百倍的昆虫。这些都说明蚂蚁群体内部的某种机制使得它们具有了群体智能,可以做到蚂蚁个体无法实现的事情。经过生物学家的长时间观察发现,蚂蚁是通过分泌于空间中的信息素进行信息交流,进而实现群体行为的。

        下面简要介绍蚁群通过信息素的交流找到最短路径的简化实例,AE 之间有两条路ABCDE 与ABHDE,其中AB,DE,HD,HB 的长度为1,BC,CD 长度为0.5,并且,假设路上信息素浓度为0,且各个蚂蚁行进速度相同,单位时间所走的长度为1,每个单位时间内在走过路径上留下的信息素的量也相同。当t=0时,从A 点,E 点同时各有30 只蚂蚁从该点出发。当t=1,从A 点出发的蚂蚁走到B 点时,由于两条路BH 与BC 上的信息素浓度相同,所以蚂蚁以相同的概率选择BH 与BC,这样就有15 只蚂蚁选择走BH,有15 只蚂蚁选择走BC。同样的从E 点出发的蚂蚁走到D 点,分别有15 只蚂蚁选择DH 和DC。当t=2 时,选择BC 与DC的蚂蚁分别走过了BCD 和DCB,而选择BH 与DH 的蚂蚁都走到了H 点。所有的蚂蚁都在所走过的路上留下了相同浓度的信息素,那么路径BCD 上的信息素的浓度是路径BHD 上信息素浓度的两倍,这样若再次有蚂蚁选择走BC 和BH 时,或选择走DC 与DH 时,都会以较大的概率选择信息素浓度高的一边。这样的过程反复进行下去,最短的路径上走过的蚂蚁较多,留下的信息素也越多,蚁群这样就可以找到一条较短的路。这就是它们群体智能的体现。

      蚁群算法就是模拟蚂蚁觅食过程中可以找到最短的路的行为过程设计的一种仿生算法。在用蚁群算法求解组合优化问题时

  • 首先要将组合优化问题表达成与信息素相关的规范形式

  • 然后各个蚂蚁独立地根据局部的信息素进行决策构造解,并根据解的优劣更新周围的信息素

  • 这样的过程反复的进行即可求出组合优化问题的优化解。

归结蚁群算法有如下特点:

(1)分布式计算:

各个蚂蚁独立地构造解,当有蚂蚁个体构造的解较差时,并不会影响整体的求解结果。这使得算法具有较强的适应性;

(2)自组织性:

系统学中自组织性就是系统的组织指令是来自系统的内部。同样的蚁群算法中的各个蚂蚁的决策是根据系统内部信息素的分布进行的。这使得算法具有较强的鲁棒性;

(3)正反馈机制与负反馈机制结合:

若某部分空间上分布的信息素越多,那么在这个空间上走过的蚂蚁也就越多;走过的蚂蚁越多,在那个空间上留下的信息素也就越多,这就是存在的正反馈机制。但蚁群算法中解的构造是通过计算转移概率实现的,也就是说构造解的时候可以接受退化解,这限制了正反馈机制,可以使得搜索范围扩大,这是蚁群算法中隐含的负反馈机制。

3 求解步骤

应用蚁群算法求解机器人路径优化问题的主要步骤如下:

(1)输入由0和1组成的矩阵表示机器人需要寻找最优路径的地图的地图,其中0表示此处可以通过的,1表示此处为障碍物。

上图的表示矩阵为:

                         0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;

                         0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;

                         0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0;

                         0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;

                         0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;

                         0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0;

                         0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0;

                         0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0;

                         0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0;

                         0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;

                         0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0;

                         0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0;

                         0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0;

                         0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;

(2)输入初始的信息素矩阵,选择初始点和终止点并且设置各种参数。在此次计算中,

我们设置所有位置的初始信息素相等。

(3)选择从初始点下一步可以到达的节点,根据每个节点的信息素求出前往每个节点的

概率,并利用轮盘算法选取下一步的初始点。

(4)更新路径,以及路程长度。

  (5) 重复(3)(4)过程,直到蚂蚁到达终点或者无路可走。

(6)重复(3)(4)(5),直到某一代m只蚂蚁迭代结束。

(7)更新信息素矩阵,其中没有到达的蚂蚁不计算在内。

(8)重复(3)-(7),直至n代蚂蚁迭代结束。

4 运行结果

将上述矩阵输入到程序中,画出最短路径的路线,并且输入每一轮迭代的最短路径,查看程序的收敛效果,在程序中设置plotif=1则输出收敛和最短路径图,在程序中设置plotif2=1则输出每一代蚂蚁的路径图。

最终输出的结果如图

路径规划图

对应收敛曲线图

5 代码部分

function m_main() 
G=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0; 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0; 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;]; 
MM=size(G,1);      % G 地形图为01矩阵,如果为1表示障碍物 
Tau=ones(MM*MM,MM*MM);% Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)Tau=8.*Tau; 
K=100;          % K 迭代次数(指蚂蚁出动多少波)M=50;         % M 蚂蚁个数(每一波蚂蚁有多少个)S=1 ;         % S 起始点(最短路径的起始点)E=MM*MM;         % E 终止点(最短路径的目的点)Alpha=1;    % Alpha 表征信息素重要程度的参数Beta=7;     % Beta 表征启发式因子重要程度的参数Rho=0.3 ;     % Rho 信息素蒸发系数Q=1;          % Q 信息素增加强度系数 
minkl=inf; 
mink=0; 
minl=0; D=G2D(G); 
N=size(D,1);%N表示问题的规模(象素个数)a=1;%小方格象素的边长Ex=a*(mod(E,MM)-0.5);%终止点横坐标if Ex==-0.5 
Ex=MM-0.5; 
end 
Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标Eta=zeros(N);%启发式信息,取为至目标点的直线距离的倒数%下面构造启发式信息矩阵for i=1:N ix=a*(mod(i,MM)-0.5); if ix==-0.5 ix=MM-0.5; end 
iy=a*(MM+0.5-ceil(i/MM));  if i~=E Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5; else Eta(i)=100; end 
end 
ROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度%% -----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁-------------------- 
for k=1:K 
for m=1:M 
%% 第一步:状态初始化W=S;%当前节点初始化为起始点Path=S;%爬行路线初始化
PLkm=0;%爬行路线长度初始化TABUkm=ones(N);%禁忌表初始化TABUkm(S)=0;%已经在初始点了,因此要排除DD=D;%邻接矩阵初始化%% 第二步:下一步可以前往的节点DW=DD(W,:); 
DW1=find(DW); 
for j=1:length(DW1) if TABUkm(DW1(j))==0 DW(DW1(j))=0; end 
end 
LJD=find(DW); 
Len_LJD=length(LJD);%可选节点的个数%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同while W~=E&&Len_LJD>=1 
%% 第三步:转轮赌法选择下一步怎么走PP=zeros(Len_LJD); for i=1:Len_LJD PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta); end 
sumpp=sum(PP); 
PP=PP/sumpp;%建立概率分布
Pcum(1)=PP(1); for i=2:Len_LJD Pcum(i)=Pcum(i-1)+PP(i); end 
Select=find(Pcum>=rand); 
to_visit=LJD(Select(1)); 
%% 第四步:状态更新和记录
Path=[Path,to_visit];%路径增加
PLkm=PLkm+DD(W,to_visit);%路径长度增加
W=to_visit;%蚂蚁移到下一个节点for kk=1:N if TABUkm(kk)==0 DD(W,kk)=0; DD(kk,W)=0; end end 
TABUkm(W)=0;%已访问过的节点从禁忌表中删除DW=DD(W,:); 
DW1=find(DW); 
for j=1:length(DW1) if TABUkm(DW1(j))==0 DW(j)=0; end end 
LJD=find(DW); 
Len_LJD=length(LJD);%可选节点的个数end 
%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度ROUTES{k,m}=Path; if Path(end)==E PL(k,m)=PLkm; if PLkm<minkl mink=k;minl=m;minkl=PLkm; end else PL(k,m)=0; end 
end 
%% 第六步:更新信息素
Delta_Tau=zeros(N,N);%更新量初始化for m=1:M if PL(k,m)  ROUT=ROUTES{k,m}; TS=length(ROUT)-1;%跳数PL_km=PL(k,m); for s=1:TS x=ROUT(s); y=ROUT(s+1); Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km; Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km; end end end 
Tau=(1-Rho).*Tau+Delta_Tau;%信息素挥发一部分,新增加一部分end 
%% ---------------------------绘图-------------------------------- 
plotif=1;%是否绘图的控制参数if plotif==1 %绘收敛曲线minPL=zeros(K); for i=1:K PLK=PL(i,:); Nonzero=find(PLK); PLKPLK=PLK(Nonzero); minPL(i)=min(PLKPLK); end 
figure(1) 
plot(minPL); 
hold on 
grid on 
title('收敛曲线(最小路径长度)'); 
xlabel('迭代次数'); 
ylabel('路径长度'); %绘爬行图
figure(2) 
axis([0,MM,0,MM]) 
for i=1:MM 
for j=1:MM 
if G(i,j)==1 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]); 
hold on 
else 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]); 
hold on 
end 
end 
end 
hold on 
ROUT=ROUTES{mink,minl}; 
LENROUT=length(ROUT); 
Rx=ROUT; 
Ry=ROUT; 
for ii=1:LENROUT 
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5); 
if Rx(ii)==-0.5 
Rx(ii)=MM-0.5; 
end 
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM)); 
end 
plot(Rx,Ry) 
end 
plotif2=0;%绘各代蚂蚁爬行图
if plotif2==1 
figure(3) 
axis([0,MM,0,MM]) 
for i=1:MM 
for j=1:MM 
if G(i,j)==1 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]); 
hold on 
else 
x1=j-1;y1=MM-i; 
x2=j;y2=MM-i; 
x3=j;y3=MM-i+1; 
x4=j-1;y4=MM-i+1; 
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]); 
hold on 
end 
end 
end 
for k=1:K 
PLK=PL(k,:); 
minPLK=min(PLK); 
pos=find(PLK==minPLK); 
m=pos(1); 
ROUT=ROUTES{k,m}; 
LENROUT=length(ROUT); 
Rx=ROUT; 
Ry=ROUT; 
for ii=1:LENROUT 
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5); 
if Rx(ii)==-0.5 
Rx(ii)=MM-0.5; 
end 
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM)); 
end 
plot(Rx,Ry) 
hold on 
end 
end 
function D=G2D(G) 
l=size(G,1); 
D=zeros(l*l,l*l); 
for i=1:l for j=1:l if G(i,j)==0 for m=1:l for n=1:l if G(m,n)==0 im=abs(i-m);jn=abs(j-n); if im+jn==1||(im==1&&jn==1) D((i-1)*l+j,(m-1)*l+n)=(im+jn)^0.5; end end end end end end 
end 

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

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

相关文章

Shopify Checkout UI Extensions

结账界面的UI扩展允许应用开发者构建自定义功能&#xff0c;商家可以在结账流程的定义点安装&#xff0c;包括产品信息、运输、支付、订单摘要和Shop Pay。 Shopify官方在去年2024年使用结账扩展取代了checkout.liquid&#xff0c;并将于2025年8月28日彻底停用checkout.liquid…

电阻的阻值识别

电阻买回来是有偏差的&#xff0c;不同的电阻种类&#xff0c;它的偏差大小会不一样&#xff0c;偏差越小的肯定越贵 主要看要求的精度要求是否越高 色环电阻或者说插件电阻 用来读数的几个色环它是比较靠近的&#xff0c;精度的色环跟用来读数的几个色环的间距会大一点点。 间…

quartz.net条件执行

quartz.net条件执行 在使用Quartz.NET时&#xff0c;你可能需要基于某些条件来决定是否执行一个任务。Quartz.NET本身并不直接支持基于条件执行任务的功能&#xff0c;但你可以通过一些策略来实现这一需求。下面是一些方法来实现基于条件的任务执行&#xff1a; 1. 使用触发器…

计算机操作系统(四) 操作系统的结构与系统调用

计算机操作系统&#xff08;四&#xff09; 操作系统的结构与系统调用 前言一、操作系统的结构1.1 简单结构1.2 模块化结构1.3 分层化结构1.4 微内核结构1.5 外核结构 二、系统调用1.1 系统调用的基本概念1.2 系统调用的类型 总结&#xff08;核心概念速记&#xff09;&#xf…

NSSCTF(MISC)——[SUCTF 2018 招新赛]single-dog

相应的做题地址&#xff1a;https://www.nssctf.cn/problem/2324 分离图片 在1.txt中得到一段颜文字 http://www.hiencode.com/aaencode.html 解密得到flag

低功耗蓝牙(BLE)方案设计实战指南

一、BLE方案设计工具链 1. 硬件选型与开发平台 TI平台&#xff1a;CC2540/CC2541芯片&#xff0c;使用SmartRF Flash Programmer烧录Nordic平台&#xff1a;nRF51822芯片&#xff0c;使用nRFgo Studio管理协议栈常用调试工具&#xff1a;TI CC Debugger、J-Link&#xff08;SW…

网络基础(一)

独立模式与网络互联 独立模式: 计算机之间相互独立。 网络互联&#xff1a;多台计算机连接在一起&#xff0c;完成数据共享。 注意&#xff1a;无论是主机内还是主机外&#xff0c;都是通过线来进行连接的&#xff0c;主机内线&#xff08;线比较短&#xff09;的连接主要考虑…

用Canvas 画布样式实现旋转的阴阳图

用Canvas 画布样式实现旋转的阴阳图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Canvas八卦图动画</title><style>/* 重置所有元素的默认样式 */* {padding: 0;margin: 0;box-sizin…

第16届蓝桥杯单片机4T模拟赛三

本次模拟赛涉及的模块&#xff1a;基础三件套&#xff08;Led&Relay&#xff0c;按键、数码管&#xff09; 进阶单件套&#xff08;pcf8591的AD模块&#xff09; 附件&#xff1a; 各模块底层代码在文章的结尾 一、数码管部分 1.页面1 页面1要显示的格式是&#xff1a; …

优选算法的睿智之林:前缀和专题(一)

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 目录 一、前缀和 二、例题讲解 2.1. 一维前缀和 2.2. 二维前缀和 2.3. 寻找数组的中心下标 2.4. 除自身以外数组的乘积 一、前缀和 前缀和算法是一种用于处理数组或序列数据的算法&#xff0c;其核心思想是…

瑞萨RX23E系列开发(二)建立工程

新建工程 使用倒数第二个模板 选择路径 我这里是这个型号。根据型号选择芯片 第一次需要下载FIT

【算法day19】括号生成——数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

括号生成 https://leetcode.cn/problems/generate-parentheses/description/ 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 左括号数必须大于右括号数&#xff0c;且小于等于n class Solution { publ…

Apache Doris学习

https://doris.apache.org/zh-CN/docs/gettingStarted/what-is-apache-doris 介绍 Apache Doris 是一款基于 MPP 架构&#xff08;大规模并行处理&#xff09;的高性能、实时分析型数据库。它以高效、简单和统一的特性著称&#xff0c;能够在亚秒级的时间内返回海量数据的查询…

基于springboot的新闻推荐系统(045)

摘要 随着信息互联网购物的飞速发展&#xff0c;国内放开了自媒体的政策&#xff0c;一般企业都开始开发属于自己内容分发平台的网站。本文介绍了新闻推荐系统的开发全过程。通过分析企业对于新闻推荐系统的需求&#xff0c;创建了一个计算机管理新闻推荐系统的方案。文章介绍了…

Jboss漏洞再现

一、CVE-2015-7501 1、开环境 2、访问地址 / invoker/JMXInvokerServlet 出现了让下载的页面&#xff0c;说明有漏洞 3、下载ysoserial工具进行漏洞利用 4、在cmd运行 看到可以成功运行&#xff0c;接下来去base64编码我们反弹shell的命令 5、执行命令 java -jar ysoserial-…

(二)VMware:VMware虚拟机安装CentOS教程

目录 1、准备CentOS 7镜像1.1、官网镜像下载1.2、清华大学开源镜像下载​1.3、阿里云开源镜像下载 2、使用 VMware安装CentOS 72.1、创建虚拟机2.2、选择自定义安装2.3、硬件兼容性&#xff0c;保持默认2.4、选择下载的ISO镜像2.5、设置虚拟机名称以及存放磁盘位置2.6、按照需求…

哈尔滨工业大学DeepSeek公开课人工智能:从图灵测试到DeepSeek|附视频和PPT下载方法

导 读 INTRODUCTION 今天给大家分享一份哈尔滨工业大学发布的《从图灵测试到DeepSeek》&#xff0c;由哈尔滨工业大学人工智能学院执行院长兼计算学部副主任张伟男教授带你穿越AI发展简史&#xff0c;解锁从图灵测试的奠基性思想到DeepSeek大模型的技术突破&#xff0c;带你领…

【算法笔记】图论基础(一):建图、存图、树和图的遍历、拓扑排序、最小生成树

目录 何为图论图的概念 图的一些基本概念有向图和无向图带权图连通图和非连通图对于无向图对于有向图 度对于无向图对于有向图一些结论 环自环、重边、简单图、完全图自环重边简单图 稀疏图和稠密图子图、生成子图同构 图的存储直接存边邻接矩阵存边邻接表存边链式前向星存边 图…

vue 对接 paypal 订阅和支付

一个是支付一个是订阅&#xff0c;写的时候尝试把他们放到一个里面&#xff0c;但是会报错&#xff0c;所以分开写了 我们的页面&#xff0c;前三个为订阅最后一个是支付&#xff0c;我把他们放到一个数组里面循环展示的&#xff0c;所以我们判断的时候只要判断id是否为4&#…

(四)---四元数的基础知识-(定义)-(乘法)-(逆)-(退化到二维复平面)-(四元数乘法的导数)

使用四元数的原因 最重要的原因是因为传感器的角速度计得到的是三个轴的角速度, 这三个轴的角速度合成一个角速度矢量, 结果就是在微小时间内绕着这个角速度矢量方向为轴旋转一定角度. 截图来源网址四元数 | Crazepony开源四轴飞行器