福州大学人工智能作业.docx

上传人:b****3 文档编号:4170494 上传时间:2023-05-06 格式:DOCX 页数:37 大小:905.09KB
下载 相关 举报
福州大学人工智能作业.docx_第1页
第1页 / 共37页
福州大学人工智能作业.docx_第2页
第2页 / 共37页
福州大学人工智能作业.docx_第3页
第3页 / 共37页
福州大学人工智能作业.docx_第4页
第4页 / 共37页
福州大学人工智能作业.docx_第5页
第5页 / 共37页
福州大学人工智能作业.docx_第6页
第6页 / 共37页
福州大学人工智能作业.docx_第7页
第7页 / 共37页
福州大学人工智能作业.docx_第8页
第8页 / 共37页
福州大学人工智能作业.docx_第9页
第9页 / 共37页
福州大学人工智能作业.docx_第10页
第10页 / 共37页
福州大学人工智能作业.docx_第11页
第11页 / 共37页
福州大学人工智能作业.docx_第12页
第12页 / 共37页
福州大学人工智能作业.docx_第13页
第13页 / 共37页
福州大学人工智能作业.docx_第14页
第14页 / 共37页
福州大学人工智能作业.docx_第15页
第15页 / 共37页
福州大学人工智能作业.docx_第16页
第16页 / 共37页
福州大学人工智能作业.docx_第17页
第17页 / 共37页
福州大学人工智能作业.docx_第18页
第18页 / 共37页
福州大学人工智能作业.docx_第19页
第19页 / 共37页
福州大学人工智能作业.docx_第20页
第20页 / 共37页
亲,该文档总共37页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

福州大学人工智能作业.docx

《福州大学人工智能作业.docx》由会员分享,可在线阅读,更多相关《福州大学人工智能作业.docx(37页珍藏版)》请在冰点文库上搜索。

福州大学人工智能作业.docx

福州大学人工智能作业

人工智能

姓名:

陈超学号:

150120001专业:

电机与电器

一、编写主观bayes方法子程序

pH_2=Obayes(LS1,LN1,LS2,LN2,C,U,C1,C2,pH_1)

C:

初始证据=1,中间结论=0;

U:

更新算法=1,合成算法=0

1.1编程思路

参数变量的输入:

U、LS1、LN1、LS2、LN2、C1、C2、oH_1

U代表算法方式(1为合成算法,0为更新算法)

C1和C2代表证据1和2的状态(1为初始证据,0为中间结论)

先判断算法状态U再判断证据状态C1、C2,套用EH公式或CP公式。

根据算法不同来计算后验几率再转化为后验概率。

输出oH_1、pH_1、oH_1_S1S2、pH_1_S1S2

1.2计算结果(以ppt上例题为例)

把题目中的网络分成两步来计算。

合成算法的结果如下

更新算法的结果如下:

 

1.3算法程序:

function[]=Obayes

U=input('请选择算法(1为合成算法,0为更新算法):

');

LS1=input('请输入E1的充分性度量:

');

LN1=input('请输入E2的必要性度量:

');

LS2=input('请输入E2的充分性度量:

');

LN2=input('请输入E2的必要性度量:

');

C1=input('请输入证据E1的状态(1为初始证据,0为中间结论):

');

C2=input('请输入证据E2的状态(1为初始证据,0为中间结论):

');

oH_1=input('请输入H的先验几率:

');

pH_1=(oH_1/(1+oH_1));

ifU==1%合成算法

pH_1_E1=((LS1*oH_1)/(1+LS1*oH_1));

pH_1_FE1=((LN1*oH_1)/(1+LN1*oH_1));

pH_1_E2=((LS2*oH_1)/(1+LS2*oH_1));

pH_1_FE2=((LN2*oH_1)/(1+LN2*oH_1));

ifC1==1%初始证据CP公式

S1=input('请输入E1的可信度:

');

ifS1>0

pH_1_S1=(pH_1+(pH_1_E1-pH_1)/5*S1);

else

pH_1_S1=(pH_1_FE1+(pH_1-pH_1_FE1)*(S1/5+1));

end

else%中间结论EH公式

pE1=input('请输入E1的先验概率:

');

pE1_S1=input('请输入E1的后验概率:

');

ifpE1_S1>=pE1

pH_1_S1=(pH_1+(pH_1_E1-pH_1)/(1-pE1)*(pE1_S1-pE1));

else

pH_1_S1=(pH_1_FE1+(pH_1-pH_1_FE1)/(pE1)*(pE1_S1));

end

end

ifC2==1

S2=input('请输入E2的可信度:

');

ifS2>0

pH_1_S2=(pH_1+(pH_1_E2-pH_1)/5*S2);

else

pH_1_S2=(pH_1_FE2+(pH_1-pH_1_FE2)*(S2/5+1));

end

else

pE2=input('请输入E2的先验概率:

');

pE2_S2=input('请输入E2的后验概率:

');

ifpE2_S2>=pE2

pH_1_S2=(pH_1+(pH_1_E2-pH_1)/(1-pE2)*(pE2_S2-pE2));

else

pH_1_S2=(pH_1_FE2+(pH_1-pH_1_FE2)/(pE2)*(pE2_S2));

end

end

oH_1_S1=((pH_1_S1)/(1-pH_1_S1));

oH_1_S2=((pH_1_S2)/(1-pH_1_S2));

oH_2=((oH_1_S1/oH_1)*(oH_1_S2/oH_1)*oH_1);

pH_2=(oH_2/(1+oH_2));

fprintf('H的先验几率=%f\n',oH_1)

fprintf('H的先验概率=%f\n',pH_1)

fprintf('H的后验几率=%f\n',oH_2)

fprintf('H的后验概率=%f\n',pH_2)

elseifU==0%更新算法¨

pH_1_E1=((LS1*oH_1)/(1+LS1*oH_1));

pH_1_FE1=((LN1*oH_1)/(1+LN1*oH_1));

ifC1==1

S1=input('请输入E1的可信度:

');

ifS1>0

pH_1_S1=(pH_1+(pH_1_E1-pH_1)/5*S1);

else

pH_1_S1=(pH_1_FE1+(pH_1-pH_1_FE1)*(S1/5+1));

end

else

pE1=input('请输入E1的先验概率:

');

pE1_S1=input('请输入E1的后验概率:

');

ifpE1_S1>=pE1

pH_1_S1=(pH_1+(pH_1_E1-pH_1)/(1-pE1)*(pE1_S1-pE1));

else

pH_1_S1=(pH_1_FE1+(pH_1-pH_1_FE1)/(pE1)*(pE1_S1));

end

end

oH_1_S1=((pH_1_S1)/(1-pH_1_S1));

pH_1_S1_E2=((LS2*oH_1_S1)/(1+LS2*oH_1_S1));

pH_1_S1_FE2=((LN2*oH_1_S1)/(1+LN2*oH_1_S1));

ifC2==1

S2=input('请输入E2的可信度:

');

ifS2>0

pH_1_S1S2=(pH_1_S1+(pH_1_S1_E2-pH_1_S1)/5*S2);

else

pH_1_S1S2=(pH_1_S1_FE2+(pH_1_S1-pH_1_S1_FE2)*(S2/5+1));

end

else

pE2=input('请输入E2的先验概率:

');

pE2_S2=input('请输入E2的后验概率:

');

ifpE2_S2>=pE2

pH_1_S1S2=(pH_1_S1+(pH_1_S1_E2-pH_1_S1)/(1-pE2)*(pE2_S2-pE2));

else

pH_1_S1S2=(pH_1_S1_FE2+(pH_1_S1-pH_1_S1_FE2)/(pE2)*(pE2_S2));

end

end

oH_1_S1S2=((pH_1_S1S2)/(1-pH_1_S1S2));

fprintf('H的先验几率=%f\n',oH_1)

fprintf('H的先验概率=%f\n',pH_1)

fprintf('H的后验几率=%f\n',oH_1_S1S2)

fprintf('H的后验概率=%f\n',pH_1_S1S2)

end

end

 

二、分别编写遗传算法和粒子群算法程序完成Camel函数寻优

Camel函数描述为:

该函数有六个局部极小点,其中(-0.0898,0.7126)和(0.0898,0.7126)为全局最小点,最小值为-1.031628。

本题题目有误:

第一项

的偶次幂故取正负无影响,第三项

同理。

但是对于第二项

取-0.0898和0.0898时算出的

不可能一样。

故这题结论是错误的,全局最小点为(-0.0898,0.7126)。

A.遗传算法

A.2.1编程思路

对种群进行初始化,解码并且计算目标值和适应度。

比例运算,交叉运算,变异运算

生成新的种群并且输出目标值。

A.2.2计算结果

上图为一次计算结果,可以看出基本接近于题目中的结论。

算法测试结果:

由于时间有限,一共做了100次测试得出结果是:

最大与最小的差值仅仅只有0.003的差值,可见算法的精度还是比较高的。

A.2.3问题与思考

由于自己编写的GA算法一直在目标函数与适应度函数的转化上出现错误导致无法得出正常结果,故在参照同学的程序上进行了进一步的修改得到下面的算法程序。

但是同时也有一些问题无法得到理解与解决。

1、程序中并没有对适应度进行非负的转化

2、由于负数的适应度存在导致在比例选择中总的适应度降低,从而进一步导致正数的适应度间接增大,而负数的适应度丢失。

3、即使存在上述两点的问题,算法的结果依然是接近于正确,导致本人对此感到匪夷所思,然而时间和能力的有限使得本人并没有进一步研究与探讨。

A.2.4算法程序

function[]=GA

clearall

closeall

%参数

Size=150;

G=300;

L=10;

xmax=3;

xmin=-3;

ymax=2;

ymin=-2;

pc=0.60;

pm=0.01;

%初始化

E=round(rand(Size,2*L));

%主程序

fork=1:

1:

G

time(k)=k;

fors=1:

1:

Size

m=E(s,:

);

t1=0;

t2=0;

%解码

m1=m(1:

1:

L);

fori=1:

1:

L

t1=t1+m1(i)*2^(i-1);

end

x(s)=(xmax-xmin)*t1/(2^L-1)+xmin;

m2=m(L+1:

1:

2*L);

fori=1:

1:

L

t2=t2+m2(i)*2^(i-1);

end

y(s)=(ymax-ymin)*t2/(2^L-1)+ymin;

F(s)=(4-2.1*x(s)^2+x(s)^4/3)*x(s)^2+x(s)*y(s)+(-4+4*y(s)^2)*y(s)^2;

end

%从大到小排序

fi=F;

[Oderfi,Indexfi]=sort(fi,'descend');

Bestfi=Oderfi(Size);

BestS=E(Indexfi(Size),:

);

BestX=x(Indexfi(Size));

BestY=y(Indexfi(Size));

bfi(k)=Bestfi;

%比例选择法

fi_sum=sum(fi);

fi_Size=(Oderfi/fi_sum)*Size;

fi_S=floor(fi_Size);

kk=1;

fori=1:

1:

Size

forj=1:

1:

fi_S(i)

TempE(kk,:

)=E(Indexfi(i),:

);

kk=kk+1;

end

end

%交叉运算

n=ceil(20*rand);

fori=1:

2:

(Size-1)

temp=rand;

ifpc>=temp

forj=n:

1:

20

TempE(i,j)=E(i+1,j);

TempE(i+1,j)=E(i,j);

end

end

end

TempE(Size,:

)=BestS;%保留优秀个体

E=TempE;

%变异运算

fori=1:

1:

Size

forj=1:

1:

2*L

temp=rand;

ifpm>=temp

ifTempE(i,j)==0

TempE(i,j)=1;

else

TempE(i,j)=0;

end

end

end

end

%新种群

TempE(Size,:

)=BestS;

E=TempE;

end

Min_Value=Bestfi;

fprintf('最小值=%f\n',Min_Value)

fprintf('X=%f\n',BestX)

fprintf('Y=%f\n',BestY)

figure

(1);

plot(time,bfi);

xlabel('times');ylabel('BestF');

end

 

B.粒子群算法

B.2.1编程思路

参数、种群初始化

计算各个粒子的适应度,初始化全局最优跟个体最优。

学习因子更新、速度更新、种群更新、适应度更新、最优更新

输出结果

B.2.2计算结果

函数最小值=-1.030325

x=-0.085016;y=0.700078

B.2.3算法测试

上图为200次粒子群算法测试,可以看出最大最小之间误差大约为0.03,并且出现最大误差的次数大约为3%,可见算法可靠性还算可以。

B.2.4算法程序

function[]=Pso

%输入变量

N=2;%('解空间的维度=');

M=20;

G=300;

c1max=2.5;

c1min=0.5;

c2max=2.5;

c2min=0.5;

%初始化种群

fori=1:

M

pop(i,1)=3*rands(1,1);%1行一列[-33]的随机数

pop(i,2)=2*rands(1,1);

V(i,:

)=rand(1,2);

end

%计算各个粒子的适应度,并初始化pbest跟gbest

fori=1:

M

fitness(i)=((4-2.1*(pop(i,1)^2)+(pop(i,1)^4)/3)*((pop(i,1)^2)))+((pop(i,1)*pop(i,2)))+((-4+4*(pop(i,2)^2))*(pop(i,2)^2));

end

[bestfitnessbestindex]=min(fitness);%min返回两个值第一个为最小值,第二个为最小值位置

zbest=pop(bestindex,:

);%全局最佳

gbest=pop;%个体最佳

fitnessgbest=fitness;%个体最佳适应度值

fitnesszbest=bestfitness;%全局最佳适应度值

%迭代寻优

fori=1:

1:

G

%学习因子更新

c1=c1max-(c1max-c1min)*i/G;

c2=c2min+(c2max-c2min)*i/G;

forj=1:

1:

M

V(j,:

)=V(j,:

)+c1*rand*(gbest(j,:

)-pop(j,:

))+c2*rand*(zbest-pop(j,:

));%速度更新

pop(j,:

)=pop(j,:

)+V(j,:

);%种群更新

fitness(j)=((4-2.1*(pop(j,1)^2)+(pop(j,1)^4)/3)*((pop(j,1)^2)))+((pop(j,1)*pop(j,2)))+((-4+4*(pop(j,2)^2))*(pop(j,2)^2));%适应度更新

end

forj=1:

1:

M

iffitness(j)

gbest(j,:

)=pop(j,:

);

fitnessgbest(j)=fitness(j);

end

iffitness(j)

zbest=pop(j,:

);

fitnesszbest=fitness(j);

end

end

G_best(i)=fitnesszbest;

end

fprintf('函数最小值=%f\n',fitnesszbest)

fprintf('x=%f\n',zbest

(1))

fprintf('y=%f\n',zbest

(2))

end

 

三、编写蚁群算法程序完成31个城市的TSP问题寻优

31个城市 坐标为:

[13042312;36391315;41772244;37121399;34881535;33261556;32381229;41961004;4312790;4386570;30071970;25621756;27881491;23811676;1332695;37151678;39182179;40612370;37802212;36762578;40292838;42632931;34291908;35072367;33942643;34393201;29353240;31403550;25452357;27782826;23702975]

3.1编程思路

初始化:

计算距离矩阵,蚂蚁位置初始化

选择城市:

计算选择概率,转盘选择,更新禁忌表

计算路径长度,记录本次迭代最佳路线

更新信息素,禁忌表清空

输出结果,绘制路线图

3.2计算结果

最短距离=16038.794579

最佳路径为:

15-14-12-13-11-23-16-5-6-7-2-4-8-9-10-17-3-18-21-22-19

-24-20-25-26-28-27-30-31-29-1-15

3.3算法程序

function[]=Aco

clearall

%输入变量

C=[1304,2312;3639,1315;4177,2244;3712,1399;3488,1535;3326,1556;3238,1229;4196,1004;4312,790;4386,570;3007,1970;2562,1756;2788,1491;2381,1676;1332,695;3715,1678;3918,2179;4061,2370;3780,2212;3676,2578;4029,2838;4263,2931;3429,1908;3507,2367;3394,2643;3439,3201;2935,3240;3140,3550;2545,2357;2778,2826;2370,2975];%C为坐标,n乘2矩阵

m=20;%蚂蚁个数约等于(城市个数/1.5)

NC_max=200;%最大迭代次数

A=1;%信息素重要程度

B=5;%启发因子重要程度

Q=10;%信息素增强强度系数

R=0.7;%信息素蒸发系数

%初始化变量

n=size(C,1);%n为城市的数量1表示行数

D=zeros(n,n);%D为邻接矩阵

fori=1:

n

forj=1:

n

ifi~=j

D(i,j)=(((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5);%两两城市间的距离

else

D(i,j)=eps;%防止启发因子分母为0

end

D(j,i)=D(i,j);

end

end

E=1./D;%E为启发因子,距离的倒数

T=ones(n,n);%T为信息素矩阵

Tabu=zeros(m,n);%Tabu为禁忌表

NC=1;%迭代计数器

road_best=zeros(NC_max,n);

length_best=inf.*ones(NC_max,1);

length_avg=zeros(NC_max,1);

whileNC<=NC_max

%把m只蚂蚁放在n个城市上

Randpos=[];

i_c=ceil(m/n);

ifi_c==1

Randpos=[Randpos,randsample(randperm(n),m)];

else

fori=1:

1:

(i_c-1)

Randpos=[Randpos,randperm(n)];

end

Randpos=[Randpos,randsample(randperm(n),(n-(n*(i_c-1))))];

end

Tabu(:

1)=(Randpos(1,1:

m))';%将蚂蚁的起始城市加入禁忌表的第一列

%m只蚂蚁选择城市

forj=2:

n%旅游次数

fori=1:

m%蚂蚁数量

visited=Tabu(i,1:

(j-1));%记录已访问的城市

J=zeros(1,(n-j+1));%待访问的城市

P=J;%待访问城市的选择概率

Jc=1;

sum_p=0;

fork=1:

n

iflength(find(visited==k))==0%开始时置0

J(Jc)=k;

Jc=Jc+1;

end

end

fork=1:

length(J)

p(k)=((T(visited(end),J(k))^A)*(E(visited(end),J(k))^B));

sum_p=(sum_p+p(k));

end

fork=1:

length(J)

P(k)=p(k)/sum_p;

end

Pcum=cumsum(P);%元素累加求和

select=find(Pcum>=rand);

to_visit=J(select

(1));

Tabu(i,j)=to_visit;

end

end

ifNC>=2

Tabu(1,:

)=road_best(NC-1,:

);

end

%记录本次迭代最佳路线

L=zeros(m,1);

fori=1:

m

road=Tabu(i,:

);

forj=1:

(n-1)

L(i)=L(i)+D(road(j),road(j+1));

end

L(i)=L(i)+D(road

(1),road(n));

end

length_best(NC)=min(L);

pos=find(L==length_best(NC));

road_best(NC,:

)=Tabu(pos

(1),:

);

length_avg(NC)=mean(L);%mean为求数组平均值

NC=NC+1;

%更新信息素

Delta_T=zeros(n,n);%信息素变化量

fori=1:

m

forj=1:

(n-1)

Delta_T(Tabu(i,j),Tabu(i,j+1))=Delta_T(Tabu(i,j),Tabu(i,j+1))+Q/L(i);

end

Delta_T(Tabu(i,n),Tabu(i,1))=Delta_T(Tabu(i,n),Tabu(i,1))+Q/L(i);

end

T=(1-R).*T+R.*Delta_T;

%禁忌表清空

Tabu=zeros(m,n);

end

%输出结果

Pos=find(length_best==min(length_best));

R_best=road_best(Pos

(1),:

);

L_best=length_best(Pos

(1));

fprintf('最短距离=%f\n',L_best)

fprintf('最佳路径为')

fori=1:

n

fprintf('%d-',R_best(i))

end

fprintf('%d\n',R_best

(1))

subplot(1,2,1)

%路线图绘制

N=length(R_best);

scatter(C(:

1),C(:

2));

holdon

plot([C(R_best

(1),1),C(R_best(N),1)],[C(R_best

(1),2)

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2