文档视界 最新最全的文档下载
当前位置:文档视界 › PDA算法Matlab程序

PDA算法Matlab程序

PDA算法Matlab程序
PDA算法Matlab程序

一、测试程序

%PDA-FA算法实现

%何友《雷达数据处理及应用》P116

%二维空间匀速直线运动,状态向量为X=[x,vx,y,vy]

%x1=x0+vxT

%y1=y0+vyT

%仿真:

%1、改变虚假量测数量nc:公式求取、手动设置

%2、改变量测噪声R=[r0;0r],即r

%3、改变虚假量测位置q,偏离真实位置的程度

%4、关联概率计算

clc;

clear;

close all;

%************************************************

%参数设置

%************************************************

I=eye(4);

T=1;%采样间隔

simTime=100;%仿真步数

A=[1T00;0100;001T;0001];%实际模型:CV

H=[1000;0010];%测量模型

Q=0;%实际过程噪声

G=[T^2/20;T0;0T^2/2;0T];%噪声加权矩阵

r=200;

R=[r0;0r];%量测噪声

X0=[200;0;10000;-15];%初始状态

X(:,1)=X0;

Vk=[sqrt(r)*randn;sqrt(r)*randn];

Zk(:,1)=H*X(:,1)+Vk;

gama=16;

lamda=0.0004;

%************************************************

%量测生成

%************************************************

for i=2:1:simTime

X(:,i)=A*X(:,i-1);%真实状态

Vk=[sqrt(r)*randn;sqrt(r)*randn];

Zk(:,i)=H*X(:,i)+Vk;%生成量测值

end

%************************************************

%PDA初始化

%************************************************

Xk_PDA=[200;0;10100;-16];%初始状态、与实际值略有差别R11=r;R22=r;R12=0;R21=0;

Pkk_PDA=[R11R11/T R12R12/T;

R11/T2*R11/T^2R12/T2*R12/T^2;

R21R21/T R22R22/T;

R21/T2*R21/T^2R22/T2*R22/T^2];%初始协方差

Xkk=Xk_PDA;

Pkk=Pkk_PDA;

X_Pre=A*Xkk;

P_Pre=A*Pkk*A'+G*Q*G';

P=R;

for i=1:1:simTime

%************************************************

%产生杂波

%************************************************

%量测确认区域面积

Sk=H*P_Pre*H'+P;

Av=pi*gama*sqrt(det(Sk));

%准备生成杂波数目

nc=floor(10*Av*lamda+1);%设置杂波数量

q=sqrt(Av)/2;%q=sqrt(10*Av)/2;

a=X(1,i)-q;

b=X(1,i)+q;

c=X(3,i)-q;

d=X(3,i)+q;

%生成代表杂波的nc个虚假量测

xi=a+(b-a)*rand(1,nc);

yi=c+(d-c)*rand(1,nc);

clear Z_Matrix;

clear PZ_Matrix;

for j=1:nc

Z_Matrix(:,j)=[xi(j);yi(j)];

end

Z_Matrix(:,nc+1)=Zk(:,i);

PZ_Matrix=cat(3);

for j=1:1:nc

PZ_Matrix=cat(3,PZ_Matrix,[q,0;0,q]);

end

PZ_Matrix=cat(3,PZ_Matrix,R);

%************************************************

%PDA关联

%************************************************

Z_Predict=H*X_Pre;

PZ_Predict=H*P_Pre*H';

[Combine_Z,Combine_R]=PDA(Z_Matrix,PZ_Matrix,Z_Predict,PZ_Predict);%PDA Z_PDA(:,i)=Combine_Z;

%************************************************

%卡尔曼滤波

%************************************************

P=Combine_R;

[Xk_PDA,Pk_PDA,Kk_PDA]=Kalman(Xkk,Pkk,Combine_Z,A,G,Q,H,P);

Xkk=Xk_PDA;

Pkk=Pk_PDA;

%预测

X_Pre=A*Xkk;

P_Pre=A*Pkk*A'+G*Q*G';

%出各个状态值

Ex_PDA(i)=Xkk(1);

Evx_PDA(i)=Xkk(2);

Ey_PDA(i)=Xkk(3);

Evy_PDA(i)=Xkk(4);

error1_PDA(i)=Ex_PDA(i)-X(1,i);%Pkk(1,1);

error2_PDA(i)=Ey_PDA(i)-X(3,i);%Pkk(2,2);

error3_PDA(i)=Evx_PDA(i)-X(2,i);%Pkk(3,3);

error4_PDA(i)=Evy_PDA(i)-X(4,i);%Pkk(4,4);

end

%************************************************

%绘图

%************************************************

i=1:simTime;

figure

plot(X(1,i),X(3,i),'-','LineWidth',2);%真实值

grid on;hold on

plot(Ex_PDA(1,i),Ey_PDA(1,i),'r-','LineWidth',2);%滤波值plot(Zk(1,i),Zk(2,i),'*');%实际测量值plot(Z_PDA(1,i),Z_PDA(2,i),'o');%组合测量值

legend('真实值','滤波值','实际量测','组合量测');

title('目标运动轨迹');xlabel('x/m');ylabel('y/m');

text(X(1,1)+1,X(3,1)+5,'t=1');

%位置误差

figure

subplot(211)

plot(abs(error1_PDA(i)),'LineWidth',2);grid on

title('位置误差');xlabel('t/s');ylabel('error-x/m'); subplot(212)

plot(abs(error3_PDA(i)),'LineWidth',2);grid on

xlabel('t/s');ylabel('error-y/m');

%速度误差

figure

subplot(211)

plot(abs(error2_PDA(i)),'LineWidth',2);grid on

title('速度误差');xlabel('t/s');ylabel('error-vx/m/s'); subplot(212)

plot(abs(error4_PDA(i)),'LineWidth',2);grid on

xlabel('t/s');ylabel('error-vy/m/s');

二、PDA函数

function[Combine_Z,Combine_R]=PDA(Z_Matrix,PZ_Matrix,Z_Predict,PZ_Predict) %概率数据关联,杂波空间密度为泊松分布随机变量

%输入:

%Z_Matrix:波门内的所有有效量测值

%PZ_Matrix:有效量测值的误差方差阵

%Z_Predict:预测量测值

%PZ_Predict:预测量测值的误差方差阵

%输出:

%Combine_R为组合量测

%Combine_R:组合量测对应的协方差

%中间变量:

%beta为正确关联概率

lamda=0.0004;

Pd=1;%检测概率,当不取1时,后面的a计算出来都是0

Pg=0.9997;%门限概率

nm=size(Z_Matrix);

n=nm(2);%量测数量

m=nm(1);%测量维数

for i=1:1:n

e(:,i)=Z_Matrix(:,i)-Z_Predict;

S(:,:,i)=PZ_Predict+PZ_Matrix(:,:,i);%新息协方差X、R、Q互不相关条件下

%何友计算方法P115式(7.36)

%a(i)=exp((-1/2)*e(i)'*inv(S(i))*e(i));

%bk(i)=lamda*sqrt((2*pi)*det(S(i)))*(1-Pd*Pg)/Pd;

%杨万海P86式(3-5-7)

a(i)=Pd*exp((-1/2)*(e(:,i)'*inv(S(:,:,i))*e(:,i)));

bk(i)=lamda*(sqrt(2*pi))^m*sqrt(det(S(:,:,i)))*(1-Pd);

end

for i=1:1:n

beta_i(i)=a(i)/(bk(i)+sum(a));

end

%扩充正确关联概率,使得每一维量测都有对应的关联概率

beta=beta_i;

for i=1:m-1

beta=[beta;beta_i];

end

M=beta.*Z_Matrix;

Combine_Z=sum(M',1);

Combine_Z=Combine_Z';

Combine_R=0;

for i=1:n

Combine_R=Combine_R+(beta(:,i)*beta(:,i)').*PZ_Matrix(:,:,i);

end

beta_i(n);

end

三、Kalman滤波函数

function[X,P,K]=Kalman(X_Forward,P_Forward,Z,A,G,Q,H,R)

%卡尔曼滤波

%2012.2.27

%参数说明

%Z--观测数据矢量

%A--系统模型状态矩阵

%G--系统模型噪声系数矩阵

%Q--系统模型噪声方差

%H--量测系数矩阵

%R--量测模型噪声协方差

%X_Forward--前次估计状态矢量

%P_Forward--前次估计状态协方差矩阵

%X--输出估计状态矢量

%P--输出估计状态协方差矩阵

%预测

X_Pre=A*X_Forward;

P_Pre=A*P_Forward*A'+G*Q*G';

%增益矩阵

K=P_Pre*H'*inv(H*P_Pre*H'+R)';

%Pzz=H*P_Forward*H'+R;%S(k+1/k+1)新息协方差%Pxz=P_Forward*H';%状态与量测之间的协方差%K=P_Forward*H'*(inv(Pzz));%K(k+1)增益

%修正滤波值和误差协方差阵

X=A*X_Forward+K*(Z-H*(A*X_Forward));

M=K*H;

n=size(M);

I=eye(n);

P=(I-K*H)*P_Pre*(I-K*H)'+K*R*K';

PID算法Matlab仿真程序和C程序

增量式PID控制算法Matlab仿真程序设一被控对象G(s)=50/(0.125s^2+7s),用增量式PID控制算法编写仿真程序(输入分别为单位阶跃、正弦信号,采样时间为1ms,控制器输出限幅:[-5,5],仿真曲线包括系统输出及误差曲线,并加上注释、图例)。程序如下clear all; close all; ts=0.001; sys=tf(50,[0.125,7, 0]); dsys=c2d(sys,ts,'z'); [num,den]=tfdata(dsys,'v'); u_1=0.0;u_2=0.0; y_1=0.0;y_2=0.0; x=[0,0,0]'; error_1=0; error_2=0; for k=1:1:1000 time(k)=k*ts; S=2; if S==1 kp=10;ki=0.1;kd=15; rin(k)=1; % Step Signal elseif S==2 kp=10;ki=0.1;kd=15; %Sin e Signal rin(k)=0.5*sin(2*pi*k*ts); end du(k)=kp*x(1)+kd*x(2)+ki*x(3); % PID Controller u(k)=u_1+du(k); %Restricting the output of controller if u(k)>=5 u(k)=5; end if u(k)<=-5 u(k)=-5; end %Linear model yout(k)=-den(2)*y_1-den(3)*y_2+nu m(2)*u_1+num(3)*u_2; error(k)=rin(k)-yout(k); %Return of parameters u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k); x(1)=error(k)-error_1; %C alculating P x(2)=error(k)-2*error_1+error_2; %Calculating D x(3)=error(k); %Calculating I error_2=error_1; error_1=error(k); end figure(1); plot(time,rin,'b',time,yout,'r'); xlabel('time(s)'),ylabel('rin,yout'); figure(2); plot(time,error,'r') xlabel('time(s)');ylabel('error'); 微分先行PID算法Matlab仿真程序%PID Controler with differential in advance clear all; close all; ts=20; sys=tf([1],[60,1],'inputdelay',80); dsys=c2d(sys,ts,'zoh'); [num,den]=tfdata(dsys,'v'); u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;

最短路径算法_matlab程序[1]

算法描述: 输入图G,源点v0,输出源点到各点的最短距离D 中间变量v0保存当前已经处理到的顶点集合,v1保存剩余的集合 1.初始化v1,D 2.计算v0到v1各点的最短距离,保存到D for each i in v0;D(j)=min[D(j),G(v0(1),i)+G(i,j)] ,where j in v1 3.将D中最小的那一项加入到v0,并且从v1删除这一项。 4.转到2,直到v0包含所有顶点。 %dijsk最短路径算法 clear,clc G=[ inf inf 10 inf 30 100; inf inf 5 inf inf inf; inf 5 inf 50 inf inf; inf inf inf inf inf 10; inf inf inf 20 inf 60; inf inf inf inf inf inf; ]; %邻接矩阵 N=size(G,1); %顶点数 v0=1; %源点 v1=ones(1,N); %除去原点后的集合 v1(v0)=0; %计算和源点最近的点 D=G(v0,:); while 1 D2=D; for i=1:N if v1(i)==0 D2(i)=inf; end end D2 [Dmin id]=min(D2); if isinf(Dmin),error,end v0=[v0 id] %将最近的点加入v0集合,并从v1集合中删除 v1(id)=0; if size(v0,2)==N,break;end %计算v0(1)到v1各点的最近距离 fprintf('计算v0(1)到v1各点的最近距离\n');v0,v1 id=0; for j=1:N %计算到j的最近距离 if v1(j)

蚁群算法TSP问题matlab源代码

function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta ,Rho,Q) %%===================================================== ==================== %% ACATSP.m %% Ant Colony Algorithm for Traveling Salesman Problem %% ChengAihua,PLA Information Engineering University,ZhengZhou,China %% Email:aihuacheng@https://www.docsj.com/doc/c518628675.html, %% All rights reserved %%------------------------------------------------------------------------- %% 主要符号说明 %% C n个城市的坐标,n×4的矩阵 %% NC_max 最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%===================================================== ==================== %%第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=max( ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5,min(abs(C(i,3)-C(j,3)),144- abs(C(i,3)-C(j,3))) );%计算城市间距离 else D(i,j)=eps; end D(j,i)=D(i,j); end end Eta=1./D;%Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n);%Tau为信息素矩阵 Tabu=zeros(m,n);%存储并记录路径的生成 NC=1;%迭代计数器 R_best=zeros(NC_max,n);%各代最佳路线

蚁群算法matlab程序代码

先新建一个主程序M文件ACATSP.m 代码如下: function [R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alpha,Beta,Rho,Q) %%================================================== ======================= %% 主要符号说明 %% C n个城市的坐标,n×2的矩阵 %% NC_max 蚁群算法MATLAB程序最大迭代次数 %% m 蚂蚁个数 %% Alpha 表征信息素重要程度的参数 %% Beta 表征启发式因子重要程度的参数 %% Rho 信息素蒸发系数 %% Q 表示蚁群算法MATLAB程序信息素增加强度系数 %% R_best 各代最佳路线 %% L_best 各代最佳路线的长度 %%================================================== =======================

%% 蚁群算法MATLAB程序第一步:变量初始化 n=size(C,1);%n表示问题的规模(城市个数) D=zeros(n,n);%D表示完全图的赋权邻接矩阵 for i=1:n for j=1:n if i~=j D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5; else D(i,j)=eps; % i = j 时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示 end D(j,i)=D(i,j); %对称矩阵 end end Eta=1./D; %Eta为启发因子,这里设为距离的倒数 Tau=ones(n,n); %Tau为信息素矩阵 Tabu=zeros(m,n); %存储并记录路径的生成

最优化算法-Matlab程序

CG程序代码 function [x,y] = cg(A,b,x0) %%%%%%%%%%%%%%%%%CG算法%%%%%%%%%%%% r0 = A*x0-b; p0 = -r0; k = 0; r = r0; p = p0; x = x0; while r~=0 alpha = -r'*p/(p'*A*p); x = x+alpha*p; rold = r; r = rold+alpha*A*p; beta = r'*r/(rold'*rold); p = -r+beta*p; plot(k,norm(p),'.--'); hold on k = k+1; end y.funcount = k; y.fval = x'*A*x/2-b'*x;

function [x,y] = cg_FR(fun,dfun,x0) %%%%%%%%%%%%%%%CG_FR算法%%%%%%%%%%%%%%% error = 10^-5; f0 = feval(fun,x0); df0 = feval(dfun,x0); p0 = -df0; f = f0; df = df0; p = p0; x = x0; k = 0; while ((norm(df)>error)&&(k<1000)) f = feval(fun,x); [alpha,funcNk,exitflag] = lines(fun,0.01,0.15,0.85,6,f,df'*p,x,p);%%用线搜索找下降距离%% if exitflag == -1 disp('Break!!!'); break; end x = x+alpha*p; dfold = df; df = feval(dfun,x); beta = df'*df/(dfold'*dfold); p = -df+beta*p; plot(k,norm(df),'.--'); hold on k = k+1; end y.funcount = k; y.fval = feval(fun,x); y.error = norm(df);

蚁群算法matlab

蚁群算法的matlab源码,同时请指出为何不能优化到已知的最好解 % % % the procedure of ant colony algorithm for VRP % % % % % % % % % % % % %initialize the parameters of ant colony algorithms load data.txt; d=data(:,2:3); g=data(:,4); m=31; % 蚂蚁数 alpha=1; belta=4;% 决定tao和miu重要性的参数 lmda=0; rou=0.9; %衰减系数 q0=0.95; % 概率 tao0=1/(31*841.04);%初始信息素 Q=1;% 蚂蚁循环一周所释放的信息素 defined_phrm=15.0; % initial pheromone level value QV=100; % 车辆容量 vehicle_best=round(sum(g)/QV)+1; %所完成任务所需的最少车数V=40; % 计算两点的距离 for i=1:32; for j=1:32;

dist(i,j)=sqrt((d(i,1)-d(j,1))^2+(d(i,2)-d(j,2))^2); end; end; %给tao miu赋初值 for i=1:32; for j=1:32; if i~=j; %s(i,j)=dist(i,1)+dist(1,j)-dist(i,j); tao(i,j)=defined_phrm; miu(i,j)=1/dist(i,j); end; end; end; for k=1:32; for k=1:32; deltao(i,j)=0; end; end; best_cost=10000; for n_gen=1:50; print_head(n_gen); for i=1:m; %best_solution=[]; print_head2(i);

MVDR算法matlab程序

clc clear all close all %% 常量定义 Freqs=1.6e9; %工作频率 c=3e8; %光速 lamda=c/Freqs; %波长 d=0.5*lamda; %单元间距 M=16; %天线阵元数 fs=2e6; %采样频率 pd=10; %快拍数 %% 模型建立 %--------------第一个干扰模型-------------------- thetaJ1=20*pi/180; %干扰方向 FreqJ1=5e5; %第一个干扰的频率 J1NR=sqrt(10^(60/10)); J1one=J1NR*exp(j*(2*pi*FreqJ1*(1:1:pd)/fs)); %1*pd %--------------第二个干扰模型-------------------- ThetaJ2=60*pi/180; %干扰方向 FreqJ2=6e5; %第二个干扰的频率 J2NR=sqrt(10^(60/10)); J2one=J2NR*exp(j*(2*pi*FreqJ2*(1:1:pd)/fs)); %1*pd %--------------信号模型-------------------- ThetaS=30*pi/180; FreqS=7e5; SNR=sqrt(10^(40/10)); Sone=SNR*exp(j*(2*pi*FreqS*(1:1:pd)/fs)); %1*pd %--------------空域处理------------------------- I1=zeros(M,1); I2=zeros(M,1); IS=zeros(M,1); for n=1:M I1(n)=exp(j*2*pi*(n-1)*d*sin(thetaJ1)/lamda); I2(n)=exp(j*2*pi*(n-1)*d*sin(ThetaJ2)/lamda); IS(n)=exp(j*2*pi*(n-1)*d*sin(ThetaS)/lamda); end J1=I1*J1one; J1=J1.'; J2=I2*J2one; J2=J2.'; %------------产生噪声------------------------- noise=sqrt(1/2)*randn(pd,M)+j*sqrt(1/2)*randn(pd,M);

图论算法及matlab程序的三个案例

图论实验三个案例 单源最短路径问题 Dijkstra 算法 Dijkstra 算法是解单源最短路径问题的一个贪心算法。其基本思想是,设置一个顶点集合S 并不断地作贪心选择来扩充这个集合。一个顶点属于集合S 当且仅当从源到该顶点的最短路径长度已知。设v 是图中的一个顶点,记()l v 为顶点 v 到源点v 1的最短距离, ,i j v v V ?∈,若 (,)i j v v E ?,记i v 到j v 的权ij w =∞。 Dijkstra 算法: ① 1{}S v =,1()0l v =;1{}v V v ??-,()l v =∞,1i =,1{}S V v =-; ② S φ=,停止,否则转③; ③ ()min{(),(,)} j l v l v d v v =, j v S ∈,v S ?∈; ④ 存在 1 i v +,使 1()min{()} i l v l v +=,v S ∈; ⑤ 1{} i S S v +=, 1{} i S S v +=-,1i i =+,转②; 实际上,Dijkstra 算法也是最优化原理的应用:如果12 1n n v v v v -是从1v 到 n v 的最短路径,则 12 1 n v v v -也必然是从1v 到 1 n v -的最优路径。 在下面的MATLAB 实现代码中,我们用到了距离矩阵,矩阵第i 行第j 行元 素表示顶点i v 到j v 的权ij w ,若i v 到j v 无边,则realmax ij w =,其中realmax 是 MATLAB 常量,表示最大的实数+308)。 function re=Dijkstra(ma)

蚁群算法MATLAB代码

function [y,val]=QACStic load att48 att48; MAXIT=300; % 最大循环次数 NC=48; % 城市个数 tao=ones(48,48);% 初始时刻各边上的信息最为1 rho=0.2; % 挥发系数 alpha=1; beta=2; Q=100; mant=20; % 蚂蚁数量 iter=0; % 记录迭代次数 for i=1:NC % 计算各城市间的距离 for j=1:NC distance(i,j)=sqrt((att48(i,2)-att48(j,2))^2+(att48(i,3)-att48(j,3))^2); end end bestroute=zeros(1,48); % 用来记录最优路径 routelength=inf; % 用来记录当前找到的最优路径长度 % for i=1:mant % 确定各蚂蚁初始的位置 % end for ite=1:MAXIT for ka=1:mant %考查第K只蚂蚁 deltatao=zeros(48,48); % 第K只蚂蚁移动前各边上的信息增量为零 [routek,lengthk]=travel(distance,tao,alpha,beta); if lengthk

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

matlab蚁群算法精讲及仿真图

蚁群算法matlab精讲及仿真 4.1基本蚁群算法 4.1.1基本蚁群算法的原理 蚁群算法是上世纪90年代意大利学者M.Dorigo,v.Maneizz。等人提出来的,在越来越多的领域里得到广泛应用。蚁群算法,是一种模拟生物活动的智能算法,蚁群算法的运作机理来源于现实世界中蚂蚁的真实行为,该算法是由Marco Dorigo 首先提出并进行相关研究的,蚂蚁这种小生物,个体能力非常有限,但实际的活动中却可以搬动自己大几十倍的物体,其有序的合作能力可以与人类的集体完成浩大的工程非常相似,它们之前可以进行信息的交流,各自负责自己的任务,整个运作过程统一有序,在一只蚂蚁找食物的过程中,在自己走过的足迹上洒下某种物质,以传达信息给伙伴,吸引同伴向自己走过的路径上靠拢,当有一只蚂蚁找到食物后,它还可以沿着自己走过的路径返回,这样一来找到食物的蚂蚁走过的路径上信息传递物质的量就比较大,更多的蚂蚁就可能以更大的机率来选择这条路径,越来越多的蚂蚁都集中在这条路径上,蚂蚁就会成群结队在蚁窝与食物间的路径上工作。当然,信息传递物质会随着时间的推移而消失掉一部分,留下一部分,其含量是处于动态变化之中,起初,在没有蚂蚁找到食物的时候,其实所有从蚁窝出发的蚂蚁是保持一种随机的运动状态而进行食物搜索的,因此,这时,各蚂蚁间信息传递物质的参考其实是没有价值的,当有一只蚂蚁找到食物后,该蚂蚁一般就会向着出发地返回,这样,该蚂蚁来回一趟在自己的路径上留下的信息传递物质就相对较多,蚂蚁向着信息传递物质比较高的路径上运动,更多的蚂蚁就会选择找到食物的路径,而蚂蚁有时不一定向着信

息传递物质量高的路径走,可能搜索其它的路径。这样如果搜索到更短的路径后,蚂蚁又会往更短的路径上靠拢,最终多数蚂蚁在最短路径上工作。【基于蚁群算法和遗传算法的机器人路径规划研究】 该算法的特点: (1)自我组织能力,蚂蚁不需要知道整体环境信息,只需要得到自己周围的信息,并且通过信息传递物质来作用于周围的环境,根据其他蚂蚁的信息素来判断自己的路径。 (2)正反馈机制,蚂蚁在运动的过程中,收到其他蚂蚁的信息素影响,对于某路径上信息素越强的路径,其转向该路径的概率就越大,从而更容易使得蚁群寻找到最短的避障路径。 (3)易于与其他算法结合,现实中蚂蚁的工作过程简单,单位蚂蚁的任务也比较单一,因而蚁群算法的规则也比较简单,稳定性好,易于和其他算法结合使得避障路径规划效果更好。 (4)具有并行搜索能力探索过程彼此独立又相互影响,具备并行搜索能力,这样既可以保持解的多样性,又能够加速最优解的发现。 4.1.2 基本蚁群算法的生物仿真模型 a为蚂蚁所在洞穴,food为食物所在区,假设abde为一条路径,eadf为另外一条路径,蚂蚁走过后会留下信息素,5分钟后蚂蚁在两条路径上留下的信息素的量都为3,概率可以认为相同,而30分钟后baed路径上的信息素的量为60,明显大于eadf路径上的信息素的量。最终蚂蚁会完全选择abed这条最短路径,由此可见,

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

(完整版)蚁群算法matlab程序实例整理

function [y,val]=QACS tic load att48 att48; MAXIT=300; % 最大循环次数 NC=48; % 城市个数 tao=ones(48,48);% 初始时刻各边上的信息最为1 rho=0.2; % 挥发系数 alpha=1; beta=2; Q=100; mant=20; % 蚂蚁数量 iter=0; % 记录迭代次数 for i=1:NC % 计算各城市间的距离 for j=1:NC distance(i,j)=sqrt((att48(i,2)-att48(j,2))^2+(att48(i,3)-att48(j,3))^2); end end bestroute=zeros(1,48); % 用来记录最优路径 routelength=inf; % 用来记录当前找到的最优路径长度 % for i=1:mant % 确定各蚂蚁初始的位置 % end for ite=1:MAXIT for ka=1:mant %考查第K只蚂蚁 deltatao=zeros(48,48); % 第K只蚂蚁移动前各边上的信息增量为零 [routek,lengthk]=travel(distance,tao,alpha,beta); if lengthk

SSDA 算法的matlab程序

%SSDAò?×?′óμ???êy?a×??ò,?ù?è±èò?×?D?e?a×??ò?y£?μ?μ±?£°?óD??éùê±£?è??üμ?μ??yè·?¥??μ? %[FileName2,PathName2] = uigetfile('*.jpg'); %pic= imread(FileName2); %[FileName,PathName] = uigetfile('*.jpg'); %moban=imread(FileName); %pic = imread('D:\matching algorithm\matching\2.jpg');%%%%%%%%%%o?ê±12??pic =imread('D:\matching algorithm\matching\lena.jpg') %%%%%%%%%%o?ê±15?? pic=pic(:,:,1); rect_pic = [256 178 145 167] moban = imcrop(pic,rect_pic); moban=imnoise(moban,'gaussian',0.005); pic=im2double(pic); moban=im2double(moban); subplot(2,2,1); imshow(pic);%2 subplot(2,2,2); imshow(moban);%3 pic1=pic; [M,N]=size(pic); [m,n]=size(moban); d=zeros(M-m,N-n); times=zeros(M-m,N-n); Tnum=0; tic; for x=1:M-m for y=1:N-n Temp=0; num=0; for i=0:m-1 for j=0:n-1 Temp = Temp+abs(pic(i+x,j+y)-moban(i+1,j+1)); num=num+1; end if Temp>m Tnum=num; break end end d(x,y)=Temp/(m*n); times(x,y)=Tnum; end end %[min_d, icmin] = min(d(:)); [max_t, itmax] = max(times(:)); %[p,q] = ind2sub(size(d),icmin(1)); [p,q] = ind2sub(size(times),itmax(1)); toc; pic1(:,:)=255; %pic1(p:p+m,q:q+n)=pic(p:p+m,q:q+n); pic1(p:p+m-1,q:q+n-1)=moban(1:m,1:n); msgbox(num2str([p,q]), 'location'); subplot(2,2,3); imshow(pic1);%4

蚁群算法最短路径通用Matlab程序(附图)

蚁群算法最短路径通用Matlab程序(附图) function [ROUTES,PL,Tau]=ACASP(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q) %% --------------------------------------------------------------- % ACASP.m % 蚁群算法动态寻路算法 % ChengAihua,PLA Information Engineering University,ZhengZhou,China % Email:aihuacheng@https://www.docsj.com/doc/c518628675.html, % All rights reserved %% --------------------------------------------------------------- % 输入参数列表 % G 地形图为01矩阵,如果为1表示障碍物 % Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素) % K 迭代次数(指蚂蚁出动多少波) % M 蚂蚁个数(每一波蚂蚁有多少个) % S 起始点(最短路径的起始点) % E 终止点(最短路径的目的点) % Alpha 表征信息素重要程度的参数 % Beta 表征启发式因子重要程度的参数 % Rho 信息素蒸发系数 % Q 信息素增加强度系数 % % 输出参数列表 % ROUTES 每一代的每一只蚂蚁的爬行路线 % PL 每一代的每一只蚂蚁的爬行路线长度 % Tau 输出动态修正过的信息素 %% --------------------变量初始化---------------------------------- %load D=G2D(G); N=size(D,1);%N表示问题的规模(象素个数) MM=size(G,1); 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(1,N);%启发式信息,取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 for i=1:N if ix==-0.5

matlab图论程序算法大全

精心整理 图论算法matlab实现 求最小费用最大流算法的 MATLAB 程序代码如下: n=5;C=[0 15 16 0 0 0 0 0 13 14 for while for for(i=1:n)for(j=1:n)if(C(i,j)>0&f(i,j)==0)a(i,j)=b(i,j); elseif(C(i,j)>0&f(i,j)==C(i,j))a(j,i)=-b(i,j); elseif(C(i,j)>0)a(i,j)=b(i,j);a(j,i)=-b(i,j);end;end;end for(i=2:n)p(i)=Inf;s(i)=i;end %用Ford 算法求最短路, 赋初值 for(k=1:n)pd=1; %求有向赋权图中vs 到vt 的最短路

for(i=2:n)for(j=1:n)if(p(i)>p(j)+a(j,i))p(i)=p(j)+a(j,i);s(i)=j;pd=0;end ;end;end if(pd)break;end;end %求最短路的Ford 算法结束 if(p(n)==Inf)break;end %不存在vs 到vt 的最短路, 算法终止. 注意在求最小费用最大流时构造有 while if elseif if if pd=0; 值 t=n; if elseif if(s(t)==1)break;end %当t 的标号为vs 时, 终止调整过程 t=s(t);end if(pd)break;end%如果最大流量达到预定的流量值 wf=0; for(j=1:n)wf=wf+f(1,j);end;end %计算最大流量 zwf=0;for(i=1:n)for(j=1:n)zwf=zwf+b(i,j)*f(i,j);end;end%计算最小费用

MUSIC算法matlab程序

clear all close all derad = pi/180; % deg -> rad radeg = 180/pi; twpi = 2*pi; kelm = 8; % 阵列数量 dd = ; % space d=0:dd:(kelm-1)*dd; % iwave = 4; % number of DOA theta = [-60 -30 30 60]; % 角度 snr = 10; % input SNR (dB) n = 500; % A=exp(-j*twpi*d.'*sin(theta*derad));%%%% direction matrix S=randn(iwave,n); X=A*S; X1=awgn(X,snr,'measured');%在信号X中加入高斯白噪声,信噪比SNR,'measured'函数在加入噪声前测定信号强度 Rxx=X1*X1'/n; InvS=inv(Rxx); %%%% [EV,D]=eig(Rxx);%%%% [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。 EVA=diag(D)';%返回矩阵D的主对角线上的元素 [EVA,I]=sort(EVA);%其中I是一个大小等于size(EVA)的数组,其每一列是EVAA中列向量的元素相对应的置换位置记号。 EVA=fliplr(EVA);%将矩阵A的列绕垂直轴进行左右翻转,如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转。如果A是一个列向量,fliplr(A)还等于A。 EV=fliplr(EV(:,I)); % MUSIC for iang = 1:361 angle(iang)=(iang-181)/2; phim=derad*angle(iang); a=exp(-j*twpi*d*sin(phim)).'; L=iwave; En=EV(:,L+1:kelm); SP(iang)=(a'*a)/(a'*En*En'*a); end %画图 SP=abs(SP); SPmax=max(SP); SP=10*log10(SP/SPmax); h=plot(angle,SP); set(h,'Linewidth',2)

蚁群算法最短路径matlab程序

蚁群算法最短路径通用Matlab程序 下面的程序是蚁群算法在最短路中的应用,稍加扩展即可应用于机器人路径规划 function [ROUTES,PL,Tau]=ACASP(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q) %% ---------------------------------------------------------------% ACASP.m % 蚁群算法动态寻路算法 % ChengAihua,PLA Information Engineering University,ZhengZhou,China % Email:aihuacheng@https://www.docsj.com/doc/c518628675.html, % All rights reserved %% ---------------------------------------------------------------% 输入参数列表 % G 地形图为01矩阵,如果为1表示障碍物 % Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素) % K 迭代次数(指蚂蚁出动多少波) % M 蚂蚁个数(每一波蚂蚁有多少个) % S 起始点(最短路径的起始点) % E 终止点(最短路径的目的点) % Alpha 表征信息素重要程度的参数 % Beta 表征启发式因子重要程度的参数 % Rho 信息素蒸发系数 % Q 信息素增加强度系数 % % 输出参数列表 % ROUTES 每一代的每一只蚂蚁的爬行路线 % PL 每一代的每一只蚂蚁的爬行路线长度 % Tau 输出动态修正过的信息素 %% --------------------变量初始化---------------------------------- %load D=G2D(G); N=size(D,1);%N表示问题的规模(象素个数) MM=size(G,1); 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(1,N);%启发式信息,取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 for i=1:N if ix==-0.5 ix=MM-0.5;

相关文档