精华内容
下载资源
问答
  • 内含DTLZ系列函数(DTLZ1-7)的2、3、4、6、8、10、20维真实pareto前沿数据
  • 将多目标进化算法收敛到Pareto前沿的均匀分布表示
  • 二维散点数据的pareto前沿绘制

    千次阅读 2020-01-07 22:36:28
    二维散点图的pareto前沿绘制 最近使用了matlab的gamultiobj函数进行多目标优化,中断程序后发现利用所有代数的Score结果来绘制pareto前沿是件令人头疼的事情。 而gamultiobj函数中绘制pareto前沿的函数又无法直接...

    二维散点图的pareto前沿绘制

    最近使用了matlab的gamultiobj函数进行多目标优化,中断程序后发现利用所有代数的Score结果来绘制pareto前沿是件令人头疼的事情。
    而gamultiobj函数中绘制pareto前沿的函数又无法直接调用(gamultiobj函数源代码太复杂了,绘图的具体索引是:gamultiobj—>optimotions—>gamultiobjsolve—>gadsplot—>gaplotpareto,在利用gaplotpareto函数完成绘图时,数据已经由前面的其他步骤处理完成)。

    因此想了一个投机取巧的办法来达到目的,那就是将n行2列的散点数据data直接作为gamultiobj优化算法初代的Scores,且让程序只有初代就结束。

    具体代码如下(简化版):

    data=rand([500,2]);%二维散点数据
    s=size(data);
    %利用gamultiobj多目标优化算法内置的绘图函数来提取pareto前沿数据
    options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto,'PopulationSize',s(1),'InitialScores',data,'Generations',1);
    [x,fval,exitflag,output,population,scores] = gamultiobj(@(x) x,2,[],[],[],[],[],[],options);
    %fval即为pareto前沿数据
    

    详细版:

    clear;clc;
    %rng('default'); %使rand函数每次运行都输出相同结果
    
    %创建第三象限的单位圆数据data
    data=rand([500,2]);
    s=size(data);
    for i=1:s(1)
        if (data(i,1)^2+data(i,2)^2)>1
    data(i,:)=[0 0];
        end
    end
    data=-data;
    %plot(data(:,1),data(:,2),'.')%观察原始数据分布
    
    %利用gamultiobj多目标优化算法内置的绘图函数来提取pareto前沿数据
    options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto,'PopulationSize',s(1),'InitialScores',data,'Generations',1);
    [x,fval,exitflag,output,population,scores] = gamultiobj(@(x) x,2,[],[],[],[],[],[],options);
    %fval即为pareto前沿数据
    
    %利用fval数据重新绘制图形灵活度更高
    clf;
    plot(fval(:,1),fval(:,2),'rp','MarkerSize',9)
    axis([-1,-0,-1,0])
    set(gca,'XTick',-1:0.1:0,'YTick',-1:0.1:0)
    xlabel('x');ylabel('y')
    title('Patero Front')
    set(gca,'Fontname','times new Roman','FontSize',12);
    grid on
    
    %将pareto前沿与原始数据绘制在同一张图上
    hold on
    plot(data(:,1),data(:,2),'k.')
    

    最终效果如下:
    在这里插入图片描述

    展开全文
  • 多目标优化-测试问题及其Pareto前沿

    万次阅读 多人点赞 2017-11-27 14:56:22
    多目标优化-测试问题及其Pareto前沿 3. 多目标进化算法详述-MOEA/D与NSGA2优劣比较 4. 多目标进化算法-约束问题的处理方法 在很多工程问题中都会涉及需要对多个目标同时进行优化的问题,且这些目标间...

    多目标进化算法系列

    1. 多目标进化算法(MOEA)概述
    2. 多目标优化-测试问题及其Pareto前沿
    3. 多目标进化算法详述-MOEA/D与NSGA2优劣比较
    4. 多目标进化算法-约束问题的处理方法
    5. 基于C#的多目标进化算法平台MOEAPlat实现
    6. MOEAD中聚合函数等高线分析
    7. MOEAD中一种使解更均匀分布的聚合函数介绍

    在很多工程问题中都会涉及需要对多个目标同时进行优化的问题,且这些目标间是相互互斥的,也即一个目标的增大往往至少存在一个其他的目标减小,以下举一个简单的例子说明:

    min{f1(x)=xf2(x)=1−xs.t.    x∈[0,1]         \begin{matrix} min \begin{cases} f_1(x)=x\\ f_2(x)=1-x \end{cases} \\ s.t.\;\;x \in [0,1]\qquad\;\;\;\;\\ \end{matrix} min{f1(x)=xf2(x)=1xs.t.x[0,1]

    为了简便起见,对于xxx例举了如下几个值:

    xxx f1(x)f_1(x)f1(x) f2(x)f_2(x)f2(x)
    0 0 1
    0.2 0.2 0.8
    0.4 0.4 0.6
    0.6 0.6 0.4
    0.8 0.8 0.2
    1 1 0

    显然从该表中我们不能找到一个解是全局最优的的,因为若f1(x)f_1(x)f1(x)小,那么f2(x)f_2(x)f2(x)又变大,因此没有一个解使得f1(x)f_1(x)f1(x)f2(x)f_2(x)f2(x)同时最小成立。因此,表格中列出的xxx的值都是该问题的最优解。也就是说,对于有多个目标的优化问题,不能得到单一的解使得全局最优,而是一个解集,称之为Pareto Set(PS),其对应的目标值的集合则称之为Pareto Front(PF)。Pareto Set(PS)和Pareto Front(PF)的具体定义可参考 我之前的文章 。此类问题就称之为多目标优化问题,其一般表达形式为:

    min  F(x)=(f1(x),...,fm(x))s.t.  x∈Ω    \begin{matrix} min\;F(x)=(f_1(x),...,f_m(x))\\ s.t.\;x\in \Omega\qquad\qquad\qquad\qquad\;\;\\ \end{matrix}minF(x)=(f1(x),...,fm(x))s.t.xΩ

    mmm为需要同时优化的目标个数。有时,对于某一个目标函数,我们需要最大化该目标,只需要将该目标简单的转换为最小化该目标即可。

    对于上面所提的多目标优化问题,很容易观察到,由于其自变量xxx只有一个维度,因此任意一个xxx都是最优解。但当xxx在多个维度取值时,最优解往往只出现在很少的区域,这就需要我们求解该类问题的算法有很强的搜索能力。目前来说,单纯的数学方法不能很好的处理该类问题,而进化算法却能取得较好的结果。所谓进化算法是一种模拟生物进化的过程的算法,典型的算法有遗传算法(GA),粒子群算法(PSO),蚁群算法(ACO)等。基于进化算法求解多目标优化问题的方法我在这篇文章中已经有较为详细的描述。

    这篇文章主要介绍下一些常见的多目标优化问题测试函数以及Pareto Front(PF)。
    ZDT系列
    Comparison of multiobjective evolutionary algorithms: Empirical results
    DTLZ系列
    可参考Scalable Multi-Objective Optimization Test Problems
    WFG系列
    可参考A Review of Multiobjective Test Problems and a Scalable Test Problem Toolkit
    MOP系列
    出自Decomposition of a Multiobjective Optimization Problem into a Number of Simple Multiobjective Subproblems
    UF系列
    出自Multiobjective optimization Test Instances for the CEC 2009 Special Session and Competition
    以上都是比较经典的测试问题,一般的论文中都会使用上述的测试函数。同时,有些不是很常见的多目标问题也会出现在文献中,如对于有long tail和sharp peak的测试问题,如F1- F6, mF4,出自An Improved Multiobjective Optimization Evolutionary Algorithm Based on Decomposition for Complex Pareto Fronts,另外,对于此类问题以及前沿不连续的多目标优化问题,本人有一篇文章做了一点点工作,A modified PBI approach for multi-objective optimization with complex Pareto fronts

    QQ交流群:399652146

    展开全文
  • 基于遗传算法求解多目标优化问题Pareto前沿
  • DTLZ1、DTLZ2、DTLZ3、DTLZ4、DTLZ5、DTLZ6、DTLZ7 3目标测试函数的真实Pareto前沿
  • 这是DEA-GNG的代码,该代码在``刘一平,石久久久,直树正山和野岛雄介,通过增长神经气体来处理不规则的Pareto前沿来适应参考向量和标量函数'',IEEE进化计算学报,2020年,第24页( 3),第439-453页,“。 这些...
  • 画出来的Pareto点是这样的: 而我自己,通过 plt.plot(NDSet.ObjV[:, 0], NDSet.ObjV[:, 1], 'ro') 画出来的点是这样的: <p><img alt="1586944923(1)" src=...
  •  //遍历EP,求2个算法的pareto 前沿  algSets[a].push_back(EP);  }  total_best.clear();  for (int a = 0; a ; a++) {  for (int j = 0; j [a][i].size(); j++) {  update_best(algSets[a][i][j]); ...

    #include<stdio.h>
    #include <fstream>
    #include<iostream>
    #include <algorithm>
    #include<string>
    #include<direct.h>
    #include<vector>
    #define INSTANCE_NUM 7
    #define RUN_TIMES 10
    #define ALG_NUM 2
    #define OBJ_NUM 2
    #define eps 1e-8
    using namespace std;

    struct Chromosome {                        //解
        double f[OBJ_NUM];                        //5个目标值,f[0]:车辆数目,f[1]:总行驶距离;f[2]:长路径行驶时间;f[3]:总等待时间;f[4]:总延迟时间
        double unit_f[OBJ_NUM];                //均衡化的5个目标
        double min_dis;

    };


    int indi_num;
    vector<Chromosome> EP;
    vector<Chromosome> total_best;
    vector<vector<Chromosome>> algSets[ALG_NUM];

    bool is_dominate(Chromosome & s1, Chromosome & s2) {
        if ((int)(s1.f[0] / 100000) < (int)(s2.f[0] / 100000)) {
            return true;
        }
        if ((int)(s1.f[0] / 100000) > (int)(s2.f[0] / 100000)) {
            return false;
        }

        if (s1.f[1] > s2.f[1] + eps || s1.f[0] > s2.f[0] + eps) {
            return false;
        }
        return (s1.f[1] + eps < s2.f[1] || s1.f[0] + eps < s2.f[0]);
    }

    bool is_the_same(Chromosome & s1, Chromosome & s2) {
        return (fabs(s1.f[1] - s2.f[1]) < eps && fabs(s1.f[0] - s2.f[0]) < eps);
    }

    void update_EP(Chromosome &indi) {
        //检查是否被存档内的其他解占优
        int size = EP.size(), i = 0;
        while (i < size)
        {
            if (is_dominate(EP[i], indi) || is_the_same(EP[i], indi))
                return;
            if (is_dominate(indi, EP[i])) {
                EP[i] = EP.back();
                EP.pop_back();
                --size;
            }
            else
                i++;
        }//s不被存档中的元素占优,将它加入存档__archive

         //将节点加入存档
        EP.push_back(indi);
    }

    void get_pareto_front(string path) {
        string name;
        for (int j = 0; j < RUN_TIMES; j++) {
            name = path + "_run_0" + char(j + '0') + "_obj.txt";
            fstream r_result(name, ios::in);
            r_result >> indi_num;
            for (int i = 0; i < indi_num; i++) {
                Chromosome chrom;
                for (int j = 0; j < OBJ_NUM; j++)
                    r_result >> chrom.f[j];
                update_EP(chrom);
            }
            r_result.close();
        }
    }

    bool is_better(Chromosome &chrome_1, Chromosome &chrome_2) {

        bool better = false;
        for (int i = 0; i < OBJ_NUM; ++i) {
            if (chrome_2.f[i] - chrome_1.f[i] >= 0.000001)
                better = true;
            if (chrome_1.f[i] - chrome_2.f[i] > 0.000001)
                return false;    //只要chrome_1的关联矩阵有一个方向比旧解大,chrome_1是坏的,chrome_2有可取之处,返回false
        }//chrome_2的关联矩阵的值都大于chrome_1,better = true,chrome_1是好的,chrome_2是坏的
        return better;
    }

    /*判断存档中的解与新解是否相等
    chrome_1:存档中的解;
    chrome_2:新解
    只要两个解的某一方向的值大于0.00001,两个解就不相等。返回false
    其它返回true
    */
    bool is_equal(Chromosome &chrome_1, Chromosome &chrome_2) {

        for (int i = 0; i < OBJ_NUM; ++i) {
            if (fabs(chrome_1.f[i] - chrome_2.f[i]) > 0.000001) return false;            //只要两个解的某一方向的值大于0.00001,两个解就不相等。返回false
        }
        return true;
    }

    bool update_best(Chromosome &new_chromosome) {

        if (total_best.size() == 0)
            total_best.push_back(new_chromosome);
        else {
            //将存档EP中的解与new_chromosome进行比较
            vector<Chromosome>::iterator iter = total_best.begin();
            for (; iter != total_best.end(); ++iter) {
                //将容器中的所有iter与new_chromosome比较,iter是否优于new_chromosome    ||     iter与chomosome是否相等
                if (is_better(*iter, new_chromosome) || is_equal(*iter, new_chromosome))
                    return false;
            }//new_chromosome优于EP中所有的解

             //从EP中去除劣于new_chromosome的解
            iter = total_best.begin();
            while (iter != total_best.end()) {
                if (is_better(new_chromosome, *iter)) iter = total_best.erase(iter);
                else ++iter;
            }
            //将new_chromosome加入占优解集
            total_best.push_back(new_chromosome);
        }
        return true;
    }

    bool cmp1(Chromosome a, Chromosome b) {
        return a.f[0] < b.f[0] || (a.f[0] == b.f[0] && a.f[1] < b.f[1]);
    }
    /*
    M-NSGA-II\ MTEA\
    */
    void main(int argc, char **argv) {

        string instance[INSTANCE_NUM] = { "E051-05e","E076-10e","E101-08e","E101-10c","E121-07c","E151-12c","E200-17c" };
        string name;
        // 10 run for each instances
        for (int i = 0; i < INSTANCE_NUM; i++) {                                                //案例数目
            for (int a = 0; a < ALG_NUM; a++) {                                                //对比算法的数目
                EP.clear();
                string path = argv[a + 1] + instance[i];
                for (int j = 0; j < RUN_TIMES; j++) {
                    name = path + "_run_0" + char(j + '0') + "_obj.txt";
                    fstream r_result(name, ios::in);
                    r_result >> indi_num;
                    for (int k = 0; k < indi_num; k++) {
                        Chromosome chrom;
                        for (int o = 0; o < OBJ_NUM; o++)
                            r_result >> chrom.f[o];
                        update_EP(chrom);
                    }
                    r_result.close();
                }

                //遍历EP,求2个算法的pareto 前沿
                algSets[a].push_back(EP);
            }
            total_best.clear();
            for (int a = 0; a < ALG_NUM; a++) {
                for (int j = 0; j < algSets[a][i].size(); j++) {
                    update_best(algSets[a][i][j]);
                }
            }

            sort(total_best.begin(),total_best.end(),cmp1);
            string str = to_string(i);
            FILE *file_pf = fopen(("front\\" + str + ".txt").c_str(), "w");
            fprintf(file_pf, "%d\n", total_best.size());
            for (int i = 0; i < total_best.size(); i++)
            {
                fprintf(file_pf, "%.8lf %.8lf\n", total_best[i].f[0], total_best[i].f[1]);
            }
            fclose(file_pf);
        }
    }

    展开全文
  • 目标优化算法中有全局优化和多目标优化问题,其中通过图形可以更加直接明显得表现目标函数的值和影响因素的值。 1.收敛曲线 收敛曲线是在全局优化的问题中,有一个目标函数,其中主要...得到的Pareto前沿图像:

    目标优化算法中有全局优化和多目标优化问题,其中通过图形可以更加直接明显得表现目标函数的值和影响因素的值。
    1.收敛曲线
    收敛曲线是在全局优化的问题中,有一个目标函数,其中主要的一步是gaoptimset函数设置,‘PlotFcns’,设为@gaplotbestf,下面举一个例子。

    这里写图片描述独立运行30次,提供30次中得到的最好目标函数值、最差目标函数值、平均目标函数值以及标准方差。

    fun1函数:

    function y=fun1(x) 
     y=0;
    for i=1:1:30
        y=y+i*x(i)^4;
    end
    b1=2*rand()-1;
    if(b1<0)
        b1=-b1;
    end
    y=y+b1;
    

    main函数:

    clear 
    clc 
    FVAL=zeros(1,30);
    FVALCELL=cell(1,30);
    for j=1:1:30
    fitnessfcn=@fun2;
     nvars=30; 
     LB=-10.*ones(1,30);
     lb=LB; 
     UB=10.*ones(1,30);
     ub=UB; 
     A=[];b=[]; 
     Aeq=[];beq=[]; 
    options=gaoptimset('paretoFraction',0.3,'populationsize',100,'generations',200,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotbestf); 
    [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options);
    FVAL(j)=fval
    FVALCELL{j}=x;
    end
    fval_min=min(FVAL)
    fval_max=max(FVAL)
    fval_mean=mean(FVAL)
    fval_std=std(FVAL)

    结果如下:
    这里写图片描述

    计算结果(命令窗中显示)结果如下:

    这里写图片描述

    2.Pareto前沿
    同收敛曲线一样,其中gaoptimset函数设置也是主要的一步,‘PlotFcns’,设为@gaplotpareto,下面也举一个例子。
    这里写图片描述

    fun1函数:

    function y=fun1(x) 
    n=30;
    g1=0;
    for i=2:1:n
        g1=g1+x(i);
    end
    g=1+9*g1/(n-1);
    y(1)=x(1);
    y(2)=g*(1-sqrt(x(1)/g));
    

    main函数:

    clear 
    clc 
    fitnessfcn=@fun1;
    nvars=30; 
     LB=0.*ones(1,30);
     lb=LB; 
     UB=1.*ones(1,30);
     ub=UB; 
     A=[];b=[]; 
     Aeq=[];beq=[]; 
    
    options=gaoptimset('paretoFraction',0.3,'populationsize',200,'generations',300,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto); 
    
    [x,fval]=gamultiobj(fitnessfcn,nvars,A,b,Aeq,beq,lb,ub,options)
    

    得到的Pareto前沿图像:
    这里写图片描述

    展开全文
  • 算法还结合了遗传算法中的精英策略以及NSGA-Ⅱ中的拥挤距离[12],提高了非劣解向Pareto最优前沿收敛的速度,并且保证了Pareto最优解集的多样性。仿真结果表明,算法不仅能够获得分布良好的Pareto最优前沿,而且能够极大...
  • Pareto 最优集和最优前沿

    万次阅读 2018-05-03 14:58:04
  • 对于多目标优化问题,需要求包含大于等于2目标的解,如何比较解成为一个难题。学术界引入经济学中pareto占优的概念来比较有多个目标解的优劣,本案例求2个算法在7个案例集上10次运行的pareto前沿
  • 该算法以权重信息为基础建立Pareto解集过滤器,引入小生境技术等实现Pareto前沿面的求解。测试函数计算表明该算法有较好的收敛性。以复合材料机翼的升力系数和滚转力矩系数为目标函数,采用Pareto遗传算法进行计算得出...
  • 为了克服部分多目标进化算法中容易出现退化与早熟,造成收敛速度过慢的不足,结合精英保留策略、基于 ...证了该算法能获得分布更加均匀的Pareto前沿,解的收敛性明显优于典型的多目标进化算法。
  • 例如NSGA-II等进化算法在jmetal上运行得到Pareto最优解集后 如何根据相应的算法指标(如 SPREAD 指标)生成平均值和标准差图表,和统计盒图,Pareto前沿面图,是需要使用什么工具进行辅助吗?
  • 这种生成新个体的方法结合基于强度值的适应度计算方式以及截断选择机制,可以获得很好地逼近多目标问题的Pareto前沿,且分布均匀的非劣解集。对于约束多目标优化问题,算法采用带约束支配关系判别个体的优劣。文中用...
  • 有效构造非支配解集可加快Pareto前沿的求解速度,提升多目标决策的质量和效率.在非支配解定义和性质分析基础上,推导出支配关系传递性引理,非支配解集构造定理及引理,并...
  • 仔细观察Pareto前沿分布,可以看到其排布特点具有恒递增或恒递减趋势,且大多分布不均匀,这意味着其中蕴含有不同的变化率及敏感性,从中可以挖掘出新的内在规律性.由这一认识出发,借鉴"性价比"概念,构造出各相邻...
  • 多目标进化优化算法基础篇 NSGA-算法金盼2012年04月1pareto最优解又称非支配解非占优解pareto最优解集又称非劣解非支配解集非占优解集2左图为最小化的两目标优化问题的最终pareto前沿分布示意图则f1和f2目标值均为越...
  • Pareto 前沿面进行聚类以求得解集的质心; 其次应用该质心与参考点描述Pareto 前沿面; 再次通过预测方法给出 预测点集, 使得算法在环境变化后能够有指导地增加种群多样性, 以便快速跟踪最优解; 最后应用标准...
  • 实验结果表明,该方法能够很快地收敛到Pareto最优前沿面,同时较好地保持解的多样性和分布的均匀性。对于公认的多目标benchmark问题,MCSA在解集分布的均匀性、多样性与解的精确性及算法收敛速度等方面均优于SPEA、...
  • 为提高算法收敛性能,在趋向性操作结束后引入精英保留策略保留优秀个体,并采用全局信息共享策略引导菌群不断向均匀分布的Pareto最优前沿趋近。通过不同规模算例的对比分析,验证了算法的有效性与优越性。
  • 提出并实现基于Pareto优化原理对体积一定的集成相对位移自传感磁流变...获得IRDSMRD体积一定时表征权衡IRDSMRD阻尼力性能与相对位移传感性能间关系的Pareto最优曲线(即Pareto前沿)。结果表明,在Pareto前沿上点即为I

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 162
精华内容 64
关键字:

pareto前沿