算法和A2算法的实例.docx
- 文档编号:8863592
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:19
- 大小:29.04KB
算法和A2算法的实例.docx
《算法和A2算法的实例.docx》由会员分享,可在线阅读,更多相关《算法和A2算法的实例.docx(19页珍藏版)》请在冰豆网上搜索。
算法和A2算法的实例
第一次上机
5、设
,物品价值分别为61,59,31,21,15,5,对应的重量为6,5,3,2,1,1。
利用
算法求解该问题。
调用:
A2suanfa
结果:
用A2算法所得到的本题的最优解如下:
所选取装的价值和重量为:
s
(1)=15,w
(1)=1
s
(2)=59,w
(2)=5
s(6)=5,w(6)=1
s(4)=31,w(4)=3
所装货物的总重量为:
10
所装货物的最大总价值为:
110
程序如下:
s0=[61,59,31,21,15,5];
w0=[6,5,3,2,1,1];
p=s0./w0;
[p,index]=sort(-p);%价值和重量的比值
fori=1:
6
s(i)=s0(index(i));%按价重比从大到小排列后的价值
w(i)=w0(index(i));%重排的重量
end
%k=0时:
ss=0;ww=0;kk=0;
xb=zeros(1,6);
fori=1:
6
if(ww+w(i)>10)
continue;
else
kk=kk+1;%记录最优解中物品的个数
xb(kk)=i;
ww=ww+w(i);
ss=ss+s(i);
end
end
%k=1时:
maxw1=0;maxs1=0;%储存最优值重量、价值和下标
maxxb1=zeros(1,6);
maxk1=0;
xb1=zeros(1,6);
fori=1:
6
ww1=w(i);ss1=s(i);
kk1=0;
forj=1:
6
if(j~=i)
if(ww1+w(j)>10)
continue;
else
kk1=kk1+1;
xb1(kk1)=j;
ww1=ww1+w(j);
ss1=ss1+s(j);
end
end
end
if(ss1>maxs1&&ww1<=10)
maxs1=ss1;
maxw1=ww1;
maxxb1=xb1;
maxk1=kk1;
maxi=i;
end
end
%k=2时:
maxw2=0;maxs2=0;
maxxb2=zeros(1,6);
maxk2=0;
xb2=zeros(1,6);
fori=1:
5
forj=i+1:
6
ys1=s(i);yw1=w(i);
ys2=s(j);yw2=w(j);
ss2=ys1+ys2;
ww2=yw1+yw2;
kk2=0;
fork=1:
6
if(k~=i&&k~=j)
if(ww2+w(k)>10)
continue;
else
kk2=kk2+1;
xb2(kk2)=k;
ww2=ww2+w(k);
ss2=ss2+s(k);
end
end
end
if(ss2>maxs2&&ww2<=10)
maxs2=ss2;
maxw2=ww2;
maxxb2=xb2;
maxk2=kk2;
end
end
end
A=[ww,maxw1,maxw2];
B=[kk,maxk1,maxk2];
C=[xb;maxxb1;maxxb2];
[maxs,dex]=max([ss,maxs1,maxs2]);
fprintf('')
fprintf('用A2算法所得到的本题的最优解如下:
\n');
fprintf('所选取装的价值和重量为:
\n');
fori=1:
B(dex)
fprintf('s(%d)=%d,w(%d)=%d\n',C(dex,i),s(C(dex,i)),C(dex,i),w(C(dex,i)));
end
fprintf('s(%d)=%d,w(%d)=%d\n',maxi,s(maxi),maxi,w(maxi));
fprintf('所装货物的总重量为:
%d\n所装货物的最大总价值为:
%d\n',A(dex),maxs);
第二次上机
2、求函数的最大值
调用:
yichuansuanfa2
结果:
函数的最大值为:
1.000000>>
程序如下:
clc
clear
%初始化,选取群体规模为50`
C=zeros(50,4,1);
fori=1:
50
forj=1:
4
ran=rand()*10-5;
C(i,j,1)=ran;
end
end
Best=0;
forkk=2:
200
%适应值评价,保存最优染色体
Eval=zeros(50,1);
fori=1:
50
Eval(i,1)=1/(C(i,1,kk-1)^2+C(i,2,kk-1)^2+C(i,3,kk-1)^2+C(i,4,kk-1)^2+1);
end
Best1=max(Eval);
%选择算子
E=0;
fori=1:
50%计算群体适应值总和
E=E+Eval(i,1);
end
Per=zeros(50,1);%分别计算每个染色体适应值同群体适应值总和的比
fori=1:
50
Per(i,1)=Eval(i,1)/E;
end
%选择
m=0;
forj=1:
50
r=rand();
p=Per(1,1);
fori=1:
50
ifr
fork=1:
4
C(j,k,kk)=C(i,k,kk-1);
end
else
p=p+Per(i,1);
end
end
end
%交配
c=0;
d=0;
fori=1:
50
r=rand();
ifr>=0.88%不参加交配,直接进入种群
c=c+1;
forj=1:
4
C(i-d,j,kk)=C(i,j,kk);
end
else%选出参加交配的染色体
d=d+1;
fork=1:
4
AA(i-c,k)=C(i,k,kk);
end
end
end
[m,n]=size(AA);%交配过程
mm=m/2;
ifmm==0
m=m;
else
m=m-1;
end
mmm=m/2;
fori=1:
mmm
r=rand()*3;
rr=fix((r/2))+1;
forj=rr:
4;
BB=AA(2*i-1,j);
AA(2*i-1,j)=AA(2*i,j);
AA(2*i,j)=BB;
end
end
fori=(51-d):
50%得到新的种群
forj=1:
4
C(i,j,kk)=AA(i-50+d,j);
end
end
%变异
fori=1:
50
forj=1:
4
r=rand();
ifr<0.08
C(i,j,kk)=rand()*10-5;
end
end
end
ifBest Best=Best1; end end fprintf('函数的最大值为: %f',Best); 第三次上机 3、求函数的最小值 调用yichuansuanfa3 结果: 请输入变量的个数: n=4函数的最小值为: 0.000000>> 程序如下: clc clear %初始化,选取群体规模为50` n=input('请输入变量的个数: n='); C=zeros(50,n,1); fori=1: 50 forj=1: n ran=rand()*200-100; C(i,j,1)=ran; end end Best=10000000; forkk=2: 5 %适应值评价,保存最优染色体 Eval=zeros(50,1); fori=1: 50 sum=0; forj=1: n sum=sum+(C(i,j,kk-1))^2; end Eval(i,1)=sum; end Best1=min(Eval); %选择算子 E=0; fori=1: 50%计算群体适应值总和 E=E+Eval(i,1); end Per=zeros(50,1);%分别计算每个染色体适应值同群体适应值总和的比 fori=1: 50 Per(i,1)=Eval(i,1)/E; end %选择 m=0; forj=1: 50 r=rand(); p=Per(1,1); fori=1: 50 ifr fork=1: n C(j,k,kk)=C(i,k,kk-1); end else p=p+Per(i,1); end end end %交配 c=0; d=0; fori=1: 50 r=rand(); ifr>=0.88%不参加交配,直接进入种群 c=c+1; forj=1: n C(i-d,j,kk)=C(i,j,kk); end else%选出参加交配的染色体 d=d+1; fork=1: n AA(i-c,k)=C(i,k,kk); end end end [m,n]=size(AA);%交配过程 mm=m/2; ifmm==0 m=m; else m=m-1; end mmm=m/2; fori=1: mmm r=rand()*(n-2); rr=fix((r))+1; forj=rr: n; BB=AA(2*i-1,j); AA(2*i-1,j)=AA(2*i,j); AA(2*i,j)=BB; end end fori=(51-d): 50%得到新的种群 forj=1: n C(i,j,kk)=AA(i-50+d,j); end end %变异 fori=1: 50 forj=1: n r=rand(); ifr<0.08 C(i,j,kk)=rand()*200-100; end end end ifBest>Best1 Best=Best1; end end fprintf('函数的最小值为: %f',Best); 第四次上机 4、求函数的最小值 调用yichuansuanfa4 结果: 函数的最小值为: -1.000000>> 程序如下: clc clear %初始化,选取群体规模为50` C=zeros(50,2,1); fori=1: 50 forj=1: 2 ran=rand()*200-100; C(i,j,1)=ran; end end Best=100; forkk=2: 500 %适应值评价,保存最优染色体 Eval=zeros(50,1); fori=1: 50 ttt=C(i,1,kk-1)^2+C(i,2,kk-1)^2; mmm=sqrt(ttt); sss=sin(mmm)^2-0.5; ppp=(1+0.001*ttt)^2; Eval(i,1)=(sss/ppp)-0.5; end Best1=min(Eval); %选择算子 E=0; fori=1: 50%计算群体适应值总和 E=E+Eval(i,1); end Per=zeros(50,1);%分别计算每个染色体适应值同群体适应值总和的比 fori=1: 50 Per(i,1)=Eval(i,1)/E; end %选择 m=0; forj=1: 50 r=rand(); p=Per(1,1); fori=1: 50 ifr fork=1: 2 C(j,k,kk)=C(i,k,kk-1); end else p=p+Per(i,1); end end end %交配 c=0; d=0; fori=1: 50 r=rand(); ifr>=0.88%不参加交配,直接进入种群 c=c+1; forj=1: 2 C(i-d,j,kk)=C(i,j,kk); end else%选出参加交配的染色体 d=d+1; fork=1: 2 AA(i-c,k)=C(i,k,kk); end end end [m,n]=size(AA);%交配过程 mm=m/2; ifmm==0 m=m; else m=m-1; end mmm=m/2; fori=1: mmm rr=1; forj=rr: 2; BB=AA(2*i-1,j); AA(2*i-1,j)=AA(2*i,j); AA(2*i,j)=BB; end end fori=(51-d): 50%得到新的种群 forj=1: 2 C(i,j,kk)=AA(i-50+d,j); end end %变异 fori=1: 50 forj=1: 2 r=rand(); ifr<0.08 C(i,j,kk)=rand()*200-100; end end end ifBest>Best1 Best=Best1; end end fprintf('函数的最小值为: %f',Best);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 A2 实例