多目标烟花算法原理和解析

上文介绍了烟花算法的基本代码解析,至于基本的烟花算法在CSDN里面有不少大佬介绍过,我就对这一部分内容进行更一层次的介绍。

    但是大多都是对单目标进行讲解,今天对多目标烟花算法进行一个介绍。

多目标烟花算法和其他的多目标算法本质相同,可以通过两种方式达到多目标优化的目的。

一种是采用多目标转单目标的形式,将多个目标进行权重分配构成一个单目标,然后再用单目标烟花算法去求解模型。

二是采用帕勒托计算方式的方法去求解多目标优化问题。

本文主要针对第二种方式进行介绍。

求解帕勒托前沿的方式方法在CSDN和期刊文献上有不少的介绍,感兴趣可以去查找相关资料。

多目标烟花算法由同样是以爆炸算子变异算子选择策略组成

爆炸算子:

 其中AM为常数,调整爆炸半径和火花数目

变异算子:

 e为方差为1、均值为1的高斯分布

选择策略:使烟花种群中优秀的信息能够传递到下一代种群中,烟花被选择的概率如下

 以上所有的公式可以根据自己案例的需求进行改进,本文就不深入介绍了。

注意:在多目标烟花算法中,与单目标的不同点在于输出变量,单目标输出变量上为一个常数,而多目标在输出参数上为一个矩阵。

如何求解通过多目标求解最优?

在多目标烟花算法中,前期和正常的烟花算法一样,需要进行爆炸和变异,其中本文所采用的爆炸方式为增强烟花算法的坐标轴爆炸方式:

 作者认为该种烟花爆炸方式虽然有缺点但是更适合多目标烟花算法,详细的参考文章可在知网上搜寻增强烟花算法论文和期刊。

在寻优过程中,不可缺少的是帕勒托支配法,通过比较支配强度找出烟花算法的帕勒托前沿。

相关流程图如下:

 相关的帕勒托支配算法如下:

function [RANK] = FastNonDominatedSorting_Vectorized(fitness)%重点
    % Initialization初始化
    Np = size(fitness,1);
    RANK = zeros(Np,1);
    current_vector = [1:1:Np]';
    current_pf = 1;
    all_perm = [repmat([1:1:Np]',Np',1), reshape(repmat([1:1:Np],Np,1),Np^2,1)];%所有种群两两组合 
    all_perm(all_perm(:,1)==all_perm(:,2),:) = [];%若有自己与自己重复的则删除
    
    % Computing each Pareto Front
    while ~isempty(current_vector)%判断(矩阵)是否为空 如果为非空,返回1,空返回0,不加取反符号 返回值相反
        
        % Check if there is only a single particle
        if length(current_vector) == 1
            RANK(current_vector) = current_pf;
            break;
        end
        
        % Non-dominated particles
            % Note: nchoosek has an exponential grow in computation time, so
            % it's better to take all the combinations including repetitions using a
            % loops (quasi-linear grow) or repmats (linear grow)
            %all_perm = nchoosek(current_vector,2);   
            %all_perm = [all_perm; [all_perm(:,2) all_perm(:,1)]];     
        d = dominates(fitness(all_perm(:,1),:),fitness(all_perm(:,2),:));%判断哪些是非支配者
        dominated_particles = unique(all_perm(d==1,2));%去掉相同的

        % Check if there is no room for more Pareto Fronts
        % 判断是否所有解都被分配层级帕勒托前沿
        if sum(~ismember(current_vector,dominated_particles)) == 0
            break;
        end

        % Update ranks and current_vector
        non_dom_idx = ~ismember(current_vector,dominated_particles);
        RANK(current_vector(non_dom_idx)) = current_pf;
        all_perm(ismember(all_perm(:,1),current_vector(non_dom_idx)),:) = [];
        all_perm(ismember(all_perm(:,2),current_vector(non_dom_idx)),:) = [];
        current_vector(non_dom_idx) = [];
        current_pf = current_pf + 1;
    end
end
function d =dominates(x,y)
  d = all(x <= y ,2 )& any(x < y , 2);%支配关系表达式,至少有一个y要比x好且所有的y都不能比x差,被支配者为1
end

本文将以IEEE118节点为例进行仿真验证。

 IEEE118系统是由54台发电机、118个节点和186条支路组成。其中包含15处节点补偿点和9处变压器调节支路。以69节点作为平衡点和基准电压点,进行无功优化。

实验以牛顿拉夫逊潮流分析为基础,在满足系统和发电机约束条件下,获取最优控制方案。

由于控制变量过多,本文只选择30个变量进行优化。

优化目标函数:有功网络损耗、节点电压偏差

编程与单目标类似由于文件过多,就不过多展示。

 

 优化结果和多目标遗传与多目标粒子群做对比:

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流云挽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值