人工智能matlab仿真.docx
- 文档编号:28112829
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:20
- 大小:356.62KB
人工智能matlab仿真.docx
《人工智能matlab仿真.docx》由会员分享,可在线阅读,更多相关《人工智能matlab仿真.docx(20页珍藏版)》请在冰豆网上搜索。
人工智能matlab仿真
1.函数优化
该二元6次函数式一个多峰函数,共有6个极值,其中有两个极值点对应的函数取值为最小值。
试求解函数的极值点。
(1)设计思路
本题采用遗传算法,遗传算法搜索最优解的方法是模仿生物的进化过程,遗传算法主要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群。
遗传算法具有通用、并行、稳健、简单与全局优化能力强等突出优点,适用于解决复杂、困难的全局优化问题。
(2)程序流程图
(3)实验程序
functionobjV=objectFunction(pop)
m=size(pop,1);
fori=1:
mobjV(i,1)=4*pop(i,1)^2-2.1*pop(i,1)^4+(1/3)*pop(i,1)^6+pop(i,1)*pop(i,2)-4*pop(i,2)^2+4*pop(i,2)^4;
end
%%初始化
clc;
clear;
pc=0.7;%交叉率
pm=0.05;%变异率
NIND=20;%个体数目
MAXGEN=1000;%最大遗传代数
NVAR=2;%变量维数
PRECI=40;%变量二进制数
GGAP=0.9;%代沟
trace_min=zeros(MAXGEN,1);%每代极小值
trace_max=zeros(MAXGEN,1);%每代极大值
%%种群初始化
FieldD=[rep(PRECI,[1,NVAR]);[-1,-1;1,1];rep([1;0;1;1],[1,NVAR])];%区域扫描
Chrom=crtbp(NIND,NVAR*PRECI);%创建初始种群
%%计算第0代函数适应度,寻找最优个体
gen=0;
pop=bs2rv(Chrom,FieldD);%将二进制初始种群转化为十进制
objV=objectFunction(pop);%计算函数适应度
minY=min(objV);%函数适应度最小值即函数最小值
maxY=max(objV);
POP(:
:
gen+1)=pop(1:
end,1:
end);
%%进化过程
whilegen FitnV=ranking(-objV); SelCh=select('sus',Chrom,FitnV,GGAP);%选择 SelCh=recombin('xovsp',SelCh,pc);%重组 SelCh=mut(SelCh,pm);%变异 popnew=bs2rv(SelCh,FieldD);%新一代种群 objVSel=objectFunction(popnew);%计算子代目标函数值 [Chrom,objV]=reins(Chrom,SelCh,1,1,objV,objVSel); gen=gen+1; ifminY>min(objV)%寻找当前极小值 minY=min(objV); [y,i]=min(objV); x=bs2rv(Chrom,FieldD); xmin(1,: )=x(i,: ); disp(['对应最小自变量取值: ',num2str(x(i,: ))])%输出最优个体 disp(['对应最小值: ',num2str(y)])%输出最优个体 end ifmaxY maxY=max(objV); [Y,I]=max(objV); X=bs2rv(Chrom,FieldD); xmax(1,: )=X(I,: ); disp(['对应最大自变量取值: ',num2str(X(I,: ))])%输出最优个体 disp(['对应最大值: ',num2str(Y)])%输出最优个体 end trace_min(gen,1)=minY;%保存当前极小值 trace_max(gen,1)=maxY;%保存当前极大值 end %%画图 figure (1)%画进化过程图 plot(1: gen,trace_min(: 1)); holdon plot(1: gen,-1.031570364,'r-');%目标函数在区间最小值 figure (2) plot(1: gen,trace_max(: 1)); holdon plot(1: gen,3.2333,'r-');%目标函数在区间最大值 (4)运行结果 优化函数如图所示: 由优化函数图可知,此函数存在2个极小值点,4个极大值点。 4个最大值为: 对应x1,x2最大自变量取值: -0.99543-0.91298对应函数最大值: 2.5798 对应x1,x2最大自变量取值: -0.92829-0.99328对应函数最大值: 2.97 对应x1,x2最大自变量取值: -0.989-0.99817对应函数最大值: 3.1879 对应x1,x2最大自变量取值: -0.99168-0.99925对应函数最大值: 3.2047 2个最小值为: 对应x1,x2最小自变量取值: -0.0447820.76447对应函数最小值: -0.99772 对应x1,x2最小自变量取值: 0.11984-0.66623对应函数最小值: -1.0102 2.体重约70kg的某人在短时间喝下2瓶啤酒后,隔一段时间测量他的血液中酒精含量(mg/100mL),得到以下数据: 时间/(h) 0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 酒精含量/ 30 68 75 82 82 77 68 68 58 51 50 41 38 35 时间/(h) 8 9 10 11 12 13 14 15 16 酒精含量 28 25 18 15 12 10 7 7 4 根据酒精在人体血液分解的动力学规律可知,血液中酒精浓度与时间的关系可表示为: 试根据表中数据求出参数 、 、 。 (1)设计思路 本题采用遗传算法,遗传算法搜索最优解的方法是模仿生物的进化过程,遗传算法主要使用选择算子、交叉算子与变异算子来模拟生物进化,从而产生一代又一代的种群。 遗传算法具有通用、并行、稳健、简单与全局优化能力强等突出优点,适用于解决复杂、困难的全局优化问题。 (2)程序流程图 (3)实验程序: %%求函数适应度子程序 functionobjV=objectFunction(pop,Data) m=size(pop,1); n=size(Data,1); fori=1: m forj=1: n C(j,1)=abs(pop(i,1)*(exp(pop(i,2)*(-1)*Data(j,1))-exp(pop(i,3)*(-1)*Data(j,1)))-Data(j,2)); end objV(i,1)=mean(C); end %%求方差子程序 functionRESM=variance(a,a_1) M=size(a,1); y=0; y_1=0; fori=1: M y_1=y_1+(a(i,1)-a_1(i,1))^2; end RESM=sqrt(y_1/M); %%主程序 loadData %%初始化 pc=0.7;%交叉率 pm=0.05;%变异率 NIND=500;%个体数目 MAXGEN=2000;%最大遗传代数 NVAR=3;%变量维数 PRECI=20;%变量二进制数 GGAP=0.9;%代购 trace=zeros(MAXGEN,1);%每代最优值 %%种群初始化 FieldD=[rep(PRECI,[1,NVAR]);[100,0,0;150,1,3];rep([1;0;1;1],[1,NVAR])];%区域扫描 Chrom=crtbp(NIND,NVAR*PRECI);%创建初始种群 %%计算第0代函数适应度,寻找最优个体 gen=0; pop=bs2rv(Chrom,FieldD);%将二进制初始种群转化为十进制 objV=objectFunction(pop,Data);%计算函数适应度 minY=min(objV);%函数适应度最小值即最优值 %%进化过程 whilegen FitnV=ranking(-objV); SelCh=select('sus',Chrom,FitnV,GGAP);%选择 SelCh=recombin('xovsp',SelCh,pc);%重组 SelCh=mut(SelCh,pm);%变异 popnew=bs2rv(SelCh,FieldD);%新一代种群 objVSel=objectFunction(popnew,Data);%计算子代目标函数值 [Chrom,objV]=reins(Chrom,SelCh,1,1,objV,objVSel); gen=gen+1; ifminY>min(objV)%寻找当前最优个体 minY=min(objV); end trace(gen,1)=minY;%保存当前最优个体 end %%结果输出 [Y,I]=min(objV); X=bs2rv(Chrom,FieldD); Xmin(1,: )=X(I,: ); disp(['对应自变量取值: ',num2str(X(I,: ))])%输出最优个体 m=size(Data,1); fori=1: m%输出最优个体的函数拟合值 Y(i,1)=Xmin(1,1)*(exp((-1)*Xmin(1,2)*(Data(i,1)))-exp((-1)*Xmin(1,3)*(Data(i,1)))); ARE(i,1)=Data(i,2)-Y(i,1); end RESM=variance(Data(: 2),Y);%计算方差 disp(['方差: ',num2str(RESM)]) %%画图 figure (1)%画进化过程图 plot(1: gen,trace(: 1)); figure (2);%画出期望值与拟合值曲线 plot(Data(: 1),Data(: 2),'rd-'); holdon plot(Data(: 1),Y,'b*-') xlabel('时间'); ylabel('酒精含量'); legend('期望值','拟合值'); figure(3) plot(Data(: 1),ARE,'rd-') xlabel('时间'); ylabel('误差'); (4)运行结果 进行20次的多项式拟合后图如下: 所以,对应自变量取值: k=113.3353q=0.1841013r=2.206932 方差: 3.3748 3.设计一个神经网络,并对输入信号进行预测。 输入为一线性调频信号,信号采样时间为2s,采样频率为1000Hz,起始到信号的瞬时为0Hz,1s时的瞬时频率为150Hz。 (1)本题采用三层BP神经网络。 第一步,网络初始化。 给各连接权值分别赋一个区间的随机数,设定误差函数e,给定计算精度值和最大学习次数M。 第二步,随机选取第2000个输入样本,前1900作为训练样本最后100做测试。 第三步,计算隐含层各神经元的输入和输出。 第四步,利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数a。 第五步利用隐含层到输出层的连接权值、输出层和隐含层a的输出计算误差函数对隐含层各神经元的偏导数b。 第六步,利用输出层各神经元的a和隐含层各神经元的输出来修正连接权值w。 第七步: 利用隐含层各神经元的a和输入层各神经元的输入修正连接权。 (2)神经网络算法流程图: (3)实验程序 %%设计一个神经网络,并对输入信号进行预测 %%信号采样时间为2s,采样频率为1000Hz,起始到信号的瞬时为0Hz,1s时的瞬时频率为150Hz clc; clear; time=0: 0.001: 2; y=chirp(time,0,1,150,'linear'); y=y'; time=time'; m=size(y,1); %%网络训练数据以前四个时刻预测第五个时刻 fori=1: 1896 X(i,1)=y(i,1); X(i,2)=y(i+1,1); X(i,3)=y(i+2,1); X(i,4)=y(i+3,1); Y(i,1)=y(i+4,1); end %%网络训练 s=size(Y,2); p=X'; t=Y'; %数据归一化 [pn,minX,maxX]=premnmx(p);%将数据归一化 [tn,minY,maxY]=premnmx(t);%将数据归一化 %训练网络 net=newff(minmax(pn),[8,s],{'tansig','purelin'},'trainlm'); net.trainParam.goal=0.001; net.trainParam.epochs=800; net=train(net,pn,tn); yn=sim(net,pn); Yn=postmnmx(yn,minY,maxY); y_train=Yn'; %%训练误差 train_number=size(X,1); fori=1: train_number ARE(i,1)=Y(i,1)-y_train(i,1); end %%网络测试数据 fori=1: 97 X_test(i,1)=y(i+1900,1); X_test(i,2)=y(i+1901,1); X_test(i,3)=y(i+1902,1); X_test(i,4)=y(i+1903,1); Y_test(i,1)=y(i+1904,1); end %%网络测试 q=X_test'; u=Y_test'; [qn]=tramnmx(q,minX,maxX); y_tr=sim(net,qn); y_trr=postmnmx(y_tr,minY,maxY); y_test=y_trr';train_number=size(X,1); test_number=size(X_test,1); test_number=size(X_test,1); %%测试误差 fori=1: test_number ARE_1(i,1)=Y_test(i,1)-y_test(i,1); end %%画图 figure (1); plot(Y,'rd-'); holdon plot(y_train,'b*-') legend('训练样本输出期望值','训练样本输出预测值'); axis([0500-1.51.5]) figure (2); plot(Y,'rd-'); holdon plot(y_train,'b*-') legend('训练样本输出期望值','训练样本输出预测值'); axis([5011000-1.51.5]) figure(3); plot(Y,'rd-'); holdon plot(y_train,'b*-') legend('训练样本输出期望值','训练样本输出预测值'); axis([10011500-1.51.5]) figure(4); plot(Y,'rd-'); holdon plot(y_train,'b*-') legend('训练样本输出期望值','训练样本输出预测值'); axis([15011900-1.51.5]) figure(5); plot(ARE,'b*-'); axis([0500-0.20.2]) figure(6); plot(ARE,'b*-'); axis([5011000-0.20.2]) figure(7); plot(ARE,'b*-'); axis([10011500-0.20.2]) figure(8); plot(ARE,'b*-'); axis([15011900-0.20.2]) figure(9); plot(ARE_1,'b*-'); figure(10); plot(Y_test,'rd-'); holdon plot(y_test,'b*-') (4)运行结果 下图分别为0-1900样本分成4组的训练过程 它们对应的误差变化图像如下: 测试图像为: 对应的测试误差图像为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 matlab 仿真