主要内容

fgoalattain

解决多目标目标实现问题

描述

fgoalattain解决了目标实现问题,一个多目标优化问题的最小化公式。

fgoalattain查找指定的问题的最小值

最小化 x γ γ 这样 F x 重量 γ 目标 c x 0 c e x 0 一个 x b 一个 e x b e l b x u b

重量目标b,说真的是向量,一个而且Aeq为矩阵,且Fx),cx),量表信x),是返回向量的函数。Fx),cx),量表信x)可以是非线性函数。

x,乌兰巴托可以作为向量或矩阵传递;看到矩阵的参数

例子

x= fgoalattain (有趣的x0目标重量试图使所提供的目标函数有趣的达到所指定的目标目标通过改变x,从x0,其重量由重量

请注意

传递额外参数解释如何在必要时将额外参数传递给目标函数和非线性约束函数。

例子

x= fgoalattain (有趣的x0目标重量一个b解决了受不平等影响的目标实现问题A*x≤b

x= fgoalattain (有趣的x0目标重量一个bAeq说真的在平等的前提下解决目标的实现问题Aeq*x = beq.如果不存在不等式,则设置A = []而且B = []

例子

x= fgoalattain (有趣的x0目标重量一个bAeq说真的乌兰巴托解决了受约束的目标实现问题x乌兰巴托.如果不存在等式,则设置Aeq = []而且Beq = [].如果x(我)下面是无界的吗lb(i) = -无穷大;如果x(我)上面是无界的吗ub(i) =无穷大

请注意

看到迭代可能会违反约束

请注意

如果问题的指定输入边界不一致,则输出xx0以及输出fval[]

例子

x= fgoalattain (有趣的x0目标重量一个bAeq说真的乌兰巴托nonlcon解决了受非线性不等式影响的目标实现问题c (x)或平等量表(x)中定义的nonlconfgoalattain优化如下C (x)≤0而且Ceq (x) = 0.如果不存在边界,请设置Lb = []Ub = [],或者两者都有。

例子

x= fgoalattain (有趣的x0目标重量一个bAeq说真的乌兰巴托nonlcon选项中指定的优化选项解决目标实现问题选项.使用optimoptions设置这些选项。

x= fgoalattain (问题解决目标实现问题问题中描述的结构问题

例子

xfval= fgoalattain(___,对于任何语法,返回中计算的目标函数的值有趣的在解决方案中x

例子

xfvalattainfactorexitflag输出= fgoalattain(___另外返回解决方案处的实现因子x,一个值exitflag的退出条件fgoalattain,和结构输出有关优化过程的信息。

例子

xfvalattainfactorexitflag输出λ= fgoalattain(___另外返回一个结构λ谁的场包含解处的拉格朗日乘子x

例子

全部折叠

考虑双目标函数

F x 2 + x - 3. 2 5 + x 2 / 4

这个函数显然是最小化的 F 1 x x 3. ,取值2,使之最小 F 2 x x 0 ,得到值5。

设定目标[3,6]和权重[1,1],从。开始解决目标达成问题x0= 1。

Fun = @(x)[2+(x-3)^2;5+x^2/4];目标= [3,6];重量= [1,1];X0 = 1;X = fgoalattain(乐趣,x0,目标,重量)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
X = 2.000

找到…的价值 F x 在解上。

有趣的(x)
ans =2×13.0000 - 6.0000

fgoalattain准确地实现目标。

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标为[3,6],权值为[1,1],线性约束为 x 1 + x 2 4

创建目标函数、目标和权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

创建线性约束矩阵一个而且b代表A*x <= b

A = [1,1];B = 4;

设定一个起始点[1,1],解决目标达成问题。

X0 = [1,1];x = fgoalattain(乐趣,x0,目标,体重,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0694 - 1.9306

找到…的价值 F x 在解上。

有趣的(x)
ans =2×13.1484 - 6.1484

fgoalattain没有达到目标。因为权重是相等的,所以求解器在每个目标上都达不到相同的量。

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标是[3,6],权重是[1,1],边界是 0 x 1 3. 2 x 2 5

创建目标函数、目标和权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

创建边界。

Lb = [0,2];Ub = [3,5];

设定起始点为[1,4],解决目标达成问题。

X0 = [1,4];A = [];%无线性约束B = [];Aeq = [];Beq = [];x = fgoalattain(乐趣,x0,目标,重量,A,b,Aeq,beq,lb,ub)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.6667 - 2.3333

找到…的价值 F x 在解上。

有趣的(x)
ans =2×12.8889 - 5.8889

fgoalattain超过了目标。因为权重是相等的,所以求解器会超额完成每个目标。

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标为[3,6],权值为[1,1],非线性约束为 x 2 4

创建目标函数、目标和权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

非线性约束函数在norm4.m文件。

类型norm4
函数[c,ceq] = norm4(x) ceq = [];C =范数(x)^2 - 4;

为线性约束和边界创建空输入参数。

A = [];Aeq = [];B = [];Beq = [];Lb = [];Ub = [];

设定起始点为[1,1],解决目标达成问题。

X0 = [1,1];x = fgoalattain(乐趣,x0,目标,重量,A,b,Aeq,beq,lb,ub,@norm4)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×21.1094 - 1.6641

找到…的价值 F x 在解上。

有趣的(x)
ans =2×14.5778 - 7.1991

fgoalattain没有达到目标。尽管权重相等, F 1 x 距离3的目标约1.58,以及 F 2 x 距离目标6大约1.2。非线性约束阻碍了求解x平等地实现目标。

通过设置返回迭代显示的选项来监视目标实现解决方案过程。

选项= optimoptions(“fgoalattain”“显示”“通路”);

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标为[3,6],权值为[1,1],线性约束为 x 1 + x 2 4

创建目标函数、目标和权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

创建线性约束矩阵一个而且b代表A*x <= b

A = [1,1];B = 4;

为线性等式约束、边界和非线性约束创建空输入参数。

Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = [];

设定一个起始点[1,1],解决目标达成问题。

X0 = [1,1];x = fgoalattain(乐趣,x0,目标,重量,A,b,Aeq,beq,lb,ub,非lcon,选项)
实现最大行搜索方向Iter F-count因子约束步长导数步骤0 4 0 4 19 -1 2.5 1 -0.535 2 14 -1.712e-08 0.2813 1 0.883 3 19 0.1452 0.005926 1 0.883 4 24 0.1484 2.868e-06 1 0.883 5 29 0.1484 6.666e-13 1 0.883 Hessian修改局部最小值可能。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0694 - 1.9306

报告成就因子的正值表明fgoalattain没有找到满足目标的解决方案。

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标为[3,6],权值为[1,1],线性约束为 x 1 + x 2 4

创建目标函数、目标和权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

创建线性约束矩阵一个而且b代表A*x <= b

A = [1,1];B = 4;

设定一个起始点[1,1],解决目标达成问题。请求目标函数的值。

X0 = [1,1];[x,fval] = fgoalattain(乐趣,x0,目标,重量,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0694 - 1.9306
fval =2×13.1484 - 6.1484

目标函数值高于目标,即fgoalattain不能满足目标。

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标为[3,6],权值为[1,1],线性约束为 x 1 + x 2 4

创建目标函数、目标和权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

创建线性约束矩阵一个而且b代表A*x <= b

A = [1,1];B = 4;

设定一个起始点[1,1],解决目标达成问题。请求目标函数、实现因子、退出标志、输出结构和拉格朗日乘数的值。

X0 = [1,1];[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(乐趣,x0,目标,权重,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0694 - 1.9306
fval =2×13.1484 - 6.1484
Attainfactor = 0.1484
Exitflag = 4
输出=带字段的结构:迭代:6 funcCount: 29 lssteplth: 1 stepsize: 4.0824 -13 algorithm: 'active-set' firstorderopt: [] constrviolation: 6.7568e-13 message: '本地最小值可能。约束满足……”
λ=带字段的结构:下:[2x1 double]上:[2x1 double] eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: 0.5394 ineqnonlin: [0x1 double]

的正值attainfactor表示目标未达到;你也可以通过比较看到这一点fval目标

lambda.ineqlin值为非零,表示线性不等式约束解。

目标函数为

F x 2 + x - p 1 2 5 + x - p 2 2 / 4

在这里,p_1=[2,3]和p_2=(4 1)。目标是[3,6],初始权值是[1,1]。

创建目标函数、目标和初始权重。

P_1 = [2,3];P_2 = [4,1];有趣= @ (x)[2 +规范(x-p_1) ^ 2; 5 +规范(x-p_2) ^ 2/4];目标= [3,6];重量= [1,1];

设置线性约束 x 1 + x 2 4

A = [1 1];B = 4;

从点出发,解决目标达成问题X0 = [1 1]

X0 = [1 1];[x,fval] = fgoalattain(乐趣,x0,目标,重量,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0694 - 1.9306
fval =2×13.1484 - 6.1484

每个组成部分fval上面是对应的成分吗目标,表示目标未达到。

通过设定来增加实现第一个目标的重要性重量(1)到一个更小的值。

重量(1)= 1/10;[x,fval] = fgoalattain(乐趣,x0,目标,重量,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0115 - 1.9885
fval =2×13.0233 - 6.2328

现在的价值fval (1)更接近于目标(1),而fval (2)离得更远目标(2)

改变目标(2)到7,在当前解的上方。解决方案改变了。

目标(2)= 7;[x,fval] = fgoalattain(乐趣,x0,目标,重量,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×21.9639 - 2.0361
fval =2×12.9305 - 6.3047

两个组成部分fval都小于对应的分量目标.但fval (1)更接近于目标(1)fval (2)目标(2).当目标不能实现时,较小的权重更有可能使其组成部分接近满足,但当目标可以实现时,过度成就的程度会降低。

将权重更改为相等。的fval结果与目标的距离相等。

重量(2)= 1/10;[x,fval] = fgoalattain(乐趣,x0,目标,重量,A,b)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×21.7613 - 2.2387
fval =2×12.6365 - 6.6365

约束可以保留结果fval从同样接近目标。例如,设置上限为2 onx (2)

ub = [Inf,2];Lb = [];Aeq = [];Beq = [];[x,fval] = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
局部最小值。约束满足。Fgoalattain停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×22.0000 - 2.0000
fval =2×13.0000 - 6.2500

在这种情况下,fval (1)完全达到了目标,但是fval (2)就是低于它的目标。

输入参数

全部折叠

目标函数,指定为函数句柄或函数名。有趣的一个函数接受一个向量吗x并返回一个向量F,处求值的目标函数x.您可以指定函数有趣的作为函数文件的函数句柄:

X = fgoalattain(@myfun,x0,目标,重量)

在哪里myfun是一个MATLAB®函数如

函数F = myfun(x...计算x处的函数值。

有趣的也可以是匿名函数的函数句柄:

X = fgoalattain(@(X)sin(X .* X),x0,目标,权重);

fgoalattain通过x你的目标函数和任何非线性约束函数的形状x0论点。例如,如果x0是一个5乘3的数组吗fgoalattain通过x有趣的作为一个5 × 3的数组。然而,fgoalattain乘以线性约束矩阵一个Aeqx转换后x对列向量x (:)

为了使目标函数尽可能接近目标值(即既不大于也不小于),使用optimoptions设置EqualityGoalCount需要在目标值附近的目标数量的选项。这样的目标必须被分割成向量的第一个元素F返回的有趣的

假设目标函数的梯度也可以计算而且SpecifyObjectiveGradient选择是真正的,由:

选项= optimoptions(“fgoalattain”“SpecifyObjectiveGradient”,真正的)

在这种情况下,函数有趣的必须在第二个输出参数中返回梯度值吗G(矩阵)在x.梯度由偏导数组成dF / dx每一个F在这一点上x.如果F向量是长度的吗而且x长度n,在那里n的长度x0,然后是梯度GF (x)是一个n——- - - - - -矩阵G (i, j)的偏导数是F (j)关于x(我)(即j的第Th列G的梯度是j第Th目标函数F (j)).

请注意

设置SpecifyObjectiveGradient真正的只有当问题没有非线性约束时有效,还是问题有非线性约束时有效SpecifyConstraintGradient设置为真正的.在内部,目标被折叠到约束中,所以求解器需要同时提供梯度(目标和约束),以避免估计梯度。

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

初始点,指定为实向量或实数组。求解器使用元素的数量x0和大小x0确定变量的数量和大小即有趣的接受。

例子:X0 = [1,2,3,4]

数据类型:

要达到的目标,指定为一个真实的向量。fgoalattain试图找到最小的乘数γ这使得这些不等式对所有的值都成立在解决方案中x

F x 目标 重量 γ

假设重量是正向量:

  • 如果解算器找到一个点x同时实现所有目标,然后是成就因素γ是消极的,目标是超额实现的。

  • 如果解算器找不到一个点x同时实现所有目标,然后是成就因素γ是积极的,而目标没有达到。

例子:[1 3 6]

数据类型:

相对成就因子,以实向量表示。fgoalattain试图找到最小的乘数γ这使得这些不等式对所有的值都成立在解决方案中x

F x 目标 重量 γ

当的值目标所有非零,以确保达到积极目标的未达到或超额达到的比例相同重量abs(目标).(活动目标是在解决方案中阻碍进一步改进目标的目标集。)

请注意

控件的组件重量向量为零导致相应的目标约束被视为硬约束,而不是目标约束。设置硬约束的另一种方法是使用input参数nonlcon

重量是正的,fgoalattain试图使目标函数小于目标值。若要使目标函数大于目标值,请设置重量消极:消极而不是积极要查看权重对解决方案的一些影响,请参见权重、目标和约束对目标实现的影响

要使目标函数尽可能接近目标值,请使用EqualityGoalCount选项,并将目标指定为返回的向量的第一个元素有趣的(见有趣的而且选项).有关示例,请参见多目标目标实现优化

例子:abs(目标)

数据类型:

线性不等式约束,指定为实矩阵。一个是一个——- - - - - -N矩阵,不等式的数量,和N变量的数量(元素的数量x0).对于大问题,可以通过一个作为一个稀疏矩阵。

一个编码线性不等式

A*x <= b

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

例如,考虑以下不等式:

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

通过输入以下约束来指定不等式。

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

例子:要指定x分量的和为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];

例子:要指定x分量的和为1或更小,请使用A = ones(1,N)而且B = 1

数据类型:

线性等式约束,指定为实矩阵。Aeq是一个——- - - - - -N矩阵,等式的个数,和N变量的数量(元素的数量x0).对于大问题,可以通过Aeq作为一个稀疏矩阵。

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];

例子:要指定x分量的和为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];

例子:要指定x分量的和为1,使用Aeq = ones(1,N)而且Beq = 1

数据类型:

下界,指定为实向量或实数组。如果元素的个数x0等于里面元素的个数,然后指定

X (i) >= lb(i)对所有

如果数值(lb) <数值(x0),然后指定

X (i) >= lb(i)1 <= I <= number (lb)

如果元素少于x0,解算器发出警告。

例子:要指定所有x分量都是正的,使用Lb = 0 (size(x0))

数据类型:

上界,指定为实向量或实数组。如果元素的个数x0等于里面元素的个数乌兰巴托,然后乌兰巴托指定

X (i) <= ub(i)对所有

如果Numel (ub) < Numel (x0),然后乌兰巴托指定

X (i) <= ub(i)1 <= I <= numel(ub)

如果乌兰巴托元素少于x0,解算器发出警告。

例子:要指定所有x分量都小于1,使用Ub = ones(size(x0))

数据类型:

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

  • c (x)非线性不等式的约束数组是在xfgoalattain试图满足

    C (x) <= 0对于所有c

  • 量表(x)非线性等式约束的数组是在xfgoalattain试图满足

    Ceq (x) = 0对于所有量表信

例如,

X = fgoalattain(@myfun,x0,…,@mycon)

在哪里mycon为MATLAB函数,如下所示:

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

假设约束的梯度也可以计算出来而且SpecifyConstraintGradient选择是真正的,由:

options = optimoptions('fgoalattain',' specyconstraintgradient ',true)

在这种情况下,函数nonlcon还必须在第三和第四个输出参数中返回,GC,的梯度c (x),GCeq,的梯度量表(x).看到非线性约束有关如何“条件化”梯度以用于不接受提供梯度的求解器的解释。

如果nonlcon返回一个向量c组件和x长度n,在那里n的长度x0,然后是梯度GCc (x)是一个n——- - - - - -矩阵,GC (i, j)的偏导数是c (j)关于x(我)(即j的第Th列GC的梯度是jt不等式约束c (j)).同样地,如果量表信p分量,梯度GCeq量表(x)是一个n——- - - - - -p矩阵,GCeq (i, j)的偏导数是量表(j)关于x(我)(即j的第Th列GCeq的梯度是j等式约束量表(j)).

请注意

设置SpecifyConstraintGradient真正的仅在以下情况下有效SpecifyObjectiveGradient设置为真正的.在内部,目标被折叠到约束中,所以求解器需要同时提供梯度(目标和约束),以避免估计梯度。

请注意

因为优化工具箱™函数只接受类型的输入,用户提供的目标函数和非线性约束函数必须返回类型的输出

看到传递额外参数为说明如何参数化非线性约束函数nonlcon,如有需要。

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

的优化选项,指定为的输出optimoptions或者一个结构,比如optimset的回报。

中缺少一些选项optimoptions显示。这些选项在下表中以斜体字显示。详细信息请参见视图选项

有关具有不同名称的选项的详细信息optimset,请参阅当前和遗留选项名称

选项 描述
ConstraintTolerance

约束违反的终止容差,为正标量。默认为1 e-6.看到公差和停止标准

optimset,名字是TolCon

诊断

显示关于要最小化或解决的功能的诊断信息。选项是“上”“关闭”(默认)。

DiffMaxChange

有限差梯度(正标量)变量的最大变化。默认为

DiffMinChange

有限差分梯度(正标量)的最小变量变化。默认为0

显示

显示水平(见迭代显示):

  • “关闭”“没有”不显示输出。

  • “通路”显示每次迭代的输出,并给出默认的退出消息。

  • “iter-detailed”显示每次迭代的输出,并给出技术退出消息。

  • “通知”仅在函数不收敛时显示输出,并给出默认的退出消息。

  • “notify-detailed”仅在函数不收敛时显示输出,并给出技术退出消息。

  • “最后一次”(default)只显示最终输出,并给出默认的退出消息。

  • 最后详细的只显示最终输出,并给出技术退出消息。

EqualityGoalCount

目标所需的目标数量有趣的达到目标目标(非负整数)。目标必须划分为的前几个要素F.默认为0.有关示例,请参见多目标目标实现优化

optimset,名字是GoalsExactAchieve

FiniteDifferenceStepSize

有限差分的标量或矢量步长因子。当你设置FiniteDifferenceStepSize到一个向量v,正向有限差分δ

delta = v *符号' (x).*max(abs(x),TypicalX);

在哪里符号' (x) =符号(x)除了符号' (0)= 1.中心有限差分为

delta = v.*max(abs(x),TypicalX);

标量FiniteDifferenceStepSize展开成一个向量。默认为sqrt (eps)对于正向有限差分,和eps ^ (1/3)对于中心有限差分。

optimset,名字是FinDiffRelStep

FiniteDifferenceType

用于估计梯度的有限差分类型“前进”(默认),或“中央”(中心)。“中央”需要两倍的函数计算,但通常更准确。

该算法在估计这两种类型的有限差分时谨慎地服从边界。例如,它可能会后退一步,而不是向前一步,以避免在边界外的点求值。

optimset,名字是FinDiffType

FunctionTolerance

函数值(正标量)上的终止公差。默认为1 e-6.看到公差和停止标准

optimset,名字是TolFun

FunValCheck

检查是否表示目标函数和约束值有效。“上”当目标函数或约束返回一个复杂值时,显示一个错误,,或.默认的“关闭”不显示错误。

MaxFunctionEvaluations

允许的最大函数求值数(正整数)。默认为100 * numberOfVariables.看到公差和停止标准而且迭代和功能计数

optimset,名字是MaxFunEvals

MaxIterations

允许的最大迭代次数(正整数)。默认为400.看到公差和停止标准而且迭代和功能计数

optimset,名字是麦克斯特

MaxSQPIter

允许的最大SQP迭代数(正整数)。默认为10*max(numberOfVariables, numberOfInequalities + numberOfBounds)

MeritFunction

如果此选项设置为“multiobj”(默认值),使用目标实现价值函数。如果此选项设置为“singleobj”,使用fmincon价值函数。

OptimalityTolerance

一阶最优性(正标量)上的终止容差。默认为1 e-6.看到一阶最优测度

optimset,名字是TolFun

OutputFcn

优化函数在每次迭代时调用的一个或多个用户定义函数。传递一个函数句柄或函数句柄的单元格数组。默认值为none ([]).看到输出函数和图函数语法

PlotFcn

显示算法执行过程中各种进度度量的图表。从预定义的情节中选择或编写自己的。传递名称、函数句柄或名称或函数句柄的单元格数组。对于自定义绘图函数,传递函数句柄。默认值为none ([]).

  • “optimplotx”绘制当前点。

  • “optimplotfunccount”绘制函数计数。

  • “optimplotfval”绘制目标函数值。

  • “optimplotconstrviolation”绘制最大违反约束的情况。

  • “optimplotstepsize”绘制步长。

自定义绘图函数使用与输出函数相同的语法。看到优化工具箱的输出函数而且输出函数和图函数语法

optimset,名字是PlotFcns

RelLineSrchBnd

相对边界(一个实非负标量值)上的直线搜索步长,使总位移在x满足x|≤relLineSrchBnd·max(| .x) | |typicalx) |).这个选项提供了对位移大小的控制x当求解器执行的步骤太大时。默认值为none ([]).

RelLineSrchBndDuration

中指定的边界的迭代次数RelLineSrchBnd应该是积极的。默认为1

SpecifyConstraintGradient

用户定义的非线性约束函数的梯度。当此选项设置为真正的fgoalattain期望约束函数具有四个输出,如中所述nonlcon.当此选项设置为(默认),fgoalattain利用有限差分估计非线性约束的梯度。

optimset,名字是GradConstr这些值是“上”“关闭”

SpecifyObjectiveGradient

由用户定义的目标函数的梯度。参考的描述有趣的来看看如何定义梯度。将此选项设置为真正的fgoalattain使用用户定义的目标函数梯度。默认的,,使fgoalattain用有限差分估计梯度。

optimset,名字是GradObj这些值是“上”“关闭”

StepTolerance

终止公差x(一个正标量)。默认为1 e-6.看到公差和停止标准

optimset,名字是TolX

TolConSQP

内部迭代SQP约束违反的终止容差(一个正标量)。默认为1 e-6

TypicalX

典型的x值。元素的数量TypicalX等于里面元素的个数x0这是起点。默认值为的(numberofvariables, 1).的fgoalattain函数使用TypicalX缩放有限差分进行梯度估计。

UseParallel

并行计算的指示。当真正的fgoalattain并行估计梯度。默认为.看到并行计算

例子:optimoptions(“fgoalattain”、“PlotFcn”、“optimplotfval”)

问题结构,指定为具有此表中的字段的结构。

字段名 条目

客观的

目标函数有趣的

x0

起始点x

目标

要达到的目标

重量

目标的相对重要性因素

Aineq

线性不等式约束的矩阵

bineq

线性不等式约束的向量

Aeq

矩阵的线性等式约束

说真的

线性等式约束的向量
下界向量
乌兰巴托 上界向量

nonlcon

非线性约束函数

解算器

“fgoalattain”

选项

创建的选项optimoptions

你必须提供至少客观的x0目标重量解算器,选项字段问题结构。

数据类型:结构体

输出参数

全部折叠

解,作为实向量或实数组返回。的大小x和的尺寸一样吗x0.通常情况下,x什么时候局部解决问题exitflag是正的。有关解决方案质量的信息,请参见当求解器成功时

目标函数在解处的值,作为实数组返回。一般来说,fval有趣的(x)

获得因子,作为实数返回。attainfactor包含的值γ在解上。如果attainfactor是消极的,目标已经超额完成;如果attainfactor是积极的,目标没有达到。看到目标

原因fgoalattain停止,以整数形式返回。

1

函数收敛到一个解x

4

搜索方向的幅度小于指定公差,约束违反小于选项。ConstraintTolerance

5

方向导数的幅度小于规定的公差,约束违反小于选项。ConstraintTolerance

0

超过迭代次数选项。麦克斯特在我ons或者超出了函数求值的数量选项。米axFunctionEvaluations

-1

被输出函数或绘图函数停止

-2

没有找到可行点。

关于优化过程的信息,作为带有此表中的字段的结构返回。

迭代

迭代次数

funcCount

函数求值的数量

lssteplength

直线搜索步长相对于搜索方向的大小

constrviolation

约束函数的最大值

stepsize

最后一次位移的长度x

算法

所使用的优化算法

firstorderopt

一阶最优性的度量

消息

退出消息

解的拉格朗日乘法器,作为结构返回与此表中的字段。

较低的

对应的下界

对应的上界乌兰巴托

ineqlin

线性不等式对应于一个而且b

eqlin

线性等式对应于Aeq而且说真的

ineqnonlin

对应的非线性不等式cnonlcon

eqnonlin

对应于量表信nonlcon

算法

的描述fgoalattain算法和目标实现概念的讨论,参见算法

选择功能

应用程序

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

扩展功能

版本历史

R2006a之前介绍