主要内容

计算目标函数

目标(健身)功能

使用全局优化工具箱功能,首先编写一个文件(或一个匿名函数)你想优化计算函数。这叫做一个目标函数对于大多数解决者,或适应度函数遗传算法。函数应该接受一个向量,其长度是独立变量的数量,并返回一个标量。为gamultiobj函数应该返回一个行向量的目标函数值。解决矢量化的函数应该接受一个矩阵,其中每一行表示一个输入向量,并返回一个向量的目标函数值。本节展示如何编写该文件。

编写一个函数文件

这个例子展示了如何编写一个文件你想优化函数。假设您想要最小化函数

f ( x ) = 经验值 ( ( x 1 2 + x 2 2 ) ) ( x 1 2 2 x 1 x 2 + 6 x 1 + 4 x 2 2 3 x 2 )

的文件计算这个函数必须接受一个向量x长度为2的,对应的变量x1x2,并返回一个标量函数的值x

  1. 选择新的>脚本(Ctrl + N从MATLAB)®文件菜单。在编辑器中打开一个新的文件。

  2. 输入以下两行代码:

    函数z = my_fun (x) z = x (1) ^ 2 - 2 * x (1) * (2) + 6 * x (1) + 4 * x (2) ^ 2 - 3 * (2);
  3. 保存文件在一个文件夹MATLAB路径。

检查文件返回正确的值。

my_fun (3 [2]) ans = 31

gamultiobj假设你有三个目标。你的目标函数返回一个三元素向量组成的三个目标函数值:

函数z = my_fun (x) z = 0 (1、3);%分配输出z (1) = x (1) ^ 2 - 2 * x (1) * (2) + 6 * x (1) + 4 * x (2) ^ 2 - 3 * (2);z (2) = x (1) * (2) + cos (3 * x (2) / (2 + x (1)));z(3) =双曲正切(x (1) + (2));

编写一个矢量函数

遗传算法,gamultiobj,paretosearch,particleswarm,patternsearch解决可计算的目标函数向量的集合在一个函数调用。该方法可以花更少的时间比串行计算向量的目标函数。这种方法被称为矢量函数调用。

以矢量化的方式计算:

  • 写下你的目标函数:

    • 接受一个矩阵与任意数量的行。

    • 返回函数值的向量的每一行。

    • gamultiobjparetosearch返回一个矩阵,每一行包含目标函数值对应的输入矩阵的行。

  • 如果你有一个非线性约束,一定要写约束矢量化的方式。有关详细信息,请参见矢量化的约束

  • 设置UseVectorized选项真正的使用optimoptions。为patternsearchparetosearch,也UseCompletePoll真正的。一定要通过解算器的选项。

例如,写的目标函数编写一个函数文件矢量化的方式,

函数z = my_fun (x) z = x (: 1)。x ^ 2 - 2 * (: 1)。* x (:, 2) + 6 * x (: 1) +…4 * x (:, 2)。^ 2 - 3 * x (:, 2);

使用my_fun作为一个矢量化的目标函数patternsearch:

选择= optimoptions (‘patternsearch’,‘UseCompletePoll’,真的,UseVectorized, true);[x fval] = patternsearch (@my_fun, [1], [], [], [], [], [], [],…[],选项);

使用my_fun作为一个矢量化的目标函数遗传算法:

选择= optimoptions(“遗传算法”,“UseVectorized”,真正的);[x fval] = ga (@my_fun 2[]、[][],[],[],[],[],选项);

gamultiobjparetosearch,

函数z = my_fun (x) z = 0(大小(x, 1), 3);%分配输出z (: 1) = x (: 1)。x ^ 2 - 2 * (: 1)。* x (:, 2) + 6 * x (: 1) +…4 * x (:, 2)。^ 2 - 3 * x (:, 2);z (:, 2) = x (: 1)。* x (:, 2) + cos (3 * x (:, 2)。/ (2 + x (: 1)));z(: 3) =双曲正切(x (: 1) + (2):,);

使用my_fun作为一个矢量化的目标函数gamultiobj:

选择= optimoptions(“遗传算法”,“UseVectorized”,真正的);[x fval] = gamultiobj (@my_fun 2[]、[][],[],[],[],选项);

有关编写矢量函数的更多信息patternsearch,请参阅Vectorize目标和约束函数。有关编写矢量函数的更多信息遗传算法,请参阅Vectorize健身功能

梯度和麻布

如果你使用GlobalSearchMultiStart,你的目标函数可以返回衍生品(梯度、雅可比矩阵或黑森)。有关如何在目标函数中包含这个语法,看包括梯度和麻布。使用optimoptions设置选项,以便您的解算器使用导数信息:

当地解决= fmincon fminunc

条件 选项设置
目标函数包含梯度 SpecifyObjectiveGradient = true;看到如何包含梯度
目标函数包含黑森 “HessianFcn”=“客观的”或一个函数处理;看到包括麻布
约束函数包含梯度 SpecifyConstraintGradient = true;看到包括约束函数的梯度

当地解决= lsqcurvefit lsqnonlin

条件 选项设置
目标函数包含了雅可比矩阵 SpecifyObjectiveGradient = true

相关的话题