Hiện tại em có 2 file này
1. file hàm testfun3
2. file hàm thuật toán sẽ gọi hàm testfun3
Hiện đang bị lỗi Matrix dimension must agree : em biết đó là lỗi do kích thước ma trận khác nhau nên ko nhân dc, nhưng mà em chưa sửa dc.
bác nào rành thì sửa em với
em đang cần gấp, em xin cảm ơn và sẽ có hậu tạ
1. file hàm testfun3
Code:
%Ham muc tieu AF function sll=testfun3(chrom) global funcount [nr,nc]= size(chrom); funcount=funcount+nr; % keeps counting number of function calls k=2*pi; % wavenumber d=0.5; % element spacing N=2*nc; % number of elements in array x=(0:(N-1))*d; % element spacing u=0:2/10/N:1; % u=cos(phi) Q=exp(1i*k*x*u); % phase for ic=1:nr w=[fliplr(chrom(ic,:)) chrom(ic,:)]; % amplitude weights af=20*log10(abs(w*Q)); % array factor in dB af=af-max(af); % normalize array factor saf=sort(a,'descend'); ind=find(saf>af, 1 ); sll(ic,1)=saf(ind(1)); % max sidelobe level end
2. file hàm thuật toán sẽ gọi hàm testfun3
Code:
% Thuat toan GA clear all global funcount funcount =0; % Dinh nghia gia tri cua ham ( Cost function) nvar =10; % so luong bien la 10 ff='testfun3'; %Cac thong so cua thuat toan GA npop=8; % so luong phan tu la 8 mutrate =0.15; % ty le dot bien la 0.15 natsel=npop/2; M=npop-natsel; el=1; % Phan tram nhiem sac the khong dot bien Nmut=ceil(mutrate*((npop-el)*nvar)); parents=1:natsel; prob=parents/sum(parents); odds=[0 cumsum(prob)]; Nodds=length(odds); %kiem tra dieu kien dung maxgen=500; % the he lon nhat maxfun =2000; % So lan goi ham ( function Call) mincost = -50; % chi phi chap nhan duoc %Khoi tao 1 quan the P=rand(npop,nvar); %gia tri cua ham %cost=feval(ff,P); cost= feval(ff,P); [cost ind]=sort(cost); P=P(ind,(1:natsel),:); cost= cost(1:natsel); minc(1)=min(cost); % Gia tri tot nhat cho moi the he for gen=1:maxgen %Chon loc tu nhien for ic=1:2:M r=rand;ma=find(odds<r, 1, 'last' ); r=rand;pa=find(odds<r, 1, 'last' ); xp= ceil(rand*nvar); r=rand; xy=P(ma,xp)-P(pa,xp); mask1=[ones(1,xp) zeros(1,nvar-xp)]; mask2=not(mask1); P(natsel+ic,:)= mask1.*P(ma,:)+mask2.*P(pa,:); P(natsel+ic+1,:)= mask2.*P(ma,:)+mask1.*P(pa,:); P(natsel+ic,xp)=P(natsel+ic,xp)-r.*xy; P(natsel+ic+1,xp)=P(natsel+ic+1,xp)+r.*xy; end elP=P(el+1:npop,:); elP(ceil((npop-el)*nvar*rand(1,Nmut))) = rand(1,Nmut); P(el+1:npop,:)=elP; cost=feval(ff,P); [cost ind] = sort(cost); P=P(ind(1:natsel),:); cost=cost(1:natsel); minc(gen+1)=cost(1); [gen cost(1)]; if funcount>maxfun || gen>maxgen || minc(gen+1)<mincost break end end % Kiem tra dieu kien hoi tu %Ket qua hien tai day=clock; disp(datestr(datenum(day(1),day(2),day(3),day(4),day(5),day(6)),0)) disp(['optimized function is ' ff]) format short g disp(['# par = ' num2str(nvar) ]) disp(['min cost = ' num2str(mincost)]) disp(['best chromosome = ' num2str(P(1,:))]) figure(1) plot(0:gen,minc) xlabel('generation'); ylabel('cost');
Hiện đang bị lỗi Matrix dimension must agree : em biết đó là lỗi do kích thước ma trận khác nhau nên ko nhân dc, nhưng mà em chưa sửa dc.
bác nào rành thì sửa em với
em đang cần gấp, em xin cảm ơn và sẽ có hậu tạ
Comment