混合遗传粒子群优化算法(MATLAB代码分享)

function HGPSO()
    clc;
    clear;
    close all;

    % 参数设置
    popsize = 20;    % 群体大小
    chromlength = 20; % 个体长度(染色体长度)
    pc = 0.6;       % 交叉概率
    pm = 0.1;       % 变异概率
    xlim = [0, 50]; % 定义搜索空间中xlim的范围
    G = 100;        % 最大迭代次数
    w = 0.8;        % 惯性权重
    c1 = 0.5;       % 自我学习因子
    c2 = 0.5;       % 群体学习因子
    vlimit = [-10, 10]; % 速度限制

    % 初始化种群和速度
    pop = round(rand(popsize, chromlength)); % 随机产生初始群体
    decpop = bintodec(pop, popsize, chromlength, xlim); % 初始群体的十进制值
    fx = calobjvalue(decpop); % 初始群体的目标函数值
    v = rand(popsize, chromlength) * (vlimit(2) - vlimit(1)) + vlimit(1); % 初始速度,限制在速度范围内
    xm = pop; % 每个个体的历史最佳位置
    ym = pop(1, :); % 种群的历史最佳位置
    fxm = fx; % 每个个体的历史最佳适应度
    fym = fx(1); % 种群的历史最佳适应度

    % 适应度记录
    ga_fitness_history = zeros(1, G); % 遗传算法适应度历史
    pso_fitness_history = zeros(1, G); % 粒子群算法适应度历史

    % 迭代过程
    for iter = 1:G
        % PSO部分:更新速度和位置
        for i = 1:popsize
            if fx(i) < fxm(i)
                fxm(i) = fx(i);
                xm(i, :) = pop(i, :);
            end
        end
        [fym, nmin] = min(fxm);
        ym = xm(nmin, :);

        for i = 1:popsize
            v(i, :) = w * v(i, :) + c1 * rand * (xm(i, :) - pop(i, :)) + c2 * rand * (ym - pop(i, :));
            v(i, v(i, :) > vlimit(2)) = vlimit(2);
            v(i, v(i, :) < vlimit(1)) = vlimit(1);
            pop(i, :) = round(pop(i, :) + v(i, :));
            pop(i, pop(i, :) > 1) = 1;
            pop(i, pop(i, :) < 0) = 0;
        end

        % GA部分:交叉和变异
        pop = crossover(pop, pc, popsize, chromlength);
        pop = mutation(pop, pm, popsize, chromlength);

        % 计算适应度
        decpop = bintodec(pop, popsize, chromlength, xlim);
        fx = calobjvalue(decpop);

        % 记录适应度
        ga_fitness_history(iter) = mean(fx); % 记录遗传算法适应度;计算当前种群中所有个体适应度值的平均值。
        pso_fitness_history(iter) = fym; % 记录粒子群算法适应度

        % 绘制图像
        plotfig(decpop, fx, xlim, iter, ga_fitness_history, pso_fitness_history);
    end

    disp(['找到的最优解位置为:', num2str(decpop(nmin))]);
    disp(['对应最优解为:', num2str(fym)]);
end

% 交叉操作
function newpop = crossover(pop, pc, popsize, chromlength)
    newpop = pop;
    for i = 1:2:popsize-1
        if rand < pc
            point = randi([1, chromlength-1]);
            newpop(i, point:end) = pop(i+1, point:end);
            newpop(i+1, point:end) = pop(i, point:end);
        end
    end
end

% 变异操作
function newpop = mutation(pop, pm, popsize, chromlength)
    newpop = pop;
    for i = 1:popsize
        if rand < pm
            point = randi([1, chromlength]);
            newpop(i, point) = 1 - newpop(i, point);
        end
    end
end

% 二进制转十进制
function dec = bintodec(pop, popsize, chromlength, xlim)
    dec = zeros(1, popsize);
    for i = 1:popsize
        bin_str = num2str(pop(i, :));
        dec(i) = bin2dec(bin_str);
    end
    dec = xlim(1) + dec * (xlim(2) - xlim(1)) / (2^chromlength - 1);
end

% 计算目标函数值
function fx = calobjvalue(decpop)
    f = @(x) x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x) + 3 * x .* sin(4 * x);
    fx = f(decpop);
end

% 绘制图像
function plotfig(decpop, fx, xlim, iter, ga_fitness_history, pso_fitness_history)
    f = @(x) x .* sin(x) .* cos(2 * x) - 2 * x .* sin(3 * x) + 3 * x .* sin(4 * x);
    x = xlim(1):0.05:xlim(2);
    y = f(x);

    subplot(1, 2, 1);
    plot(x, y, decpop, fx, 'ro');
    title(['第', num2str(iter), '次迭代进化']);

    subplot(1, 2, 2);
    plot(1:iter, ga_fitness_history(1:iter), 'b', 1:iter, pso_fitness_history(1:iter), 'r');
    legend('GA适应度', 'PSO适应度');
    title('适应度进化曲线');
    drawnow;
end

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
混合粒子群遗传算法(Hybrid Particle Swarm Optimization and Genetic Algorithm,简称HPSOGA)是一种优化算法,结合了粒子群优化算法(PSO)和遗传算法(GA)的优点。在MATLAB,可以使用以下步骤进行HPSOGA算法的实现。 1. 首先,初始化粒子群和染色体群。粒子群的每个粒子表示一个目标解,染色体群的每个染色体表示一个解向量。 2. 使用PSO算法更新粒子群每个粒子的速度和位置。速度的更新受到粒子自身历史最优解和整个粒子群历史最优解的影响。 3. 使用GA算法对染色体群进行选择、交叉和变异操作。选择操作基于适应度值,高适应度的染色体有更高的概率参与后续操作。交叉操作通过随机选择两个染色体,并通过交换部分基因来产生新的染色体。变异操作通过随机选择染色体的一个基因,并将其值进行随机变换。 4. 将GA算法生成的新一代染色体群与PSO算法生成的新一代粒子群进行比较,选择其适应度值更好的解作为下一代的解。 5. 重复步骤2至4,直到达到停止条件(如达到最大迭代次数或目标函数值满足要求)。 在MATLAB,可以使用相关的函数和语句实现上述步骤。例如,可以使用MATLAB的优化工具箱的粒子群优化函数(如"pso"函数)来实现PSO算法,并使用遗传算法工具箱的遗传算法函数(如"ga"函数)来实现GA算法。通过使用循环结构和条件语句,可以在MATLAB编写一个完整的HPSOGA算法代码。 使用HPSOGA算法可以提高优化问题的求解效率和精度,同时克服PSO算法和GA算法各自的缺点。通过合理选择算法参数和优化问题的适应度函数,可以实现对不同类型的问题进行求解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值