人工智能matlab仿真Word下载.docx
《人工智能matlab仿真Word下载.docx》由会员分享,可在线阅读,更多相关《人工智能matlab仿真Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
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<
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做测试。
第三步,计算隐含层各神经元的输入和输出。
第四步,利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导