📄 chap10_3a.m
字号:
clear allclose all%遗传算法优化程序,和粒子群算法优化结果做对比%G为进化代数,Size为种群规模,CodeL为参数的二进制编码长度G = 120;Size = 30;CodeL = 10;%确定每个参数的最大最小值for i = 1:3 MinX(i) = 0.1*ones(1); MaxX(i) = 3*ones(1);endfor i = 4:1:9 MinX(i) = -3*ones(1); MaxX(i) = 3*ones(1);endfor i = 10:1:12 MinX(i) = -ones(1); MaxX(i) = ones(1);endE = round(rand(Size,12*CodeL));BsJ = 0;for kg = 1:1:G time(kg) = kg for s = 1:1:Size m = E(s,:); %把二进制表示的参数转化为实数 for j = 1:1:12 y(j) = 0; mj = m((j-1)*CodeL + 1:1:j*CodeL); for i = 1:1:CodeL y(j) = y(j) + mj(i)*2^(i - 1); end f(s,j) = (MaxX(j) - MinX(j))*y(j)/1023 + MinX(j); end p = f(s,:); [p,BsJ] = chap10_3b(p,BsJ); BsJi(s) = BsJ; end [OderJi,IndexJi] = sort(BsJi); BestJ(kg) = OderJi(1); BJ = BestJ(kg); Ji = BsJi + 1e-10; fi = 1./Ji; [Oderfi,Indexfi] = sort(fi); Bestfi = Oderfi(Size); BestS = E(Indexfi(Size),:); kg p Bj%**************Step 2:选择操作**********************% fi_sum = sum(fi); fi_Size = (Oderfi/fi_sum)*Size; fi_S = floor(fi_Size); kk = 1; for i = 1:1:Size for j = 1:1:fi_S(i) TempE(kk,:) = E(Indexfi(i),:); kk = kk + 1; end end %***************Step 3:交叉操作***********************************% pc = 0.60; n = ceil(20*rand); for i = 1:2:(Size-1) temp = rand; if pc>temp for j = 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; %***************Step 4:变异操作**********************************% pm = 0.001 - [1:1:Size]*(0.001)/Size; for i = 1:1:Size for j = 1:1:12*CodeL temp = rand; if pm>temp if TempE(i,j) == 0 TempE(i,j) = 1; else TempE(i,j) = 0; end end end end TempE(Size,:) = BestS; E = TempE; endBestfiBestSfi Best_J = BestJ(G)figure(1)plot(time,BestJ);xlabel('Times');ylabel('BestJ');save pfile p;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -