ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:166.08KB ,
资源ID:10381600      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10381600.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(人工神经网络的路径优化.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

人工神经网络的路径优化.docx

1、人工神经网络的路径优化基于Hopfield 人工神经网络的路径优化绪论本文研究了移动机器人在含障区域内完成全覆盖行走路径的优化。将子区域内行走路线、区域分割和子区域衔接顺序三方面结合,进行总体优化的考虑。提出用“双线扫法”完成区域的分割,选择“向内螺旋式”行进作为子区域内部行进路径,构造整个待覆盖区域全连通图模型。由于基于全连通图模型的行走路径与TSP问题极其相似,所以我采用了Hopfield人工神经网络求解TSP问题的方法优化全连通图,对移动机器人在各个子区域的行走顺序进行寻优。最后给出了仿真试验,试验表明利用Hopfield人工神经网络,移动机器人在含有障碍物的环境中能够找到全覆盖的最优路

2、径或者次优的路径。1 环境建模所谓全覆盖寻优路径规划,是指机器人合理而高效地走遍一个区域内除障碍物以外的全部地方。和点到点寻优算法一样全覆盖算法的应用范围很广,比如清扫(灰尘树叶积雪等)、收割(谷物草等)、耕犁、播撒(农药种子刷塗)、探矿、搜救、水下测绘、排雷等等。11 子区域内的行走方式子区域内部行进方式采用“螺旋收缩式”。虽然“螺旋收缩式”和“往复前进式”本身各有优缺点,但在多子区域覆盖问题上,“螺旋收缩式”的优点显而易见。这些优点包括:“螺旋收缩式”行进方式可避免“往复前进式”的边缘效应;“螺旋收缩式”不会留下或只在中间留下很少的未覆盖面积,而这位于中间的小的未覆盖部分,对机器人来说是很

3、容易解决的;从理论上讲,机器人完成子区域内部覆盖后的终点位于最开阔的子区域重心(见图1),从而有利于区域分割任务完成后的机器人子区域衔接行为。图1 螺旋收缩式行进方式12 区域分割子区域分割采用“双线扫法”。所谓“双线扫法”,即用直立和水平各一根想象中的长线段分两次“扫” 过整个待覆盖区域,第一次用直立线段从最左端“扫”至最右端,每当这根线与某个障碍物的某条直立边重合时,该线就从待覆盖区域划出一个高度等于待覆盖区域高度的子块。第二次用水平线段从最上端至“扫”最下端,每当这根线与某个障碍物的某条水平边重合时,该线就将某个前次被直立线段划出的子块进一步分割成独立的子区域。就是说,“双线扫法”分两次

4、把整个待覆盖区域的子区域分割任务完成。“双线扫法”比较适用于平行四边形障碍物且其边多数平行于区域边缘的情况。“双线扫法”将整个待覆盖区域自然形成的小区域分割开来,不刻意追求所分成的子区域本身覆盖的高效率,主观上避免过小区域的出现,造成行走困难。子区域面积越大,则一般说来由直线行进加以覆盖的部分就越多,余下由转弯动作完成覆盖的部分自然就越少了,耗费在转弯上的定位导航的时间变短、消耗的能量减少,提高了效率。图2 ,采用“双线扫法” 的对环境进行分割后的坐标式环境地图。图2 “双线扫法” 的坐标式环境地图用坐标法表示环境地图,经过分割后有两个障碍物的平面图被分割为七个子区域,每个子区域的坐标表示如下

5、:第一个子区域第二个子区域第三个子区域第四个子区域第五个子区域第六个子区域第七个子区域分割的七个子区域如图3:图3 分割的七个子区域13 区域全连通图在分割后的子区域基础上,构造整个待覆盖区域的全连通图模型。为利用神经网络方法求子区域衔接顺序做准备。把各个子区域的重心,作为该子区域对应节点的位置。把子区域重心间的距离,作为对应节点间连线的长度。由于真实情况是只有部分子区域相邻,所以最初的连通图只有部分节点之间直接连通。为了进一步构造任意两个节点间都直接连通的全连通图,需要根据具体情况,在一些节点之间添加必要的连线,确实不能连接的节点之间用长度足够大的连线相连。 前面环境模型的连通图表示为图4:

6、图4 区域全连通图14 优化机器人行走路线本文要做的工作就是利用Hopfield 网络解决TSP 旅行商问题的办法,优化全连通图,找出一条优化行走路线。使得机器人找出一条最短的路线,走遍连通图中的所有节点并最终回到起点。下图是基于前面环境模型经过仿真的道的一条优化路径。如图5:图5 优化的路径2 Hopfield 人工神经网络算法概述Hopfield 网络分为两类;离散型Hopfield 网络(Discrete Hopfield Neural Network) 和连续型Hopfield 网络(Continuous Hopfield Neural Network)。 两者具有相同的拓扑结构(如图

7、6), 主要区别在于其中每个神经元的取值是离散的还是连续的。这种拓扑结构在很大程度上反映了生物神经系统中广泛存在的神经回路现象。本文涉及的是连续型Hopfield 网络(CHNN) 在CHNN 中各个神经元的状态取值是连续的,它根据式(2.1)所规定的符合生物神经活动的规律变化。图6 连续型Hopfield 网络 式(2.1)其中,Xi 第i 个神经元输入;Vj :第j 个神经元输出;Ii 第i 个神经元外部输入; r:时间常数;Wij; 反馈网络联结权 第j 个神经元输出反馈到第i 个神经元输入的系数;输出Vj=f(Xj),函数f(.)为S 型函数(见式2.2) 和图7。S 型函数符合真实神

8、经细胞中信息传递的单调上升关系。 式(2.2)图7 神经元输入和输出的关系从上面可以知道,连续Hopfield 网络是一个单层反馈网络,它的每个神经元的输入与输出关系为连续可微的单调上升函数,每个神经元的输入与来自网络外部的输入信号和网络内部其它神经元的输出信号有直接关系,这种关系由它们之间的连接权定量确定。由于每个神经元的输入是一个随时间变化的状态变量,于是整个系统成为一个随时间变化的动态系统。关于CHNN 的稳定性问题,Hopfield 提出了一个有确定物理意义的广义李雅普诺夫函数,称为能量函数,能判别一个单层反馈动态神经网络的稳定性。CHNN 的能量函数定义为 式2.3如果能量函数E 随

9、时间单调下降,就总可以达到能量的极小点,也就是系统的稳定点。稳定条件是:若Wij = Wji 且输入输出关系是单调上升函数(dVi/dXi 0),则网络最终到达稳定点。顺便指出,Hopfield 选择的能量函数,只是保证系统稳定和渐近稳定的充分条件,而不是必要条件,也就是说能量函数不是唯一的。能量函数第三项是仿照人工神经网络电路实现而人为增加的,它是一个正值函数,表现为Vi值越小,能量值也越小。如果人为地设计连续Hopfield 神经网络的联接权矩阵W和输入I, 把传统优化问题中的目标函数、约束条件这两个东西与Hopfield 能量函数联系起来,那么能量函数的极小点也是优化问题中满足约束条件的

10、目标函数的极小点。这就是应用CHNN 求解优化问题。21 TSP 问题描述TSP 问题描述如下: 假定有N 个城市的集合( C1 ,C2 ,. . . ,Cn) ,它们之间的距离dxy已知。要求找出一条经过每个城市仅一次的最短路径,并且从起始点回到出发点。例如行走路线为C3 C1 C5 C2 C4 C3 则行走的距离为:d = d31 + d15 + d52 + d24 + d43 可以用关联矩阵表示为:图8 TSP中的关联矩阵(1)TSP 问题的目标函数h(V)把关联矩阵的每个元素用符号Vxi Vyj 来表示,下标x ,y 表示城市, 下标i, j 表示顺序,则目标函数为 式2.4其中,Vx

11、i 取0 表示不经过城市x ,取1 表示经过城市x, dxy 表示两不同城市之间距离(2)约束条件g(V)约束条件是要保证关联矩阵每一行和每一列只有一个元素为1,其余均为0, 为1 的总数为N。 约束条件如下式2.5第一项表示一次只能到一个城市,满足约束时该项为零,第二项表示每个城市只能去一次,第三项表示Vxi 为1 的次数最多为N,若满足约束这些项为0。(3) Hopfield 能量函数 式2.6系数A B C D 和距离dxy 都是大于0 的因而E 0 然后根据能量函数E 式2.7求得神经元的状态方程式2.8根据上面的状态方程,再加下面的输出方程,就可以通过计算机数值迭代求得旅行商的周游顺

12、序。 式2.9值得提及的是,CHNN 本身是非线性的,随着城市数目N 的增加,其局部极小点的数目也随之增加,使优化的结果不容易达到全局最优,而往往得到的是较优解,甚至有时还会得到不很优化的解。即使得到的解不很优化,但只要按照该解能够走遍所有城市且能每个城市只到一次,该解习惯被称为合理解。3 仿真试验设计31 移动机器人环境地图:图9 移动机器人环境地图3.2 环境地图的全连通图根据机器人实际的环境,求得环境的全连通图。3.3 Hopfield 人工神经网络算法模块以下是迭代算法共分5 步第一步取初值第二步在初始时刻t=t0 令Xxi(t0)= Xinit + 其中为随机噪声第三步由求 Xxi(

13、t0)第四步将Vxi(t0)代入下式求 第五步按求下一时刻的Xxi(t+ t) 然后转第三步或者进入下一步第六步当每个Vxi 变化量小于规定值或迭代次数超过规定值时结束迭代。本迭代算法运行所得结果为关联矩阵,其中行表示子区域,列表示移动机器人到达某子区域的先后顺序。CHNN 算法的稳定性先天不足,这一点无法回避,表现为收敛速度不够快,或者系统初始位置不确定导致收敛到一些不是最小值点的极小值点,甚至还有可能发散。原因主要有初值的影响系,数的影响,子区域分布的影响,神经元本身输入输出关系的非线性,等等。Hopfield 网络的成功与否,取决于能不能合适地选择四个独立的系数A B C 和D。 在A

14、B C D 空间中的一个很小的低维区域中,这种方法才能给出满足约束的合理解,大多数选择的系数值都不能得出令人满意的结果。同时注意到了两个隐含的约束:第一个是每个子区域只在旅行路线中出现一次;第二个是旅行路线上的每个站都只能是在一个子区域,所以引入了两个约束J , K。3.4 程序中的参数关联矩阵元素的初值X0 = 0.02约束条件三个系数A = 3.3 B = 3.3 C = 1.5增加的约束条件二个系数J = 30.0 K = 30.0目标函数的系数D = 1.8时间步长t = 0.005结束迭代的关联矩阵元素值增量dv = 0.001结束迭代的迭代次数上限n = 5000实验所采用的一个具

15、有真实距离数值的距离阵如下:其中无法直接相连的用足够大的距离值代替。123456710.001.301.2514.014.014.0 14.021.300.0014.01.351.952.345 14.031.2514.00.001.302.7251.9514.0414.01.351.300.001.4251.32514.0514.01.952.7251.4250.0014.01.45614.02.3451.951.32514.00.001.375714.014.014.014.01.451.3750.00距离阵中距离值的实际单位是米。3.5 仿真结果CHNN 算法代码运行30次,结果为23次

16、收敛到合理解,7次发散。下图是仿真的结果,以及给出的收敛路径,由于时间的仓促没有对仿真结果加以很细的分析。下面只是列出了两种仿真结果。第一种仿真结果:4576213对应于上面仿真结果的全域连通第二种仿真结果:3675421对应于上面仿真结果的全域连通图。仿真结果表明基于Hopfield 人工神经网络算法的有效性,使得移动机器人在含有障碍物的环境种能够找到一条优化的全域覆盖路径。4 小结本文提出用连续Hopfield 人工神经网络模型求解旅行商问题的算法来寻找具有一定优化的移动机器人全覆盖路径。虽然利用Hopfield 模型求解优化问题,不一定每次都能得到最优解,但它确有能快速得到满意解。其次本

17、文给出了在简单环境下的仿真,实验表明了算法的有效性,但是在复杂环境中,由于CHNN 算法本身的缺陷,可能会不收敛,在复杂环境的最优路径的选择还有待进一步研究。附录:算法下面是用VC+编写的仿真程序。#include #include #include #include #define N 7 /* number of cities */seven()float u0,t,tao;float v0,v1,v2,v3,v4,v5,v6,dv,delta,s,dist;float u88,vb99,v99,du88;float A,B,C,D,J,K;int x,i,y,j,e;int n,colu

18、mn9; /* cycling times */float d88=0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0, /* distance */0.0,0.0,1.3,1.25,14.0,14.0,14.0,14.0, /* between */0.0,1.3,0.0,14.0,1.35,1.95,2.345,14.0,/* 7 cities */0.0,1.25,14.0,0.0,1.3,2.725,1.95,14.0,0.0,14.0,1.35,1.3,0.0,1.425,1.325,14.0,0.0,14.0,1.95,2.725,1.425,0.0,14.0,1.45

19、,0.0,14.0,2.345,1.95,1.325,14.0,0.0,1.375,0.0,14.0,14.0,14.0,14.0,1.45,1.375,0.0;u0=0.02; /* step 1:initialization */A=3.3,B=3.3,C=1.5,D=1.8; /* step 1: */J=30.0,K=30.0; /* step 1: */t=0.005;tao=100.0;u00=0.5*u0*log(N-1); /* step 1: */n=1; /* step 1: */printf(u00=%8.6fn,u00); /* */srand(time(NULL);

20、/* second as seed */for(x=1;x8;x+) /* initial input */for(i=1;i8;i+) /* values */ /* of 49 cells */delta=(rand()%2000)/1000.0-1.0;uxi=u00+delta;printf(u%d%d=%6.4f ,x,i,uxi);printf(n);for(x=0;x8;x+) /* step 02: output values */for(i=0;i8;i+) /* step 02: of cell xi*/vbxi=0.0; /* step 02: at time t0 */

21、doe=0;for(x=1;x8;x+) /* step 2: */for(i=1;i0.001) /* step 3: one of criteria */e=1; /* step 3: for end */for(x=1;x8;x+)vx0=vx7;vx8=vx1;if(e=0) /* if all dv0.001 */n+=1; /* continue */for(x=1;x8;x+) /* step 3: */for(i=1;i8;i+) /* */v1=0.0; /* start point */v2=0.0;v3=0.0;v4=0.0;v5=0.0;v6=0.0;v0=-uxi/t

22、ao; /* step 3: - term 0 */for(j=1;j8;j+) /* step 3: total values of */if(j!=i) /* step 3: cells in line x */v1=v1+vxj;v1=-A*v1; /* step 3: - term 1 */for(y=1;y8;y+) /* step 3: total values of */if(y!=x) /* step 3: cells in column i */v2=v2+vyi; /* */v2=-B*v2; /* step 3: - term 2 */for(y=1;y8;y+) /*

23、step 3: total values */for(j=1;j8;j+) /* step 3: of all cells */v3=v3+vyj; /* */v3=-C*(v3-N); /* step 3: - term 3 */for(j=1;j8;j+) /* step 3: possible distance */v4=v4+dxj*(vji+1+vji-1);/* step 3: between any 2 */v4=-D*v4; /* step 3: - term 4 */for(j=1;j8;j+) /* two more restriction */v5=v5+vxj; /*

24、conditions : v5 and v6 */v5=-J*(v5-1.0);for(y=1;y8;y+)v6=v6+vyi;v6=-K*(v6-1.0);duxi=v0+v1+v2+v3+v4+v5+v6; /* step 3: value of du/dt */uxi=uxi+duxi*t; /* step 4: new input */printf(n);while(n5000); /* the other criteria */for(i=1;i8;i+)for(j=1;j8;j+)printf(u%d,%d=%7.5f ,i,j,uij); /* result: input val

25、ues */printf(n);printf(n);printf(times=%dn,n); /* result: times */for(x=1;x8;x+) /* display the v matrix */ /* in float number */for(y=1;y8;y+)printf(%7.4f ,vxy);printf(n);for(x=1;x8;x+) /* dispaly the v matrix */ /* in integer number */for(y=1;y8;y+)vxy=floor(vxy+0.38);printf(%.0f ,vxy);printf(n);getch();main() seven();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1