人工智能matlab仿真.docx
《人工智能matlab仿真.docx》由会员分享,可在线阅读,更多相关《人工智能matlab仿真.docx(14页珍藏版)》请在冰点文库上搜索。
人工智能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);
%%进化过程
whilegenFitnV=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
ifmaxYmaxY=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);%函数适应度最小值即最优值
%%进化过程
whilegenFitnV=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组的训练过程
它们对应的误差变化图像如下:
测试图像为:
对应的测试误差图像为: