📄 synnpath061028.asv
字号:
function main()
%算法来源于A neural-network approach to Real-time trajectory generation
N=50; %栅格数
E=50;
A=10;
B=1;
D=1;
axis([0,1,0,1])
axis on
XX=[1/N:1/N:1];
YY=[1/N:1/N:1];
HandleStart=line([0.2 0.2],[0.2 0.2]); %设置开始点
HandleTarget=line([0.8 0.8],[0.8 0.8]); %设置目标点
set(HandleStart,'marker','pentagram','color',[0 0 0])
set(HandleTarget,'marker','*','color','r')
%Set the position of the Obstacle
line([0.4 0.5],[0.4 0.4])
line([0.4 0.4],[0.4 0.6])
line([0.4 0.5],[0.6 0.6])
line([0.5 0.5],[0.4 0.6])
line([0.6 0.7],[0.4 0.4])
line([0.6 0.6],[0.4 0.6])
line([0.6 0.7],[0.6 0.6])
line([0.7 0.7],[0.4 0.6])
WS=zeros(N,N); %初始化工作空间
II=zeros(N,N); %初始化外部输入空间
for i=1:100 %使从目标点出发向周围扩散的神经元势值到达出发点
II=CacuII(WS,N,E); %计算外部输入空间
WS=CacuWS(WS,N,II,A,B,D); %计算工作空间
if(WS(10,10)>0) break
end
end
i=10; %从目标点开始规划
j=10;
for t=1:100
%II=CacuII(WS,N,V);
% WS=CacuWS(WS,N,II
%爬山法搜索周围势值最大的神经元作为下一个神经元);
MaxMin=[WS(i-1,j) WS(i-1,j+1) WS(i,j+1) WS(i+1,j+1) WS(i+1,j) WS(i+1,j-1) WS(i,j-1) WS(i-1,j-1)];
Max=WS(i-1,j);
m=1;
for n=2:8
if(Max<MaxMin(n)) Max=MaxMin(n); m=n
end
end
if(m==1) i=i-1;
elseif(m==2) i=i-1;j=j+1;
elseif(m==3) j=j+1;
elseif(m==4) i=i+1;j=j+1;
elseif(m==5) i=i+1;
elseif(m==6) i=i+1;j=j-1;
elseif(m==7) j=j-1;
else i=i-1;j=j-1;
end
pause(0.1)
HandleRobot=line([i/N,i/N],[j/N j/N]); %绘制下一个神经元
set(HandleRobot,'marker','o','color','g')
if(WS(i,j)==1) break
end
end
function II=CacuII(WS,N,E)
for i=1:N
for j=1:N
if ((i>20)&(i<25)&(j>20)&(j<30)) II(i,j)=-E;
elseif((i>30)&(i<35)&(j>20)&(j<30)) II(i,j)=-E;
elseif ((i==1)|(i==N)|(j==1)|(j==N)) II(i,j)=-E;
elseif ((i==40)&(j==40)) II(i,j)=E;
end
end
end
function WS=CacuWS(WS,N,II,A,B,D,e)
Tij=1;%神经网络权重
%a=0.55; g函数斜率
for i=2:N-1
for j=2:N-1
if(II(i,j)==E) I1=E;
else I1=0;
end
if(II(i,j)==-E) I2=E;
else I2=0;
end
du=-A*WS(i,j)+(B-WS(i,j))*(Tij*(WS(i-1,j)+WS(i,j+1)+WS(i+1,j)+WS(i,j-1))+I1)-(D+WS(i,j))*I2;
WS(i,j)=WS(i,j)+du;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -