⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 遗传算法.m

📁 遗传算法的matlab源程序
💻 M
字号:
%%%%%%此程序完成上机练习7.2节的题2(采用基本遗传算法)%%%%%
clear all;clc
%%%%%%%%%%%初始化参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
w = [0 5 -3 4 4 1;5 0 -1 2 -3 1;-3 -1 0 2 -3 1;
     4 2 2 0 3 -3;4 -3 2 3 0 5;1 1 0 -3 5 0];
N = 10;
Pc = 0.9; % 初始化交叉概率
Pm = 0.05; % 初始化变异概率
n = 1; % 初始化迭代次数
%%%%%%%%%%%%%%%%%% 随机初始化种群,个数为N(=10)个 %%%%%%%%%%%%%%%%%
for k = 1:6
    for j = 1:N
        if rand(1,1) > 0.5
            s(j,k) = 1;
        else
            s(j,k) = -1;
        end
    end
end
%%%%%%%%%%%%%%%%%%%%%%%% 计算适应度值 %%%%%%%%%%%%%%%%%%%%%
while n < 200
    E = zeros(2,N);
    for i = 1:N
        for j = 1:6
            for k = 1:6
                E(1,i) = E(1,i) + (-1/2)*w(j,k)*s(i,j)*s(i,k);
            end
        end
        E(2,i) = i;
    end
    %%%%%%%%%%%%%%%%%%%%% 染色体从大到小排序 %%%%%%%%%%%%%%%%%%%%%%%
    for i = 1 : N-1
        for j = i+1 : N
            if E(1,i) <= E(1,j)
                t = E(:,i);
                E(:,i) = E(:,j);
                E(:,j) = t;
            end
        end
    end
    s1 = s(E(2,N-1),:); %%%%%选择得分最高的两个染色体
    s2 = s(E(2,N),:);
    if 0.9999*rand(1,1) < Pc 
        p1 = round(5*rand(1,1) + 1); %%%%%%%交叉位
        t = s1(p1:end);
        s1(p1:end) = s2(p1:end);
        s2(p1:end) = t;
    else
        for i = 1:6
            if 0.9999*rand(1,1) < Pm
                s1(i) = ~s1(i);
                s2(i) = ~s2(i);
            end
        end
    end
    s(E(2,1),:) = s1;
    s(E(2,2),:) = s2;
    if E(1,N) < -50
        break;
    else
        n = n + 1;
    end
end
s(E(2,N),:)
%-----------END-----------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -