文档库 最新最全的文档下载
当前位置:文档库 › 用恒模算法进行盲自适应均衡的MATLAB仿真

用恒模算法进行盲自适应均衡的MATLAB仿真

用恒模算法进行盲自适应均衡的MATLAB仿真
用恒模算法进行盲自适应均衡的MATLAB仿真

用恒模算法进行盲自适应均衡的MATLAB 仿真

一:仿真内容:

1:了解盲均衡算法和CMA 算法的原理;

2:用CMA 算法来仿真4QAM 信号;

二:算法原理:

1:盲均衡算法:

普通的均衡器需要训练和跟踪两个阶段,在训练阶段,需要已知信号的一些特性参数来训练均衡滤波器,或者直接周期地发送训练序列。由于训练序列并不含用户的数据,而占用了信道资源,自然会降低信道的利用率。另外,在跟踪阶段,不发送训练序列,如果信道特性是快速变化的,均衡器的性能将迅速恶化。

盲均衡能够不借助训练序列(即我们通常所说的“盲”,而仅仅利用所接收到的信号序列即可对信道进行均衡。换言之,其本身完全不用训练序列,就可以自启动收敛并防止死锁情况,且能使滤波器的输出与要恢复的输入信号相等。盲均衡从根本上避免了训练序列的使用,收敛范围大,应用范围广,克服了传统自适应均衡的缺点,从而降低了对信道和信号的要求。

盲均衡的原理框图如下:

在上图中,x(n)为系统的发送序列,h(n)为离散时间传输信道的冲激响应,其依据所用调制方式的不同,可以是实值,也可以是复值;n(n)为信道中叠加的高斯噪声;y(n)为经过信道传输后的接收序列,同时也是均衡器的输入序列;w(n)为盲均衡器的冲激响应,盲均衡器一般采用有限长横向滤波器,其长度为L; )

(~n x 为盲均衡器的输出信号,也即经过均衡后的恢复序列。

且有下式成立:

y(n)=h(n)*x(n)+n(n);

)(~n x =w(n)*y(n)=w(n)*h(n)*x(n); 2:Bussgang 算法

Bussgang类盲均衡算法作为盲均衡算法的一个分支,是在原来需要训练序列的传统自适应均衡算法基础上发展起来的。早期的盲均衡器以横向滤波器为基本结构,利用信号的物理特征选择合适的代价函数和误差控制函数来调节均衡器的权系数。这类算法是以一种迭代方式进行盲均衡,并在均衡器的输出端对数据进行非线性变换,当算法以平均值达到收敛时,被均衡的序列表现为Bussgang 统计量。因此,此类算法称为Bussgang类盲均衡算法。

Bussgang类盲均衡算法的显著特点是算法思路保持了传统自适应均衡的简单性,物理概念清楚,没有增加计算复杂度,运算量较小,便于实时实现。缺点是算法的收敛时间较长,收敛后剩余误差较大,没有解决均衡过程中局部收敛问题,对非线性信道或存在零点的信道均衡效果不佳。

Bussgang类算法的原理框图如下:

Godard是其中性能最好的算法:a.代价函数的推导只与接收信号的幅值有关,与相位无关,因此对载波相位偏移不敏感;b.在稳态条件下,此算法能获得比其它算法小的均方误差;c.它能均衡一色散信道,即使起始眼图是关闭的。Godard最早提出了恒模盲均衡算法。恒模盲均衡算法适用于所有具有恒定包络(简称恒模)的发射信号的均衡,它是Bussgang算法的一个特例。

3:CMA(恒模算法)

现代通信系统中常用的QAM调制方式具有频带利用率高的显著优势,随着电平级数的增加,传输数码率越高,但电平间的间隔减小,码间干扰增加,抗噪性能变差。近年来,研究最多的盲均衡算法是恒模算法(CMA)。CMA算法被广泛用于恒包络信号的均衡,因其计算量小及良好的收敛性能也应用于非恒包络信号的盲均衡,如QAM信号。然而,其初始化之后的收敛效果却不令人满意,存

在较大的剩余误差,对于非恒模信号来说,误符号的方差更加严重。同时,CMA 及其改进算法对于高阶的QAM 信号都存在较大的失调。这就需要我们对CMA 算法进行适当改进,以达到更好的收敛效果。

CMA 算法的诸多优点使之被广泛应用于恒包络信号的均衡、非恒包络信号(如QAM 信号)及自适应阵列处理等领域中。

恒模算法(Const Modulus Algorithm ,CMA)就是当参数p=2时的Godard 算法,是由Godard 最早提出的。它是Bussgang 类盲均衡算法中最常用的一种,具有计算复杂度低、易于实时实现、收敛性能好等优点,己成为通信系统中广泛采用的盲均衡技术。

恒模算法的代价函数为:

J(w(n))=E{(|x ~

(n)|-R 2)2} 根据传输理论和盲均衡的框图可以得到:

y(n)=h(n)*x(n)+n(n);

均衡器的输出为:

)(~n x =w(n)*y(n)=w(n )*h(n)*x(n)=w T (n)*y(n)

由上得到权系数的更新公式为:

)(])(~)[(~)()1(*22n y n x R n x n W n W -+=+μ

式中μ是自适应步长,通常取足够小的正常数。

下表给出CMA 算法的流程:

三:仿真内容:

利用CMA 算法来仿真QAM 信号:首先举4QAM 调制的例子。用复信号表示4QAM 调制相当于只传输4种取值的信号,即x=a+bj ,a=2/2±,b=2/2±,因此发送信号的星座是四个点,假设4QAM 的基带信号通过一个信道,信道用一个FIR 滤波器来表示,滤波器的传输函数为:

3211.05.02.0)(----++=z z z z H 信号经FIR 滤波器输出后加入了高斯白噪声,

信噪比为30db ,接收到的4QAM 信号经过一个均衡器,均衡器是由长度为6的FIR 滤波器构成,应用CMA 算法进行盲均衡,步长取0.02(0.001效果很差,所以将步长稍改大)。

(仿真程序见附件cma.m )

四:结果分析:

下图是仿真图形:

第一个图为经过4QAM 调制后产生的传输序列sn 所构成的星座图:可以明显的看到4QAM 基带信号的星座图。

-0.8-0.6-0.4-0.200.20.40.60.8

-0.8-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

传输序列的4QAM 星座图

第二个图为经过信道之后的输出信号,由于码间干扰, 4QAM 信号已经有点混乱。

-1.5-1-0.500.51 1.5

-1.5-1

-0.5

0.5

1

1.5

经过FIR 滤波器之后的输出4QAM 信号

第三个图为加上一个30dB 的高斯白噪声之后的星座图,可以看到由于噪声干扰,接收到的信号已经非常混乱。

-1.5-1-0.500.51 1.5

-1.5-1

-0.5

0.5

1

1.5

加过噪声之后的4QAM 信号

第四个图是收敛后的均衡器输出的分布图,由图可以看到盲均衡器将输出聚

集在4个星座的附近。由于前面一部分的序列会被当作训练序列,所以实际的发送序列是从中间序列开始的。

-1-0.8-0.6-0.4-0.200.20.40.60.81

-1-0.8

-0.6

-0.4

-0.2

0.2

0.4

0.6

0.8

1

盲均衡器输出的4QAM 信号分布图

下图为CMA 算法的收敛图,由图可以看出,作为盲均衡器的CMA 算法的收敛速度明显比LMS 算法的慢,大约要到接近1000次迭代以后才能达到收敛,而LMS 算法一般只需几十至几百次迭代,这就是缺乏期望响应的代价。由于步长和初值的不同,使得收敛的值有所不同。

0100020003000400050006000

70008000900010000-180-160

-140

-120

-100

-80

-60

-40

-20

CMA 算法的收敛图

点数/n e n .2/d B

五:结论

本报告首先介绍了盲均衡算法的数学模型,接着分析了Bussgang类盲均衡算法,重点介绍了其中的最为常用的且是本实验用到的CMA算法并对其进行了MATLAB仿真,分析了仿真结果。

但是CMA算法采用固定步长,这就使得步长对于CMA算法的收敛性能起着决定性的作用。固定步长CMA算法在收敛速度和收敛精度方面对调整步长的要求是相矛盾的,在实际应用中,要根据不同的需求决定步长值的大小。因此本实验中我采用0.02的步长才能得到此效果,如果采用0.001的步长,收敛效果和星座图的效果很差,需要提出一种更有利的算法,使得算法的收敛性有更大提高。

总之,通过查阅资料完成此次仿真,让我了解了盲自适应均衡的模型和恒模算法的原理,也让我看到在恒模算法中存在的需要改进的地方。但由于知识有限,仅做到此,希望老师能多多指教。

基于遗传算法的OFDM自适应资源分配算法MATLAB源码

基于遗传算法的OFDM自适应资源分配算法MATLAB源码 OFDM自适应资源分配问题(载波、功率等),是一个既含有离散决策变量,又含有连续决策变量的非线性优化模型,且含有较为复杂的非线性约束,因此适合采用智能优化算法进行求解。 function [BESTX1,BESTX2,BESTY,ALLX1,ALLX2,ALL Y]=GA2(K,N,Pm,H,BBB,P,N0) %% 本源码实现遗传算法,用于RA准则下的多用户OFDM自适应资源分配 %% 输入参数列表 % K 迭代次数 % N 种群规模,要求是偶数 % Pm 变异概率 % H 信道增益矩阵,K*N的矩阵,表示用户k在子信道n上的信道增益,无单位,取值范围0~1 % BBB 总带宽(Hz) % P 总功率(W) % N0 加性高斯白噪声功率谱密度(W/Hz) %% 输出参数列表 % BESTX1 K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体的第一分量 % BESTX2 K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体的第二分量 % BESTY K×1矩阵,记录每一代的最优个体的评价函数值 % ALLX1 K×1细胞结构,每一个元素是M×N矩阵,记录全部个体的第一分量 % ALLX2 K×1细胞结构,每一个元素是M×N矩阵,记录全部个体的第二分量 % ALL Y K×N矩阵,记录全部个体的评价函数值 %% 第一步 [KK,NN]=size(H); M=NN;%决策变量个数,子载波个数 farm1=zeros(M,N);%每一列是一个样本 for i=1:N farm1(:,i)=unidrnd(KK,M,1); end farm2=zeros(M,N);%每一列是一个样本 for i=1:N farm2(:,i)=RandSeq(M); end %输出变量初始化 ALLX1=cell(K,1); ALLX2=cell(K,1); ALL Y=zeros(K,N); BESTX1=cell(K,1);

时域有限差分法的Matlab仿真

时域有限差分法的Matlab仿真 关键词: Matlab 矩形波导时域有限差分法 摘要:介绍了时域有限差分法的基本原理,并利用Matlab仿真,对矩形波导谐振腔中的电磁场作了模拟和分析。 关键词:时域有限差分法;Matlab;矩形波导;谐振腔 目前,电磁场的时域计算方法越来越引人注目。时域有限差分(Finite Difference Time Domain,FDTD)法[1]作为一种主要的电磁场时域计算方法,最早是在1966年由K. S. Yee提出的。这种方法通过将Maxwell旋度方程转化为有限差分式而直接在时域求解,通过建立时间离散的递进序列,在相互交织的网格空间中交替计算电场和磁场。经过三十多年的发展,这种方法已经广泛应用到各种电磁问题的分析之中。 Matlab作为一种工程仿真工具得到了广泛应用[2]。用于时域有限差分法,可以简化编程,使研究者的研究重心放在FDTD法本身上,而不必在编程上花费过多的时间。 下面将采用FDTD法,利用Matlab仿真来分析矩形波导谐振腔的电磁场,说明了将二者结合起来的优越性。 1FDTD法基本原理 时域有限差分法的主要思想是把Maxwell方程在空间、时间上离散化,用差分方程代替一阶偏微分方程,求解差分方程组,从而得出各网格单元的场值。FDTD 空间网格单元上电场和磁场各分量的分布如图1所示。 电场和磁场被交叉放置,电场分量位于网格单元每条棱的中心,磁场分量位于网格单元每个面的中心,每个磁场(电场)分量都有4个电场(磁场)分量环绕。这样不仅保证了介质分界面上切向场分量的连续性条件得到自然满足,而且

还允许旋度方程在空间上进行中心差分运算,同时也满足了法拉第电磁感应定律和安培环路积分定律,也可以很恰当地模拟电磁波的实际传播过程。 1.1Maxwell方程的差分形式 旋度方程为: 将其标量化,并将问题空间沿3个轴向分成若干网格单元,用Δx,Δy和Δz 分别表示每个网格单元沿3个轴向的长度,用Δt表示时间步长。网格单元顶点的坐标(x,y,z)可记为: 其中:i,j,k和n为整数。 同时利用二阶精度的中心有限差分式来表示函数对空间和时间的偏导数,即可得到如下FDTD基本差分式: 由于方程式里出现了半个网格和半个时间步,为了便于编程,将上面的差分式改写成如下形式:

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

MATLAB实验遗传算法与优化设计

实验六 遗传算法与优化设计 一、实验目的 1. 了解遗传算法的基本原理和基本操作(选择、交叉、变异); 2. 学习使用Matlab 中的遗传算法工具箱(gatool)来解决优化设计问题; 二、实验原理及遗传算法工具箱介绍 1. 一个优化设计例子 图1所示是用于传输微波信号的微带线(电极)的横截面结构示意图,上下两根黑条分别代表上电极和下电极,一般下电极接地,上电极接输入信号,电极之间是介质(如空气,陶瓷等)。微带电极的结构参数如图所示,W 、t 分别是上电极的宽度和厚度,D 是上下电极间距。当微波信号在微带线中传输时,由于趋肤效应,微带线中的电流集中在电极的表面,会产生较大的欧姆损耗。根据微带传输线理论,高频工作状态下(假定信号频率1GHz ),电极的欧姆损耗可以写成(简单起见,不考虑电极厚度造成电极宽度的增加): 图1 微带线横截面结构以及场分布示意图 {} 28.6821ln 5020.942ln 20.942S W R W D D D t D W D D W W t D W W D e D D παπππ=+++-+++?????? ? ??? ??????????? ??????? (1) 其中πρμ0=S R 为金属的表面电阻率, ρ为电阻率。可见电极的结构参数影响着电极损耗,通过合理设计这些参数可以使电极的欧姆损耗做到最小,这就是所谓的最优化问题或者称为规划设计问题。此处设计变量有3个:W 、D 、t ,它们组成决策向量[W, D ,t ] T ,待优化函数(,,)W D t α称为目标函数。 上述优化设计问题可以抽象为数学描述: ()()min .. 0,1,2,...,j f X s t g X j p ????≤=? (2)

蚁群算法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.wendangku.net/doc/195177817.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);%各代最佳路线

各种BP学习算法MATLAB仿真

3.3.2 各种BP学习算法MATLAB仿真 根据上面一节对BP神经网络的MATLAB设计,可以得出下面的通用的MATLAB程序段,由于各种BP学习算法采用了不同的学习函数,所以只需要更改学习函数即可。 MATLAB程序段如下: x=-4:0.01:4; y1=sin((1/2)*pi*x)+sin(pi*x); %trainlm函数可以选择替换 net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm'); net.trainparam.epochs=2000; net.trainparam.goal=0.00001; net=train(net,x,y1); y2=sim(net,x); err=y2-y1; res=norm(err); %暂停,按任意键继续 Pause %绘图,原图(蓝色光滑线)和仿真效果图(红色+号点线) plot(x,y1); hold on plot(x,y2,'r+'); 注意:由于各种不确定因素,可能对网络训练有不同程度的影响,产生不同的效果。如图3-8。 标准BP算法(traingd)

图3-8 标准BP算法的训练过程以及结果(原图蓝色线,仿真图+号线)增加动量法(traingdm) 如图3-9。 图3-9 增加动量法的训练过程以及结果(原图蓝色线,仿真图+号线)弹性BP算法(trainrp)如图3-10 图3-10 弹性BP算法的训练过程以及结果(原图蓝色线,仿真图+号线)

动量及自适应学习速率法(traingdx)如图3-11。 图3-11 动量及自适应学习速率法的训练过程以及结果(原图蓝色线,仿真图+号线)共轭梯度法(traincgf)如图3-12。

基于遗传算法的matlab源代码

function youhuafun D=code; N=50;%Tunable maxgen=50;%Tunable crossrate=0.5;%Tunable muterate=0.08;%Tunable generation=1; num=length(D); fatherrand=randint(num,N,3); score=zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); %多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; %%两点交叉 %for kk=1:(N-2)/2 %rndtmp=randint(1,1,num)+1; %tmp=A(1:rndtmp,kk); %A(1:rndtmp,kk)=B(1:rndtmp,kk); %B(1:rndtmp,kk)=tmp; %end fatherrand=[fatherrand(:,1:2),A,B]; %变异 rnd=rand(num,N); ind=rnd[m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); %fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(t mpind)]; if~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end %score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; save DData D function D=code load youhua.mat %properties F2and F3 F1=A(:,1); F2=A(:,2); F3=A(:,3); if(max(F2)>1450)||(min(F2)<=900) error('DATA property F2exceed it''s range (900,1450]') end %get group property F1of data,according to F2value F4=zeros(size(F1)); for ite=11:-1:1 index=find(F2<=900+ite*50); F4(index)=ite; end D=[F1,F2,F3,F4]; function ScoreN=scorefun(fatherrand,D) F3=D(:,3); F4=D(:,4); N=size(fatherrand,2); FF4=F4*ones(1,N); FF4rnd=FF4-fatherrand; FF4rnd=max(FF4rnd,1); ScoreN=ones(1,N)*300*11; %这里有待优化

Matlab遗传算法工具箱的应用

文章编号:1006-1576(2005)06-0115-02 Matlab遗传算法工具箱的应用 曾日波 (江西财经大学电子学院,江西南昌 330013) 摘要:Matlab遗传算法(GA)优化工具箱是基于基本操作及终止条件、二进制和十进制相互转换等操作的综合函数库。其实现步骤包括:通过输入及输出函数求出遗传算法主函数、初始种群的生成函数,采用选择、交叉、变异操作求得基本遗传操作函数。以函数仿真为例,对该函数优化和GA改进,只需改写函数m文件形式即可。 关键词:遗传算法;Matlab;遗传算法工具箱;仿真 中图分类号:TP391.9 文献标识码:A Application of Genetic Algorithm Toolbox Based on Matlab ZENG Ri-bo (College of Finance and Economics Electronics, Jiangxi University, Nanchang 330013, China) Abstract: The optimization toolbox of Matlab genetic algorithm (GA) is a excellent generalized function library is to bases on basic operation and terminate term, the inter-conversion between binary system and ten system the system etc. Its step includes: the main function of GA and the creation functions of initial population was calculated through inputting and outputting functions, and the basic functions of genetic operation was computed by choosing, interlacing, and aberrance functions to realize the system. Take the function simulation as an example, the optimization of function and improvement of GA were achieved by modification the file format of m function. Keywords: Genetic algorithm; Matlab; Optimization toolbox; Simulation 1 引言 遗传算法(GA:Genetic Algorithm)是对生物进化过程进行的数学方式仿真。将Matlab引入遗传算法,在Matlab平台上开发遗传算法的优化工具箱(GAOT:Genetic Algorithm for Optimization Toolbox),可更好地认识GA,改进GA。 2 基于Matlab的优化工具箱 遗传算法的优化工具箱(GAOT)是从遗传算法的基本结构出发,考虑到基本操作及终止条件、二进制和十进制的相互转换等操作的综合函数库。 2.1遗传算法主函数 function[x,endPop,bPop,traceInfo]= ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps, selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) 输出参数:x-最优解,endPop-最终种群,bPop-最优种群的搜索轨迹。 输入参数:bounds-变量上下界的矩阵,evalFN-适应度函数,evalOps-传递给适应度函数的参数,startPop-初始种群,termFN-终止函数的名称,termOps-传递个终止函数的参数,selectFN -选择函数的名称,selectOps-传递个选择函数的参数,xOverFNs-交叉函数名称表,以空格分开,xOverOps-传递给交叉函数的参数表,mutFNs-变异函数表,mutOps-传递给交叉函数的参数表。 2.2 初始种群的生成函数 function[pop]=initializega (num,bounds,eevalFN,eevalOps,options) 输出参数:pop-生成的初始种群。 输入参数:num-种群中的个体数目,bounds -代表变量的上下界的矩阵,eevalFN-适应度函数,eevalOps-传递给适应度函数的参数,options -选择编码形式(浮点编码或是二进制编码)[precision F_or_B],precision-变量进行二进制编码时指定的精度,F_or_B-为1时选择浮点编码,否则为二进制编码,由precision指定精度)。 2.3 基本遗传操作函数 (1) 选择 function[newPop] = Select(oldPop,options) 参数说明:newPop-由父代种群选出的新的种群,oldPop-当前的种群(即父代种群),options -选择概率。 (2) 交叉 function [c1,c2]=crossover(p1,p2,bounds,ops) 参数说明:p1-第一个父代个体,p2-第二个父代个体,bounds-可行域的边界矩阵,c1、c2-产生的两个新的子代。 (3) 变异 function [child] = Mutation(par,bounds,genInfo,Ops) 变异操作是由一个父代产生单个子代。 3 仿真实例与分析 收稿日期:2005-06-15;修回日期:2005-08-07 作者简介:曾日波(1964-),男,江西人,2000年获华中科技大学工程硕士学位,从事嵌入式系统的应用研究。 ·115·

遗传算法多目标函数优化

多目标遗传算法优化 铣削正交试验结果 说明: 1.建立切削力和表面粗糙度模型 如: 3.190.08360.8250.5640.45410c e p z F v f a a -=(1) a R =此模型你们来拟合(上面有实验数据,剩下的两个方程已经是我帮你们拟合好的了)(2) R a =10?0.92146v c 0.14365f z 0.16065a e 0.047691a p 0.38457 10002/c z p e Q v f a a D π=-????(3) 变量约束范围:401000.020.080.25 1.0210c z e p v f a a ≤≤??≤≤??≤≤? ?≤≤? 公式(1)和(2)值越小越好,公式(3)值越大越好。π=3.14 D=8 2.请将多目标优化操作过程录像(同时考虑三个方程,优化出最优的自变量数值),方便我后续进行修改;将能保存的所有图片及源文件发给我;将最优解多组发给我,类似于下图(黄色部分为达到的要求)

遗传算法的结果:

程序如下: clear; clc; % 遗传算法直接求解多目标优化 D=8; % Function handle to the fitness function F=@(X)[10^(3.19)*(X(1).^(-0.0836)).*(X(2).^0.825).*(X(3).^0.564).*(X(4).^0. 454)]; Ra=@(X)[10^(-0.92146)*(X(1).^0.14365).*(X(2).^0.16065).*(X(3).^0.047691).*( X(4).^0.38457)]; Q=@(X)[-1000*2*X(1).*X(2).*X(3).*X(4)/(pi*D)];

蚁群算法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仿真doc资料

编程方式实现: 1.惩罚函数 function f=fun(x,r) f=x(1,1)^2+x(2,1)^2-r*log(x(1,1)-1); 2.步长的函数 function f=fh(x0,h,s,r) %h为步长 %s为方向 %r为惩罚因子 x1=x0+h*s; f=fun(x1,r); 3. 步长寻优函数 function h=fsearchh(x0,r,s) %利用进退法确定高低高区间,利用黄金分割法进行求解h1=0;%步长的初始点 st=0.001; %步长的步长 h2=h1+st; f1=fh(x0,h1,s,r); f2=fh(x0,h2,s,r); if f1>f2 h3=h2+st; f3=fh(x0,h3,s,r); while f2>f3 h1=h2; h2=h3; h3=h3+st; f2=f3; f3=fh(x0,h3,s,r); end else st=-st; v=h1; h1=h2; h2=v; v=f1; f1=f2; f2=v; h3=h2+st; f3=fh(x0,h3,s,r); while f2>f3 h1=h2; h2=h3; h3=h3+st; f2=f3;

f3=fh(x0,h3,s,r); end end %得到高低高的区间 a=min(h1,h3); b=max(h1,h3); %利用黄金分割点法进行求解 h1=1+0.382*(b-a); h2=1+0.618*(b-a); f1=fh(x0,h1,s,r); f2=fh(x0,h2,s,r); while abs(a-b)>0.0001 if f1>f2 a=h1; h1=h2; f1=f2; h2=a+0.618*(b-a); f2=fh(x0,h2,s,r); else b=h2; h2=h1; f2=f1; h1=a+0.382*(b-a); f1=fh(x0,h1,s,r); end end h=0.5*(a+b); 4. 迭代点的寻优函数 function f=fsearchx(x0,r,epson) x00=x0; m=length(x0); s=zeros(m,1); for i=1:m s(i)=1; h=fsearchh(x0,r,s); x1=x0+h*s; s(i)=0; x0=x1; end while norm(x1-x00)>epson x00=x1; for i=1:m s(i)=1; h=fsearchh(x0,r,s);

MATLAB实验报告,遗传算法解最短路径以及函数最小值问题讲解

硕士生考查课程考试试卷 考试科目:MATLAB教程 考生姓名:考生学号: 学院:专业: 考生成绩: 任课老师(签名) 考试日期:20 年月日午时至时

《MATLAB 教程》试题: A 、利用MATLA B 设计遗传算法程序,寻找下图11个端点的最短路径,其中没有连接的端点表示没有路径。要求设计遗传算法对该问题求解。 a d e h k B 、设计遗传算法求解f (x)极小值,具体表达式如下: 3 21231(,,)5.12 5.12,1,2,3 i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 C 、利用MATLAB 编程实现:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行,随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何乘船渡河的大权掌握在商人手中,商人们怎样才能安全渡河? D 、结合自己的研究方向选择合适的问题,利用MATLAB 进行实验。 以上四题任选一题进行实验,并写出实验报告。

选择题目: A 一、问题分析(10分) 1 4 10 11 如图如示,将节点编号,依次为 1.2.3.4.5.6.7.8.9.10.11,由图论知识,则可写出其带权邻接矩阵为: 0 2 8 1 500 500 500 500 500 500 500 2 0 6 500 1 500 500 500 500 500 500 8 6 0 7 500 1 500 500 500 500 500 1 500 7 0 500 500 9 500 500 500 500 500 1 500 500 0 3 500 2 500 500 500 500 500 1 500 3 0 4 500 6 500 500 500 500 500 9 500 4 0 500 500 1 500 500 500 500 500 2 500 500 0 7 500 9 500 500 500 500 500 6 500 7 0 1 2 500 500 500 500 500 500 1 500 1 0 4 500 500 500 500 500 500 500 9 2 4 0 注:为避免计算时无穷大数吃掉小数,此处为令inf=500。 问题要求求出任意两点间的最短路径,Floyd 算法采用的是在两点间尝试插入顶点,比较距离长短的方法。我思考后认为,用遗传算法很难找到一个可以统一表示最短路径的函数,但是可以对每一对点分别计算,然后加入for 循环,可将相互之间的所有情况解出。观察本题可发现,所有节点都是可双向行走,则可只计算i 到j 的路径与距离,然后将矩阵按主对角线翻折即可得到全部数据。 二、实验原理与数学模型(20分) 实现原理为遗传算法原理: 按所选择的适应度函数并通过遗传中的复制、交叉及变异对个体进行筛选,使得适应度高的个体被保留下来,组成新的群体,新的群体既继承了上一代的信息,又优于上一代。这样周而复始,群体中个体适应度不断提高,直到满足一定的条件。 数学模型如下: 设图G 由非空点集合12{,...}n V V V V = 和边集合12{,...}m E e e e = 组成,其中121221(,)e ,P ,)(P ,P ), i i i i i i i i e P P E P =∈≠且若(则G 为一个有向图; 又设i e 的值为i a ,12{,...},m A a a a = 故G 可表示为一个三元组{,,}G P E A = 则求最短路径的数学模型可以描述为:

蚁群算法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);

PID控制算法的matlab仿真

PID 控制算法的matlab 仿真 PID 控制算法就是实际工业控制中应用最为广泛的控制算法,它具有控制器设计简单,控制效果好等优点。PID 控制器参数的设置就是否合适对其控制效果具有很大的影响,在本课程设计中一具有较大惯性时间常数与纯滞后的一阶惯性环节作为被控对象的模型对PID 控制算法进行研究。被控对象的传递函数如下: ()1d s f Ke G s T s τ-= + 其中各参数分别为30,630,60f d K T τ===。MATLAB 仿真框图如图1所示。 图1 2 具体内容及实现功能 2、1 PID 参数整定 PID 控制器的控制参数对其控制效果起着决定性的作用,合理设置控制参数就是取得较好的控制效果的先决条件。常用的PID 参数整定方法有理论整定法与实验整定法两类,其中常用的实验整定法由扩充临界比例度法、试凑法等。在此处选用扩充临界比例度法对PID 进行整定,其过程如下: 1) 选择采样周期 由于被控对象中含有纯滞后,且其滞后时间常数为 60d τ=,故可选择采样周期1s T =。 2) 令积分时间常数i T =∞,微分时间常数0d T =,从小到大调节比例系数K , 使得系统发生等幅震荡,记下此时的比例系数k K 与振荡周期k T 。 3) 选择控制度为 1.05Q =,按下面公式计算各参数:

0.630.490.140.014p k i k d k s k K K T T T T T T ==== 通过仿真可得在1s T =时,0.567,233k k K T ==,故可得: 0.357,114.17,32.62, 3.262p i d s K T T T ==== 0.0053.57 p s i i p d d s K T K T K T K T === = 按此组控制参数得到的系统阶跃响应曲线如图2所示。 01002003004005006007008009001000 0.20.40.60.811.21.41.6 1.8 图2 由响应曲线可知,此时系统虽然稳定,但就是暂态性能较差,超调量过大,且响应曲线不平滑。根据以下原则对控制器参数进行调整以改善系统的暂态过程: 1) 通过减小采样周期,使响应曲线平滑。 2) 减小采样周期后,通过增大积分时间常数来保证系统稳定。 3) 减小比例系数与微分时间常数,以减小系统的超调。 改变控制器参数后得到系统的阶跃响应曲线如图3所示,系统的暂态性能得到明显改善、

matlab自适应遗传算法

function [xv,fv]=AdapGA(fitness,a,b,NP,NG,Pc1,Pc2,Pm1,Pm2,eps) %×?êêó|ò?′???·¨ L = ceil(log2((b-a)/eps+1)); x = zeros(NP,L); for i=1:NP x(i,:) = Initial(L); fx(i) = fitness(Dec(a,b,x(i,:),L)); end for k=1:NG sumfx = sum(fx); Px = fx/sumfx; PPx = 0; PPx(1) = Px(1); for i=2:NP PPx(i) = PPx(i-1) + Px(i); end for i=1:NP sita = rand(); for n=1:NP if sita <= PPx(n) SelFather = n; break; end

end Selmother = round(rand()*(NP-1))+1; posCut = round(rand()*(L-2)) + 1; favg = sumfx/NP; fmax = max(fx); Fitness_f = fx(SelFather); Fitness_m = fx(Selmother); Fm = max(Fitness_f,Fitness_m); if Fm>=favg Pc = Pc1*(fmax - Fm)/(fmax - favg); else Pc = Pc2; end r1 = rand(); if r1<=Pc nx(i,1:posCut) = x(SelFather,1:posCut); nx(i,(posCut+1):L) = x(Selmother,(posCut+1):L); fmu = fitness(Dec(a,b,nx(i,:),L)); if fmu>=favg Pm = Pm1*(fmax - fmu)/(fmax - favg); else Pm = Pm2;

蚁群算法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仿真汇总

实验一 典型环节的MATLAB 仿真 一、实验目的 1.熟悉MATLAB 桌面和命令窗口,初步了解SIMULINK 功能模块的使用方法。 2.通过观察典型环节在单位阶跃信号作用下的动态特性,加深对各典型环节响应曲线的理解。 3.定性了解各参数变化对典型环节动态特性的影响。 二、SIMULINK 的使用 MATLAB 中SIMULINK 是一个用来对动态系统进行建模、仿真和分析的软件包。利用SIMULINK 功能模块可以快速的建立控制系统的模型,进行仿真和调试。 1.运行MATLAB 软件,在命令窗口栏“>>”提示符下键入simulink 命令,按Enter 键或在工具栏单击按钮,即可进入如图1-1所示的SIMULINK 仿真 环境下。 2.选择File 菜单下New 下的Model 命令,新建一个simulink 仿真环境常规模板。 3.在simulink 仿真环境下,创建所需要的系统 三、实验内容 按下列各典型环节的传递函数,建立相应的SIMULINK 仿真模型,观察并记录其单位阶跃响应波形。 ① 比例环节1)(1=s G 和2)(1=s G 实验处理:1)(1=s G SIMULINK 仿真模型

波形图为: 实验处理:2)(1=s G SIMULINK 仿真模型 波形图为: 实验结果分析:增加比例函数环节以后,系统的输出型号将输入信号成倍数放大. ② 惯性环节11)(1+= s s G 和15.01)(2+=s s G 实验处理:1 1 )(1+=s s G SIMULINK 仿真模型

波形图为: 实验处理:1 5.01 )(2+= s s G SIMULINK 仿真模型 波形图为: 实验结果分析:当1 1 )(1+= s s G 时,系统达到稳定需要时间接近5s,当

相关文档
相关文档 最新文档