人工智能matlab仿真Word下载.docx
《人工智能matlab仿真Word下载.docx》由会员分享,可在线阅读,更多相关《人工智能matlab仿真Word下载.docx(20页珍藏版)》请在冰点文库上搜索。
![人工智能matlab仿真Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/305472f3-2d8f-49f5-b70c-eaed8576d6c5/305472f3-2d8f-49f5-b70c-eaed8576d6c51.gif)
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<
MAXGEN
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,:
))])%输出最优个体
对应最小值:
num2str(y)])%输出最优个体
end
ifmaxY<
max(objV)%寻找当前极大值
maxY=max(objV);
[Y,I]=max(objV);
X=bs2rv(Chrom,FieldD);
xmax(1,:
)=X(I,:
对应最大自变量取值:
num2str(X(I,:
对应最大值:
num2str(Y)])%输出最优个体
trace_min(gen,1)=minY;
%保存当前极小值
trace_max(gen,1)=maxY;
%保存当前极大值
%%画图
figure
(1)%画进化过程图
plot(1:
gen,trace_min(:
1));
holdon
gen,-1.031570364,'
r-'
%目标函数在区间最小值
figure
(2)
gen,trace_max(:
holdon
gen,3.2333,'
%目标函数在区间最大值
(4)运行结果
优化函数如图所示:
由优化函数图可知,此函数存在2个极小值点,4个极大值点。
4个最大值为:
对应x1,x2最大自变量取值:
-0.99543-0.91298对应函数最大值:
2.5798
-0.92829-0.99328对应函数最大值:
2.97
-0.989-0.99817对应函数最大值:
3.1879
-0.99168-0.99925对应函数最大值:
3.2047
2个最小值为:
对应x1,x2最小自变量取值:
-0.0447820.76447对应函数最小值:
-0.99772
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
77
58
51
50
41
38
35
8
9
10
11
12
13
14
15
16
酒精含量
28
25
18
根据酒精在人体血液分解的动力学规律可知,血液中酒精浓度与时间的关系可表示为:
试根据表中数据求出参数
、
。
(3)实验程序:
%%求函数适应度子程序
functionobjV=objectFunction(pop,Data)
n=size(Data,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));
objV(i,1)=mean(C);
%%求方差子程序
functionRESM=variance(a,a_1)
M=size(a,1);
y=0;
y_1=0;
M
y_1=y_1+(a(i,1)-a_1(i,1))^2;
RESM=sqrt(y_1/M);
%%主程序
loadData
%%初始化
NIND=500;
MAXGEN=2000;
NVAR=3;
PRECI=20;
%代购
trace=zeros(MAXGEN,1);
%每代最优值
[100,0,0;
150,1,3];
objV=objectFunction(pop,Data);
%函数适应度最小值即最优值
objVSel=objectFunction(popnew,Data);
min(objV)%寻找当前最优个体
trace(gen,1)=minY;
%保存当前最优个体
%%结果输出
[Y,I]=min(objV);
X=bs2rv(Chrom,FieldD);
Xmin(1,:
disp(['
对应自变量取值:
m=size(Data,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);
RESM=variance(Data(:
2),Y);
%计算方差
方差:
num2str(RESM)])
gen,trace(:
figure
(2);
%画出期望值与拟合值曲线
plot(Data(:
1),Data(:
2),'
rd-'
1),Y,'
b*-'
)
xlabel('
时间'
ylabel('
酒精含量'
legend('
期望值'
'
拟合值'
figure(3)
1),ARE,'
误差'
进行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)神经网络算法流程图:
%%设计一个神经网络,并对输入信号进行预测
%%信号采样时间为2s,采样频率为1000Hz,起始到信号的瞬时为0Hz,1s时的瞬时频率为150Hz
time=0:
0.001:
2;
y=chirp(time,0,1,150,'
linear'
y=y'
;
time=time'
m=size(y,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);
%%网络训练
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);
train_number
ARE(i,1)=Y(i,1)-y_train(i,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);
%%网络测试
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
ARE_1(i,1)=Y_test(i,1)-y_test(i,1);
figure
(1);
plot(Y,'
plot(y_train,'
训练样本输出期望值'
训练样本输出预测值'
axis([0500-1.51.5])
axis([5011000-1.51.5])
figure(3);
axis([10011500-1.51.5])
figure(4);
axis([15011900-1.51.5])
figure(5);
plot(ARE,'
axis([0500-0.20.2])
figure(6);
axis([5011000-0.20.2])
figure(7);
axis([10011500-0.20.2])
figure(8);
axis([15011900-0.20.2])
figure(9);
plot(ARE_1,'
figure(10);
plot(Y_test,'
plot(y_test,'
下图分别为0-1900样本分成4组的训练过程
它们对应的误差变化图像如下:
测试图像为:
对应的测试误差图像为: