主要内容

paretosearch

在帕累托集中找点

描述

例子

x= paretosearch (有趣的据nvar寻找多目标函数的非支配点有趣的.的据nvar参数是优化问题的维度(决策变量的个数)。

例子

x= paretosearch (有趣的据nvar一个b找到符合线性不等式的非支配点* xb.看到线性不等式约束

x= paretosearch (有趣的据nvar一个bAeq说真的寻找受线性约束的非支配点Aeq * x说真的而且* xb.如果不存在线性不等式,则设置A = []而且B = []

例子

x= paretosearch (有趣的据nvar一个bAeq说真的乌兰巴托中定义设计变量的一组下界和上界x,所以x总是在这个范围内x乌兰巴托.如果不存在线性等式,则设置Aeq = []而且Beq = [].如果x(我)没有下界,集合lb(i) = -无穷大.如果x(我)没有上限,集合ub(i) =无穷大

例子

x= paretosearch (有趣的据nvar一个bAeq说真的乌兰巴托nonlcon应用非线性不等式c (x)中定义的nonlcon.的paretosearch函数找到非支配点,这样C (x)≤0.如果不存在边界,请设置Lb = []Ub = [],或者两者都有。

请注意

目前,paretosearch不支持非线性等式约束Ceq (x) = 0

例子

x= paretosearch (有趣的据nvar一个bAeq说真的乌兰巴托nonlcon选项中指定的优化选项查找非支配点选项.使用optimoptions设置这些选项。如果没有非线性不等式或等式约束,则设置Nonlcon = []

x= paretosearch (问题的非支配点问题,在那里问题结构描述在问题

例子

xfval= paretosearch(___,对于任何输入变量,返回矩阵fval中所有目标函数的值有趣的对于所有的解(行)x.输出fvalnf列,nf目标的数量,是否与行数相同x

例子

xfvalexitflag输出= paretosearch(___同样的回报exitflag,表示算法停止原因的整数,和输出,一个包含解决方案过程信息的结构。

例子

xfvalexitflag输出残差= paretosearch(___同样的回报残差,一个包含解点约束值的结构x

例子

全部折叠

求一个二维变量的双目标函数的帕累托前的点。

Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];rng默认的%用于再现性X = paretosearch(fun,2);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

将解绘制成散点图。

情节(x (: 1) x (:, 2),“m *”)包含(“x”(1)) ylabel (“x”(2)

图中包含一个轴对象。axis对象包含一个line类型的对象。

从理论上讲,这个问题的解决方法是一条直线(2, 1)[1,2]paretosearch返回靠近这条直线的等距点。

为一个受线性约束的二维双目标问题创建一个帕累托前沿X (1) + X (2) <= 1

Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];A = [1,1];B = 1;rng默认的%用于再现性x = paretosearch(fun,2,A,b);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

将解绘制成散点图。

情节(x (: 1) x (:, 2),“m *”)包含(“x”(1)) ylabel (“x”(2)

图中包含一个轴对象。axis对象包含一个line类型的对象。

从理论上讲,这个问题的解决方法是一条直线(2, 1)[0, 1]paretosearch返回靠近这条直线的等距点。

在二维的约束下,为一个两目标问题创建一个帕累托前沿X (1) >= 0而且X (2) <= 1

Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];lb = [0,-Inf];% x(1) >= 0ub = [Inf,1];% x(2) <= 1rng默认的%用于再现性X = paretosearch(fun,2,[],[],[],[], [],lb,ub);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

将解绘制成散点图。

情节(x (: 1) x (:, 2),“m *”)包含(“x”(1)) ylabel (“x”(2)

图中包含一个轴对象。axis对象包含一个line类型的对象。

所有的解点都在约束边界上X (1) = 0X (2) = 1

为有边界的二维双目标问题创建一个帕累托前沿-1.1 <= x(i) <= 1.1还有非线性约束Norm (x)^2 <= 1.2.非线性约束函数出现在这个示例的末尾,如果您将这个示例作为一个活动脚本运行,它将工作。若要以其他方式运行此示例,请将非线性约束函数作为一个文件包含在MATLAB®路径上。

为了更好地看到非线性约束的效果,设置选项时使用较大的帕累托集大小。

rng默认的%用于再现性Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];Lb = [-1.1,-1.1];Ub = [1.1,1.1];选项= optimoptions(“paretosearch”“ParetoSetSize”, 200);x = paretosearch(有趣,2 ,[],[],[],[], 磅,乌兰巴托,@circlecons选项);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

将解绘制成散点图。包括圆形约束边界的绘图。

图绘制(x (: 1), (:, 2),“k *’)包含(“x”(1)) ylabel (“x”(2))举行矩形(“位置”,[-1.2 -1.2 2.4 2.4],“弯曲”, 1“EdgeColor”“r”xlim([-1.2,0.5]) ylim([-0.5,1.2]广场持有

图中包含一个轴对象。axis对象包含2个类型为直线、矩形的对象。

带正数的解点x (1)值还是负的x (2)数值接近非线性约束边界。

函数[c,ceq] = circlecons(x) ceq = [];C =范数(x)^2 - 1.2;结束

监视…的进展paretosearch,指定“psplotparetof”图的功能。

Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];选项= optimoptions(“paretosearch”“PlotFcn”“psplotparetof”);Lb = [-4,-4];Ub = -lb;x = paretosearch(有趣,2 ,[],[],[],[], 磅,乌兰巴托,[]选项);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

{

解看起来像一个半径为18的四分之一圆弧,这可以被证明是解析解。

通过调用,获得函数空间和参数空间中的Pareto frontparetosearch两者都有x而且fval输出。设置选项以在函数空间和参数空间中绘制帕累托集。

Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];Lb = [-4,-4];Ub = -lb;选项= optimoptions(“paretosearch”“PlotFcn”, {“psplotparetof”“psplotparetox”});rng默认的%用于再现性[x, fval] = paretosearch(有趣,2 ,[],[],[],[], 磅,乌兰巴托,[]选项);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

{

目标函数空间的解析解为半径为18的1 / 4圆弧。在参数空间中,解析解为一条直线(2, 1)[1,2].解点接近分析曲线。

设置选项以监视帕累托集求解过程。同时,获得更多的输出paretosearch便于您了解解决方案的流程。

选项= optimoptions(“paretosearch”“显示”“通路”...“PlotFcn”, {“psplotparetof”“psplotparetox”});Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];Lb = [-4,-4];Ub = -lb;rng默认的%用于再现性[x, fval exitflag,输出]= paretosearch(有趣,2 ,[],[],[],[], 磅,乌兰巴托,[]选项);
Iter F-count NumSolutions Spread Volume 0 60 11 - 3.7872e+02 1 386 12 - 3.4654e+02 2 702 27 9.4324e-01 2.9452e+02 3 1029 27 - 2.9904e+02 4 1357 40 0.0000e+00 3.0154e+02 5 1697 60 1.4903e-01 3.0369e+02 6 1841 60 1.4515e-01 3.0439e+02 7 1961 60 1.7716e-01 3.0465e+02 8 2075 60 1.6123e-01 3.0475e+02 9 2189 60 1.7419e-01 3.0449e+02帕累托集发现满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

{

检查额外的输出。

流('退出标志%d.\n'exitflag)
退出标志1。
disp(输出)
迭代:10 funccount: 2189 volume: 304.4256 averagedistance: 0.0215 spread: 0.1742 maxconstraint: 0 message: '帕累托集合发现满足约束. ...' rngstate: [1x1 struct]

得到并检验帕累托前约束残差。用线性不等式约束创建一个问题Sum (x) <= -1/2以及非线性不等式约束Norm (x)^2 <= 1.2.为了提高精度,在帕累托前面使用200点,和一个ParetoSetChangeTolerance1 e -,并给出自然边界-1.2 <= x(i) <= 1.2

非线性约束函数出现在这个示例的末尾,如果您将这个示例作为一个活动脚本运行,它将工作。若要以其他方式运行此示例,请将非线性约束函数作为一个文件包含在MATLAB®路径上。

Fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2];A = [1,1];B = -1/2;Lb = [-1.2,-1.2];Ub = -lb;Nonlcon = @circlecons;rng默认的%用于再现性选项= optimoptions(“paretosearch”“ParetoSetChangeTolerance”1 e -...“PlotFcn”, {“psplotparetof”“psplotparetox”},“ParetoSetSize”, 200);

调用paretosearch使用所有输出。

[x,fval,exitflag,output,residuals] = paretosearch(fun,2,A,b,[],[],lb,ub,nonlcon,options);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

{

与无约束集相比,不等式约束减小了帕累托集的大小。检查返回的残差。

流('最大线性不等式约束残差为%f.\n'马克斯(residuals.ineqlin))
最大线性不等式约束残差为0.000000。
流(最大非线性不等式约束残差为%f.\n'马克斯(residuals.ineqnonlin))
最大非线性不等式约束残差为-0.003840。

最大返回残差为负数,意味着所有返回点都是可行的。返回的最大残差接近于零,这意味着每个约束对某些点是有效的。

函数[c,ceq] = circlecons(x) ceq = [];C =范数(x)^2 - 1.2;结束

输入参数

全部折叠

要优化的目标函数,指定为函数句柄或函数名。

有趣的一个函数是否接受一个双精度的实行向量x的长度据nvar并返回一个实向量F (x)目标函数值。有关写作的详情有趣的,请参阅计算目标函数

如果你设置UseVectorized选项真正的,然后有趣的接受一个大小的矩阵n——- - - - - -据nvar,其中矩阵表示n个人。有趣的返回一个大小的矩阵n——- - - - - -,在那里是目标函数的个数。看到向量化适应度函数

例子:@ (x) (sin (x), cos (x))

数据类型:字符|function_handle|字符串

变量数,指定为正整数。求解器传递长度的行向量据nvar有趣的

例子:4

数据类型:

线性不等式约束,指定为实矩阵。一个是一个——- - - - - -据nvar矩阵,是不等式的个数。

一个编码线性不等式

A*x <= b

在哪里x列向量是据nvar变量x (:),b列向量是元素。

例如,指定

x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日

给出这些约束条件:

A = [1,2;3,4;5,6];B = [10;20;30];

例子:要指定控制变量的和小于等于1,请给出约束条件A = ones(1,N)而且B = 1

数据类型:

线性不等式约束,指定为实向量。b是一个元素的相关向量一个矩阵。如果你通过了b作为行向量,解算器内部转换b对列向量b (:)

b编码线性不等式

A*x <= b

在哪里x列向量是N变量x (:),一个矩阵的大小——- - - - - -N

例如,指定

x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日

给出这些约束条件:

A = [1,2;3,4;5,6];B = [10;20;30];

例子:要指定控制变量的和小于等于1,请给出约束条件A = ones(1,N)而且B = 1

数据类型:

线性等式约束,指定为实矩阵。Aeq是一个——- - - - - -据nvar矩阵,是等式的个数。

Aeq编码线性等式

Aeq*x = beq

在哪里x列向量是N变量x (:),说真的列向量是元素。

例如,指定

x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,

给出这些约束条件:

Aeq = [1,2,3;2,4,1];Beq = [10;20];

例子:要指定控制变量的和为1,请给出约束条件Aeq = ones(1,N)而且Beq = 1

数据类型:

线性等式约束,指定为实向量。说真的是一个元素的相关向量Aeq矩阵。如果你通过了说真的作为行向量,解算器内部转换说真的对列向量说真的(:)

说真的编码线性等式

Aeq*x = beq

在哪里x列向量是N变量x (:),Aeq矩阵的大小微地震——- - - - - -N

例如,指定

x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,

给出这些约束条件:

Aeq = [1,2,3;2,4,1];Beq = [10;20];

例子:要指定控制变量的和为1,请给出约束条件Aeq = ones(1,N)而且Beq = 1

数据类型:

下界,指定为实向量或双精度数组。中元素的下界x乌兰巴托

在内部,paretosearch转换数组对向量磅(:)

例子:lb = [0;-Inf;4]意味着X(1)≥0X(3)≥4

数据类型:

上界,指定为实向量或双精度数组。乌兰巴托中元素的上界x乌兰巴托

在内部,paretosearch转换数组乌兰巴托对向量乌兰巴托(:)

例子:ub = [Inf;4;10]意味着X(2)≤4X(3)≤10

数据类型:

非线性约束,指定为函数句柄或函数名。nonlcon一个函数接受行向量吗x并返回两个行向量,c (x)而且量表(x)

  • c (x)非线性不等式的行向量约束在x.的paretosearch函数尝试满足C (x) <= 0对于所有c

  • 量表(x)必须返回[],因为目前paretosearch不支持非线性等式约束。

如果你设置UseVectorized选项真正的,然后nonlcon接受一个大小的矩阵n——- - - - - -据nvar,其中矩阵表示n个人。nonlcon返回一个大小的矩阵n——- - - - - -mc在第一个参数中mc是非线性不等式约束的个数。看到向量化适应度函数

例如,x = paretosearch(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon),在那里mycon是一个MATLAB®功能如下:

函数[c,ceq] = mycon(x) c =…计算x处的非线性不等式ceq = [] % x处没有非线性不等式。

有关更多信息,请参见非线性约束

数据类型:字符|function_handle|字符串

的优化选项,指定为的输出optimoptions或者作为一种结构。

{}表示默认值。参见模式搜索选项

选项paretosearch

选项 描述

ConstraintTolerance

约束的容忍度。

对于选项结构,使用TolCon

正标量|{1 e-6}

显示

显示级别。

“关闭”|“通路”|“诊断”|{'最后'}

InitialPoints

初始分数paretosearch.使用以下数据类型之一:

  • 矩阵据nvar列,其中每一行代表一个初始点。

  • 结构,该结构包含以下字段(除了X0):

    • X0-矩阵与据nvar列,其中每一行代表一个初始点。

    • Fvals-矩阵与numObjectives列,其中每行表示中对应点的目标函数值X0

    • Cineq-矩阵与numIneq列,其中每一行表示中对应点的非线性不等式约束值X0

paretosearch方法中任何缺失的值Fvals而且Cineq字段。

矩阵据nvar列|结构|{[]}

MaxFunctionEvaluations

目标函数求值的最大个数。

对于选项结构,使用MaxFunEvals

正整数|{' 2000 * numberOfVariables '}patternsearch{3000 * (numberOfVariables + numberOfObjectives)}paretosearch,在那里numberOfVariables问题变量的数量,和numberOfObjectives目标函数的个数是多少

MaxIterations

最大迭代次数。

对于选项结构,使用麦克斯特

正整数|{' 100 * numberOfVariables '}patternsearch{100 * (numberOfVariables + numberOfObjectives)}paretosearch,在那里numberOfVariables问题变量的数量,和numberOfObjectives目标函数的个数是多少

MaxTime

允许优化的总时间(以秒为单位)。

对于选项结构,使用期限

正标量|{Inf}

MeshTolerance

网孔尺寸公差。

对于选项结构,使用TolMesh

正标量|{1 e-6}

MinPollFraction

轮询模式的最小比例。

0到1的标量|{0}

OutputFcn

优化函数在每次迭代时调用的函数。指定为函数句柄或函数句柄的单元格数组。

对于选项结构,使用OutputFcns

函数句柄或函数句柄的单元格数组|{[]}

ParetoSetChangeTolerance

当一个迭代窗口中停止度量的相对变化小于或等于时,求解器停止ParetoSetChangeTolerance

  • 对于三个或更少的目标,paretosearch使用体积和扩散措施。

  • 对于四个或更多的目标,paretosearch使用传播和距离度量。

看到paretosearch算法的定义

当任何适用度量的相对变化小于时,求解器停止ParetoSetChangeTolerance,即这些测度的时间序列的傅里叶变换的平方的最大值相对较小。看到paretosearch算法

请注意

设置ParetoSetChangeTolerance<sqrt (eps)不推荐~ 1.5e-8。

正标量|{1}的军医

ParetoSetSize

帕累托集中的点数。

正整数|{“马克斯(numberOfObjectives 60)”},在那里numberOfObjectives目标函数的个数是多少

PlotFcn

模式搜索的输出图。指定为内置绘图函数、函数句柄或内置绘图函数或函数句柄名称的单元格数组的名称。

对于选项结构,使用PlotFcns

{[]}|“psplotfuncount”|“psplotmaxconstr”|自定义绘图函数

有多个目标:“psplotdistance”|“psplotparetof”|“psplotparetox”|“psplotspread”|“psplotvolume”

只有一个目标:“psplotbestf”|“psplotmeshsize”|“psplotbestx”

PollMethod

模式搜索中使用的轮询策略。

请注意

当问题具有线性等式约束时,不能使用MADS轮询。

{' GPSPositiveBasis2np2 '}|“GPSPositiveBasis2N”|“GPSPositiveBasisNp1”|“GSSPositiveBasis2N”|“GSSPositiveBasisNp1”|“MADSPositiveBasis2N”|“MADSPositiveBasisNp1”|“GSSPositiveBasis2np2”

UseParallel

并行计算目标函数和非线性约束函数。看到矢量化和并行选项而且如何在全局优化工具箱中使用并行处理

请注意

你必须设置UseCompletePoll真正的patternsearch使用向量化或并行轮询。类似地,组UseCompleteSearch真正的用于向量化或并行搜索。

从R2019a开始,设置UseParallel选项真正的patternsearch在内部重写UseCompletePoll设置为真正的所以这个函数是平行轮询的。

真正的|{假}

UseVectorized

指定函数是否向量化。看到矢量化和并行选项而且向量化目标函数和约束函数

请注意

你必须设置UseCompletePoll真正的patternsearch使用向量化或并行轮询。类似地,组UseCompleteSearch真正的用于向量化或并行搜索。

对于选项结构,使用矢量化“上”“关闭”

真正的|{假}

例子:options = optimoptions('paretosearch','Display','none','UseParallel',true)

问题结构,指定为具有以下字段的结构:

  • 客观的-目标函数

  • x0-起点

  • Aineq-矩阵线性不等式约束

  • bineq-线性不等式约束向量

  • Aeq-矩阵线性等式约束

  • 说真的-线性等式约束向量

  • 的下界x

  • 乌兰巴托-的上限x

  • nonlcon-非线性约束函数

  • 解算器- - - - - -“paretosearch”

  • 选项-使用optimoptions

  • rngstate—可选字段,重置随机数发生器状态

请注意

所有字段问题都是必需的,除了rngstate,这是可选的。

数据类型:结构体

输出参数

全部折叠

帕累托点,返回为an——- - - - - -据nvar数组,是帕累托前沿的点数。每行x表示帕累托前沿的一点。

函数值在帕累托前面,返回为——- - - - - -nf数组中。是帕累托前面的点数,和nf是目标函数的个数。每行fval表示内一个帕累托点的函数值x

原因paretosearch已停止,返回为本表中的整数值之一。

出口标志 停止条件
1

满足下列条件之一。

  • 所有在位者网目尺寸均小于选项。我shTolerance约束条件(如果有的话)在内部得到满足选项。ConstraintTolerance

  • 帕累托集扩散的相对变化小于选项。ParetoSetChangeTolerance约束条件(如果有的话)在内部得到满足选项。ConstraintTolerance

  • 帕累托集合体积的相对变化小于选项。ParetoSetChangeTolerance约束条件(如果有的话)在内部得到满足选项。ConstraintTolerance

0 迭代次数超过选项。麦克斯特ations,或函数求值次数超过选项。米axFunctionEvaluations
-1

优化由输出函数或绘图函数停止。

-2 求解器无法找到满足所有约束条件的点。
5 优化时间超过选项。MaxTime

关于优化过程的信息,作为包含以下字段的结构返回:

  • 迭代-总迭代次数。

  • funccount-功能评估总次数。

  • 体积-由函数空间中的帕累托点形成的集合的超容量。看到paretosearch算法的定义

  • averagedistance-函数空间中帕累托点的平均距离度量。看到paretosearch算法的定义

  • 传播-帕累托点的平均扩散度量。看到paretosearch算法的定义

  • maxconstraint-最大约束违反(如有)。

  • 消息—算法终止的原因。

  • rngstate-算法开始前的MATLAB随机数生成器状态。中的值可以使用rngstate当您使用随机轮询方法时,如“MADSPositiveBasis2N”或者当您使用默认的准随机方法创建初始总体时。看到复制的结果,其中讨论了相同的技术遗传算法

约束残差x,作为包含这些字段的结构返回(字段大小术语和条目的术语表在表后面)。

字段名 字段长度 条目
较低的 ——- - - - - -据nvar - - - - - -x
——- - - - - -据nvar x- - - - - -乌兰巴托
ineqlin ——- - - - - -ncon A*x - b
eqlin ——- - - - - -ncon |Aeq*x - b|
ineqnonlin ——- - - - - -ncon c (x)
  • -返回点数x在帕累托方面

  • 据nvar-控制变量个数

  • ncon—相关类型的约束数(如一个或返回非线性等式的数目)

  • c (x)—非线性约束函数的数值

更多关于

全部折叠

Nondominated

非劣势点,也称为非劣势点,是所有目标函数中没有其他点的值更低的点。换句话说,对于非支配点,在不提高其他目标函数值的情况下,任何一个目标函数值都不能提高(降低)。看到什么是多目标优化?

算法

paretosearch使用模式搜索来搜索帕累托前面的点。详细信息请参见paretosearch算法

选择功能

应用程序

优化活动编辑器任务提供了一个可视化界面paretosearch

扩展功能

版本历史

在R2018b中引入

Baidu
map