人工智能matlab仿真.docx

上传人:b****5 文档编号:26426578 上传时间:2023-06-19 格式:DOCX 页数:14 大小:57.70KB
下载 相关 举报
人工智能matlab仿真.docx_第1页
第1页 / 共14页
人工智能matlab仿真.docx_第2页
第2页 / 共14页
人工智能matlab仿真.docx_第3页
第3页 / 共14页
人工智能matlab仿真.docx_第4页
第4页 / 共14页
人工智能matlab仿真.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

人工智能matlab仿真.docx

《人工智能matlab仿真.docx》由会员分享,可在线阅读,更多相关《人工智能matlab仿真.docx(14页珍藏版)》请在冰豆网上搜索。

人工智能matlab仿真.docx

人工智能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组的训练过程

它们对应的误差变化图像如下:

测试图像为:

对应的测试误差图像为:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

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

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