paretosearch
在帕累托集中找点
语法
描述
例子
找到帕累托前面
求一个二维变量的双目标函数的帕累托前的点。
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))
从理论上讲,这个问题的解决方法是一条直线(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))
从理论上讲,这个问题的解决方法是一条直线(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))
所有的解点都在约束边界上X (1) = 0
或X (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]广场持有从
带正数的解点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 Front
通过调用,获得函数空间和参数空间中的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点,和一个ParetoSetChangeTolerance
的1 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;结束
输入参数
据nvar
- - - - - -变量数量
正整数
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -据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 (:)
.
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
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为实矩阵。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)≥0
,X(3)≥4
.
数据类型:双
乌兰巴托
- - - - - -上界
[]
(默认)|实向量或数组
上界,指定为实向量或双精度数组。乌兰巴托
中元素的上界磅
≤x
≤乌兰巴托
.
在内部,paretosearch
转换数组乌兰巴托
对向量乌兰巴托(:)
.
例子:ub = [Inf;4;10]
意味着X(2)≤4
,X(3)≤10
.
数据类型:双
nonlcon
- - - - - -非线性约束
函数处理|函数名
非线性约束,指定为函数句柄或函数名。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
|结构
的优化选项,指定为的输出optimoptions
或者作为一种结构。
{}
表示默认值。参见模式搜索选项.
选项paretosearch
选项 | 描述 | 值 |
---|---|---|
|
约束的容忍度。 对于选项结构,使用 |
正标量| |
|
显示级别。 |
“关闭” |“通路” |“诊断” |{'最后'} |
|
初始分数
|
矩阵 |
|
目标函数求值的最大个数。 对于选项结构,使用 |
正整数| |
|
最大迭代次数。 对于选项结构,使用 |
正整数| |
|
允许优化的总时间(以秒为单位)。 对于选项结构,使用 |
正标量| |
|
网孔尺寸公差。 对于选项结构,使用 |
正标量| |
|
轮询模式的最小比例。 | 0到1的标量| |
|
优化函数在每次迭代时调用的函数。指定为函数句柄或函数句柄的单元格数组。 对于选项结构,使用 |
函数句柄或函数句柄的单元格数组| |
|
当一个迭代窗口中停止度量的相对变化小于或等于时,求解器停止
当任何适用度量的相对变化小于时,求解器停止 请注意 设置 |
正标量| |
|
帕累托集中的点数。 | 正整数| |
|
模式搜索的输出图。指定为内置绘图函数、函数句柄或内置绘图函数或函数句柄名称的单元格数组的名称。 对于选项结构,使用 |
有多个目标: 只有一个目标: |
|
模式搜索中使用的轮询策略。 请注意 当问题具有线性等式约束时,不能使用MADS轮询。 |
|
|
并行计算目标函数和非线性约束函数。看到矢量化和并行选项而且如何在全局优化工具箱中使用并行处理. 请注意 你必须设置 从R2019a开始,设置 |
|
|
指定函数是否向量化。看到矢量化和并行选项而且向量化目标函数和约束函数. 请注意 你必须设置 对于选项结构,使用 |
|
例子:options = optimoptions('paretosearch','Display','none','UseParallel',true)
问题
- - - - - -问题的结构
结构
问题结构,指定为具有以下字段的结构:
客观的
-目标函数x0
-起点Aineq
-矩阵线性不等式约束bineq
-线性不等式约束向量Aeq
-矩阵线性等式约束说真的
-线性等式约束向量磅
的下界x
乌兰巴托
-的上限x
nonlcon
-非线性约束函数解算器
- - - - - -“paretosearch”
选项
-使用optimoptions
rngstate
—可选字段,重置随机数发生器状态
请注意
所有字段问题
都是必需的,除了rngstate
,这是可选的。
数据类型:结构体
输出参数
x
-帕累托点
米
——- - - - - -据nvar
数组
帕累托点,返回为an米
——- - - - - -据nvar
数组,米
是帕累托前沿的点数。每行x
表示帕累托前沿的一点。
fval
-函数值在帕累托前面
米
——- - - - - -nf
数组
函数值在帕累托前面,返回为米
——- - - - - -nf
数组中。米
是帕累托前面的点数,和nf
是目标函数的个数。每行fval
表示内一个帕累托点的函数值x
.
exitflag
- - -原因paretosearch
停止
整数
原因paretosearch
已停止,返回为本表中的整数值之一。
出口标志 | 停止条件 |
---|---|
1 |
满足下列条件之一。
|
0 |
迭代次数超过选项。麦克斯特ations ,或函数求值次数超过选项。米axFunctionEvaluations . |
-1 |
优化由输出函数或绘图函数停止。 |
-2 |
求解器无法找到满足所有约束条件的点。 |
5 |
优化时间超过选项。MaxTime . |
输出
—优化过程信息
结构
关于优化过程的信息,作为包含以下字段的结构返回:
迭代
-总迭代次数。funccount
-功能评估总次数。体积
-由函数空间中的帕累托点形成的集合的超容量。看到paretosearch算法的定义.averagedistance
-函数空间中帕累托点的平均距离度量。看到paretosearch算法的定义.传播
-帕累托点的平均扩散度量。看到paretosearch算法的定义.maxconstraint
-最大约束违反(如有)。消息
—算法终止的原因。rngstate
-算法开始前的MATLAB随机数生成器状态。中的值可以使用rngstate
当您使用随机轮询方法时,如“MADSPositiveBasis2N”
或者当您使用默认的准随机方法创建初始总体时。看到复制的结果,其中讨论了相同的技术遗传算法
.
残差
-约束残差x
结构
约束残差x
,作为包含这些字段的结构返回(字段大小术语和条目的术语表在表后面)。
字段名 | 字段长度 | 条目 |
---|---|---|
较低的 |
米 ——- - - - - -据nvar |
磅 - - - - - -x |
上 |
米 ——- - - - - -据nvar |
x - - - - - -乌兰巴托 |
ineqlin |
米 ——- - - - - -ncon |
A*x - b |
eqlin |
米 ——- - - - - -ncon |
|Aeq*x - b| |
ineqnonlin |
米 ——- - - - - -ncon |
c (x) |
米
-返回点数x
在帕累托方面据nvar
-控制变量个数ncon
—相关类型的约束数(如一个
或返回非线性等式的数目)c (x)
—非线性约束函数的数值
更多关于
算法
paretosearch
使用模式搜索来搜索帕累托前面的点。详细信息请参见paretosearch算法.
选择功能
应用程序
的优化活动编辑器任务提供了一个可视化界面paretosearch
.
扩展功能
自动平行支撑
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要并行运行,请设置“UseParallel”
选项真正的
.
Options = optimoptions('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
版本历史
在R2018b中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。