Contents
tic
A genetikus algoritmus paraméterei
keresztezesval=1; mutacioval=0.02; generaciokszama=200; populaciomeret=200; tournamentmeret=10;
A megtalált legjobb futás mentéséhez
legnagyobb=0; legjobbszotarosszes=[]; legjobbfutaspopsszes=[]; legjobbfutasmfosszes=[]; legjobbfutasafosszes=[];
bitekszama=8; B=bitRendezo(bitekszama); probalkozasokszama=10; for pr=1:probalkozasokszama [populacio,maximumfitnesz,atlagfitnesz]=ham10bit(bitekszama,keresztezesval,mutacioval,... generaciokszama,populaciomeret,tournamentmeret); % Az utolsó állapot elit egyedének kiértékelése h=hibaSzamolo(populacio,bitekszama); if sum(populacio(1,:)) - h(1) > 0 % Nem feltételen hibátlan, de javítható % mert a szavak száma nagyobb, mint az ütközések száma legjobbszotar=B(logical(populacio(1,:)),:); % Szótár javító az ütközések kiszedéséhez hibalista=[]; for i=1:size(legjobbszotar,1) for j=i+1:size(legjobbszotar,1) if sum(legjobbszotar(i,:)~=legjobbszotar(j,:))<3 hibalista=[hibalista;i,j]; end end end tobbszoroshiba=[]; for i=1:size(hibalista,1) for j=1:size(hibalista,1) if hibalista(i,1)==hibalista(j,2) tobbszoroshiba=[tobbszoroshiba, hibalista(i,1)]; end end end egyszereshiba=[]; for i=1:size(hibalista,1) if sum(egyszereshiba==hibalista(i,1))==0 && sum(tobbszoroshiba==hibalista(i,1))==0 && sum(tobbszoroshiba==hibalista(i,2))==0 egyszereshiba=[egyszereshiba, hibalista(i,1)]; end end osszesutkozes=sort([egyszereshiba, tobbszoroshiba]); joindexek=[]; for i=1:size(legjobbszotar,1) if sum(osszesutkozes==i)==0 joindexek=[joindexek, i]; end end legjobbszotar=legjobbszotar(joindexek,:); % itt van kész a javított változat else legjobbszotar=[]; % ha nem javítható az elit egyed end legjobb=size(legjobbszotar,1); % a javított egyed szótárának mérete % Ha mentésre érdemes az összes futás közül if legjobb>legnagyobb legnagyobb=legjobb; legjobbszotarosszes=legjobbszotar; legjobbfutaspopsszes=populacio; legjobbfutasmfosszes=maximumfitnesz; legjobbfutasafosszes=atlagfitnesz; end end toc fprintf('A 8 hosszú kódokon a legnagyobb megtalált részhalmaz mérete: %d\n',legnagyobb); fprintf("A szótár elemei:\n") legjobbszotarosszes
Elapsed time is 404.606660 seconds. A 8 hosszú kódokon a legnagyobb megtalált részhalmaz mérete: 16 A szótár elemei: legjobbszotarosszes = 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 1 1 0 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 0 0 0 1 0 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 0
Ábra
hold on plot(legjobbfutasmfosszes) plot(legjobbfutasafosszes) hold off

7 bites kódon megtalált szótár
B2=[0 0 0 0 0 1 0; 0 0 0 1 0 0 1; 0 0 1 0 1 0 0; 0 0 1 1 1 1 1; 0 1 0 0 1 0 1; 0 1 0 1 1 1 0; 0 1 1 0 0 1 1; 0 1 1 1 0 0 0; 1 0 0 0 1 1 1; 1 0 0 1 1 0 0; 1 0 1 0 0 0 1; 1 0 1 1 0 1 0; 1 1 0 0 0 0 0; 1 1 0 1 0 1 1; 1 1 1 0 1 1 0; 1 1 1 1 1 0 1];