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];