使用模式搜索查找最小函数
将无约束问题最小化patternsearch
解算器。
创建以下两个变量的目标函数。在MATLAB®路径上,将以下代码保存到一个名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
求最小值,从这个点开始(0,0)
.
x0 = (0,0);x0, x = patternsearch(有趣)
优化终止:网格尺寸小于选项。网格公差。X = -0.7037 -0.1860
最小化一个受线性不等式约束的函数。
创建以下两个变量的目标函数。在MATLAB®路径上,将以下代码保存到一个名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
设置两个线性不等式约束。
一个= [3 2;4、7];b = (1; 8);
求最小值,从这个点开始[0.5, -0.5]
.
x0 = [0.5, -0.5];x = patternsearch(乐趣,x0, A, b)
优化终止:网格尺寸小于选项。网格公差。X = 5.2824 -1.8758
求只有有限约束条件的函数的最小值。
创建以下两个变量的目标函数。在MATLAB®路径上,将以下代码保存到一个名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
求最小值和.
磅=(0,负);乌兰巴托=[正无穷,3];一个= [];b = [];Aeq = [];说真的= [];
求最小值,从这个点开始(1、5)
.
x0 =(1、5);x = patternsearch (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
优化终止:网格尺寸小于选项。网格公差。X = 0.1880 -3.0000
求受非线性不等式约束的函数的最小值。
创建以下两个变量的目标函数。在MATLAB®路径上,将以下代码保存到一个名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
创建非线性约束
为此,在MATLAB路径上,将以下代码保存到一个名为ellipsetilt.m
.
函数[c,ceq] = ellipsetilt(x);C = x(1)*x(2)/2 + (x(1)+2)^2 + (x(2)-2;
开始patternsearch
从起始点开始(2, 2)
.
x0 = (2, 2);一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = @ellipsetilt;x = patternsearch (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
优化终止:网格尺寸小于选项。MeshTolerance和constraint violation is less than options.ConstraintTolerance. x = -1.5144 0.0874
设置选项来观察进程patternsearch
解决方案的过程。
创建以下两个变量的目标函数。在你的MATLAB®路径,将以下代码保存到名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
集选项
给出迭代显示,并在每次迭代中绘制目标函数。
选择= optimoptions (“patternsearch”,“显示”,“通路”,“PlotFcn”, @psplotbestf);
从该点出发,求目标的无约束最小值(0,0)
.
x0 = (0,0);一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];x = patternsearch (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
Iter f-count f (x) MeshSize方法-5.88607 0 1 1 1 1 4 2成功的调查2 8 -5.88607 - 1完善网3 12 -5.88607 0.5细化网格4 16 -5.88607 - 0.25细化网格(输出修剪)63 218 -7.02545 1.907 e-06细化网格64 221 -7.02545 3.815 e-06成功调查65 225 -7.02545 1.907 e-06细化网格66 229 -7.02545 9.537 e-07细化网格优化终止:网目尺寸小于选项。网目公差。X = -0.7037 -0.1860
查找函数的最小值,并报告最小值的位置和值。
创建以下两个变量的目标函数。在MATLAB®路径上,将以下代码保存到一个名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
找到目标的无约束最小值,从点开始(0,0)
.返回最小值的位置,x
的价值有趣的(x)
.
x0 = (0,0);[x, fval] = patternsearch(有趣,x0)
优化终止:网格尺寸小于选项。网格公差。X = -0.7037 -0.1860 fval = -7.0254
检查patternsearch
求解过程中,获取所有输出。
创建以下两个变量的目标函数。在MATLAB®路径上,将以下代码保存到一个名为psobj.m
.
函数y = psobj (x) y = exp (- x (1) ^ 2 x (2) ^ 2) * (1 + 5 * x (1) + 6 * x x (1) (2) + 12 * * cos (x (2)));
设置目标函数为@psobj
.
有趣= @psobj;
找到目标的无约束最小值,从点开始(0,0)
.返回的解决方案,x
,目标函数在解处的值,有趣的(x)
、退出标志和输出结构。
x0 = (0,0);[x, fval exitflag、输出]= patternsearch(有趣,x0)
优化终止:网格尺寸小于选项。网格公差。x = -0.7037 -0.1860 fval = -7.0254 exitflag = 1 output = struct with fields: function: @psobj problemtype: 'unconstrained' pollmethod: ' gppositivebasis2n ' maxconstraint: [] searchmethod: [] iterations: 66 funccount: 229 meshsize: 9.5367e-07 rngstate: [1x1 struct] message: 'Optimization terminated: meshsize less than options. mesholerance .'
的exitflag
是1
,表示收敛到局部最小值。
的输出
结构包含诸如多少次迭代之类的信息patternsearch
取了多少函数值。将输出结构与下面的结果进行比较使用非默认选项的模式搜索.在那个示例中,您获得了其中的一些信息,但是没有获得,例如,函数求值的数量。
有趣的
- - - - - -要最小化的函数要最小化的函数,指定为函数句柄或函数名。的有趣的
函数接受一个向量x
并返回一个实标量f
,即目标函数的取值为x
.
您可以指定有趣的
作为文件的函数句柄
x = patternsearch (x0 @myfun)
在这里,myfun
是MATLAB函数之类的
函数f = myfun(x)%计算函数在x处的值
有趣的
也可以是匿名函数的函数句柄
x = patternsearch (@ (x)规范(x) ^ 2, x0, A, b);
例子:有趣= @ (x) sin (x (1)) * cos (x (2))
数据类型:字符
|function_handle
|字符串
x0
- - - - - -初始点一个
- - - - - -线性不等式约束线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -据nvar
矩阵,米
是不等式的个数。
一个
编码米
线性不等式
A * x < =
,
在哪里x
列向量是据nvar
变量x (:)
,b
列向量是米
元素。
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
给这些约束:
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定控制变量的和为1或更小,请给出约束条件一个= 1 (1,N)
和b = 1
.
数据类型:双
b
- - - - - -线性不等式约束线性不等式约束,指定为实向量。b
是一个米
元素向量相关的一个
矩阵。如果你通过b
作为行向量,求解器内部转换b
到列向量b (:)
.
b
编码米
线性不等式
A * x < =
,
在哪里x
列向量是N
变量x (:)
,一个
矩阵的大小是多少米
——- - - - - -N
.
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
给这些约束:
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定控制变量的和为1或更小,请给出约束条件一个= 1 (1,N)
和b = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -据nvar
矩阵,我
是等式的个数。
Aeq
编码我
线性等式
Aeq * x =说真的
,
在哪里x
列向量是N
变量x (:)
,说真的
列向量是我
元素。
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给这些约束:
Aeq =[1、2、3、2、4、1];说真的=(10、20);
例子:要指定控制变量的和为1,请给出约束条件Aeq = 1 (1, N)
和说真的= 1
.
数据类型:双
说真的
- - - - - -线性等式约束线性等式约束,指定为实向量。说真的
是一个我
元素向量相关的Aeq
矩阵。如果你通过说真的
作为行向量,求解器内部转换说真的
到列向量说真的(:)
.
说真的
编码我
线性等式
Aeq * x =说真的
,
在哪里x
列向量是N
变量x (:)
,Aeq
矩阵的大小是多少微地震
——- - - - - -N
.
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给这些约束:
Aeq =[1、2、3、2、4、1];说真的=(10、20);
例子:要指定控制变量的和为1,请给出约束条件Aeq = 1 (1, N)
和说真的= 1
.
数据类型:双
磅
- - - - - -下界下界,指定为实向量或实数组。如果元素的数量x0
等于磅
,然后磅
指定
x(我)> =磅(我)
对所有我
.
如果元素个数(磅)<元素个数(x0)
,然后磅
指定
x(我)> =磅(我)
为
1 <= I <= numel(lb)
在这种情况下,求解器发出警告。
例子:要指定所有的控制变量都是正的,磅= 0(大小(x0))
数据类型:双
乌兰巴托
- - - - - -上界上界,指定为实向量或实数组。如果元素的数量x0
等于乌兰巴托
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
.
如果元素个数(乌兰巴托)<元素个数(x0)
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为
1 <= I <= numel(ub)
在这种情况下,求解器发出警告。
例子:要指定所有控制变量都小于1,乌兰巴托= 1(大小(x0))
数据类型:双
nonlcon
- - - - - -非线性约束非线性约束,指定为函数句柄或函数名。nonlcon
是接受向量还是数组的函数x
返回两个数组,c (x)
和量表(x)
.
c (x)
非线性不等式约束数组在x
.patternsearch
试图满足
c (x) < = 0
的所有条目c
.
量表(x)
数组的非线性等式约束在x
.patternsearch
试图满足
量表(x) = 0
的所有条目量表信
.
例如,
x = patternsearch (Aeq @myfun x0, A, b,说真的,磅,乌兰巴托,@mycon)
在哪里mycon
是MATLAB函数之类的
函数[c,ceq] = mycon(x)%计算非线性不等式在x. ceq =…计算x处的非线性等式。
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项optimoptions
|结构的返回对象指定为优化选项optimoptions
(推荐)或结构。
optimoptions
中列出的选项斜体;看到Options隐藏的选项.
{}
表示默认值。请参阅模式搜索选项.
选项patternsearch
和paretosearch
选项 | 描述 | 值 |
---|---|---|
|
公差约束。 对于期权结构,请使用 |
积极的标量| |
|
显示水平。 |
“关闭” |“通路” |“诊断” |{'最后'} |
|
目标函数求值的最大次数。 对于期权结构,请使用 |
正整数| |
|
最大迭代次数。 对于期权结构,请使用 |
正整数| |
|
允许优化的总时间(以秒为单位)。 对于期权结构,请使用 |
积极的标量| |
|
网目尺寸公差。 对于期权结构,请使用 |
积极的标量| |
|
优化函数在每次迭代时调用的函数。指定为函数句柄或函数句柄的单元格数组。 对于期权结构,请使用 |
函数句柄或函数句柄的单元数组| |
|
模式搜索的输出图。指定为内置绘图函数、函数句柄或内置绘图函数或函数句柄名称的单元数组的名称。 对于期权结构,请使用 |
为 为 |
|
在模式搜索中使用的轮询策略。 |
为 |
|
并行计算目标函数和非线性约束函数。看到矢量化和并行选项和如何在全局优化工具箱中使用并行处理. 请注意 必须设置 从R2019a开始,当你设置 |
|
|
指定函数是否向量化。看到矢量化和并行选项和向量化目标函数和约束函数. 请注意 必须设置 对于期权结构,请使用 |
|
选项paretosearch
只有
选项 | 描述 | 值 |
---|---|---|
|
初始点
|
矩阵 |
|
要轮询的模式的最小部分。 | 从0到1|的标量 |
|
帕累托集合中的点数。 | 正整数| |
|
当一个迭代窗口中停止度量的相对变化小于或等于时,求解器停止
看到帕累托搜索算法定义. 当任何适用措施的相对变化小于时,求解程序停止 请注意 设置 |
积极的标量| |
选项patternsearch
只有
选项 | 描述 | 值 |
---|---|---|
缓存 | 与 请注意
|
|
CacheSize | 历史的规模。 |
积极的标量| |
CacheTol | 从当前网格点到历史上任何点的最大距离 |
积极的标量| |
FunctionTolerance |
函数的公差。如果函数值的变化小于,迭代将停止 对于期权结构,请使用 |
积极的标量| |
InitialMeshSize |
算法的初始网格大小。看到模式搜索轮询如何工作. |
积极的标量| |
InitialPenalty | 惩罚参数的初始值。看到非线性约束求解算法. |
积极的标量| |
MaxMeshSize | 在轮询或搜索步骤中使用的最大网格大小。看到模式搜索轮询如何工作. |
积极的标量| |
MeshContractionFactor |
不成功迭代的网格收缩因子。 对于期权结构,请使用 |
积极的标量| |
MeshExpansionFactor |
成功迭代的网格扩展因子。 对于期权结构,请使用 |
积极的标量| |
MeshRotate | 在声明一个点为最佳点之前,先旋转模式。看到网格选项. |
|
PenaltyFactor | 点球更新参数。看到非线性约束求解算法. |
积极的标量| |
PlotInterval | 指定每隔一段时间调用绘图函数。 |
正整数| |
PollOrderAlgorithm |
模式搜索中轮询方向的顺序。 对于期权结构,请使用 |
|
ScaleMesh |
自动缩放变量。 对于期权结构,请使用 |
|
SearchFcn |
模式搜索中使用的搜索类型。指定为名称或函数句柄。 对于期权结构,请使用 |
|
StepTolerance |
变量的容忍度。如果位置和网格尺寸的变化都小于,迭代将停止 对于期权结构,请使用 |
积极的标量| |
TolBind | 绑定的宽容。看到约束参数. |
积极的标量| |
UseCompletePoll |
围绕当前点完成民意测验。看到模式搜索轮询如何工作. 对于期权结构,请使用 |
|
UseCompleteSearch |
当搜索方法是轮询方法时,围绕当前点完成搜索。看到搜索和轮询. 对于期权结构,请使用 |
|
例子:选择= optimoptions(150年‘patternsearch’,‘MaxIterations’,‘MeshTolerance’,1的军医)
数据类型:结构体
问题
- - - - - -问题的结构问题结构,指定为具有以下字段的结构:
客观的
——目标函数
x0
——起点
Aineq
-线性不等式约束的矩阵
bineq
-线性不等式约束的向量
Aeq
-线性等式约束的矩阵
说真的
-线性等式约束的向量
磅
的下界x
乌兰巴托
-的上界x
nonlcon
-非线性约束函数
解算器
- - - - - -“patternsearch”
选项
-使用optimoptions
或psoptimset
rngstate
—可选字段,重置随机数生成器的状态
请注意
各个领域中问题
是必需的。
数据类型:结构体
fval
-目标函数在解处的值目标函数在解处的值,以实数返回。一般来说,fval
=有趣的(x)
.
exitflag
- - -原因patternsearch
停止原因patternsearch
已停止,返回为整数。
出口标志 | 意义 |
---|---|
|
没有非线性约束—网格尺寸的大小小于指定的公差,且约束违背小于 |
具有非线性约束-的大小互补措施(在该表之后定义)小于 |
|
|
的变化 |
|
的变化 |
|
步长的大小小于机器精度,约束违背小于 |
|
达到函数求值或迭代的最大次数。 |
|
由输出函数或绘图函数终止的优化。 |
|
没有找到可行点。 |
在非线性约束求解器中互补措施元素所在的向量的范数是多少c我λ我,在那里c我非线性不等式是否违反约束,和λ我为相应的拉格朗日乘子。
输出
—优化过程信息关于优化过程的信息,作为带有以下字段的结构返回:
函数
——目标函数。
problemtype
-问题类型,其中之一:
无约束的
“boundconstraints”
“linearconstraints”
“nonlinearconstr”
pollmethod
——轮询技术。
searchmethod
-使用搜索技术,如果有。
迭代
—总迭代次数。
funccount
—函数求值的总数。
meshsize
-网孔尺寸x
.
maxconstraint
—最大约束违背(如果有)。
rngstate
- MATLAB随机数生成器的状态,就在算法开始之前。中的值可以使用rngstate
在使用随机搜索方法或随机轮询方法时重新生成输出。看到复制的结果,其中讨论了相同的技术遗传算法
.
消息
—终止算法的原因。
默认情况下,patternsearch
在没有线性约束的情况下,根据自适应网格与坐标方向对齐,寻找最小值。看到什么是直接查册?和模式搜索轮询如何工作.
的优化活动编辑器任务为patternsearch
.
[1] Audet, Charles, and J. E. Dennis Jr. <广义模式搜索的分析>SIAM优化学报.2003年第13卷第3期,第889-903页。
康,A. R., N. i.m. Gould,和博士L. Toint。“具有一般不等式约束和简单边界的全局收敛增广拉格朗日势垒优化算法”。数学的计算.第66卷第217号,1997年,261-288页。
马克·A·艾布拉姆森混合变量一般约束优化问题的模式搜索滤波算法.2002年8月,莱斯大学计算与应用数学系博士论文。
[4] Abramson, Mark A., Charles Audet, J. E. Dennis, Jr.和Sebastien Le Digabel。ORTHOMADS:具有正交方向的确定性MADS实例。SIAM优化学报.第20卷第2期,2009年,948-966页。
科尔达,塔玛拉·G,罗伯特·迈克尔·刘易斯和弗吉尼亚·托尔松。直接搜索优化:对一些经典和现代方法的新视角暹罗审查.2003年第45卷第3期385-482页。
科尔达,塔玛拉·G,罗伯特·迈克尔·刘易斯和弗吉尼亚·托尔松。一种集直接搜索增广拉格朗日算法,用于结合一般约束和线性约束进行优化。SAND2006-5315技术报告,桑迪亚国家实验室,2006年8月。
路易斯,罗伯特·迈克尔,安妮·谢泼德,弗吉尼亚·托尔松。实现线性约束最小化的生成集搜索方法SIAM科学计算杂志.第29卷,第6期,2007年,2507-2530页。
要并行运行,请设置“UseParallel”
选项真正的
.
选择= optimoptions ('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
다음MATLAB명령에해당하는링크를클릭했습니다。
명령을실행하려면MATLAB명령창에입력하십시오。웹브라우저는MATLAB명령을지원하지않습니다。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。