主要内容

向量化目标函数和约束函数

Vectorize速度

直接搜索通常运行更快,如果你矢量化目标和非线性约束函数。这意味着您的函数一次评估轮询或搜索模式中的所有点,其中一个函数调用,而无需一次循环到一个函数。因此,选择UseVectorized真的仅适用于什么时候UseCompletePoll要么UseCompleteSearch也设定为真的.但是,当你设置时UseVectorized真的Patternsearch.检查目标和任何非线性约束函数给矢量化计算的正确形状的输出,不管设置UseCompletePoll要么UseCompleteSearch选项。

如果存在非线性约束,则目标函数和非线性约束一切都需要被矢量化,以便以算法以矢量化方式计算。

请注意

写入矢量化目标函数或非线性约束函数以接受具有任意数量的矩阵。Patternsearch.有时甚至在向量化计算过程中也会计算单个点。

矢量化目标函数

向量化的目标函数接受一个矩阵作为输入,并生成一个函数值向量,其中每个函数值对应于输入矩阵的一行或一列。Patternsearch.解析矩阵的行或列是否表示如下图案的点数的歧义。假设输入矩阵有行和n列:

  • 如果初始点x0列向量有大小吗,目标函数将矩阵的每一列作为模式中的一个点,并返回一个大小为行的向量n

  • 如果初始点x0行向量的大小是多少n,目标函数将矩阵的每一行作为图案中的点,并返回大小的列向量

  • 如果初始点x0是一个标量,Patternsearch.假设x0是一个行向量。因此,输入矩阵有一列(n= 1,表示输入矩阵为向量),矩阵的每一项表示目标函数求值的一行。在这种情况下,目标函数的输出是一个大小的列向量

矩阵和计算用下图表示。

向量化函数结构

例如,假设目标函数是

f x x 1 4 + x 2 4 4 x 1 2 2 x 2 2 + 3. x 1 x 2 / 2.

如果是初始矢量x0是列向量吗(0, 0),则矢量化求值函数为

函数f = vectorizedc f (x) = x(1:)。^ 4 + x(2:)。^ 4 - 4 * x(1:)。^ 2 * x(2:)。^ 2…+ 3 *(1:)闲置* x (2:);
如果是初始矢量x0是行向量吗(0,0),则矢量化求值函数为
函数f =矢量化r(x)f = x(:,1)。^ 4 + x(:,2)。^ 4-4 * x(:,1)。^ 2-2 * x(:,2)。^ 2 ... + 3 * x(:,1) - 。5 * x(:,2);

提示

如果要使用相同的目标(健身)函数来进行模式搜索和遗传算法,请写下您的函数,以具有由行向量表示的点,并写入x0作为行向量。遗传算法总是以个体作为矩阵的行。这是一个设计决策——遗传算法不需要用户提供的种群,因此需要有默认格式。

最小化vectorizedc,输入以下命令:

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

MATLAB®返回以下输出:

优化终止:网格尺寸小于options.meshtolerance。X = -1.5737 1.0575 FVAL = -10.0088

矢量化的约束功能

只需要矢量化的非线性约束;界限和线性约束自动处理。如果存在非线性约束,则目标函数和非线性约束一切都需要被矢量化,以便以算法以矢量化方式计算。

相同的注意事项持有用于目标函数的约束函数:初始点x0确定轮询或搜索中的点(行或列向量)类型。如果初始点是一个大小为行的向量k,矩阵x传递给约束函数的k列。同样地,如果初始点是一个有大小的列向量k,矩阵的投票或搜索点k行。这个数字向量化函数结构这一点可以说明。如果初始点是一个标量,Patternsearch.假设它是一排矢量。

非线性约束函数返回两个矩阵,一个用于不等式约束,一个用于等式约束。假设有nc非线性不等式约束和n量表信非线性平等约束。行向量x0的约束矩阵ncn量表信分别列,行数与输入矩阵中的行数相同。同样,对于列向量x0的约束矩阵ncn量表信行数,列数与输入矩阵相同。在图向量化函数结构,“结果”包括两者ncn量表信

向量化目标和约束的例子

假设非线性约束是

x 1 2 9 + x 2 2 4 1 (椭圆的内部), x 2 c x 1 1.

为行形式编写这些约束的函数x0如下:

函数[C CEQ] = ellipsecosh(x)c(:,1)= x(:,1)。^ 2/9 + x(:,2)。^ 2/4-1;C(:,2)= Cash(x(:,1)) -  x(:,2)-1;CEQ = [];

最小化vectorizedr(定义为矢量化目标函数)受约束ellipsecosh

x0 = (0,0);选择= optimoptions(‘patternsearch’,‘UseVectorized’,真的,UseCompletePoll, true);[x, fval] = patternsearch (@vectorizedr, x0,…[],[],[],[],[],[],@ ellipsecosh选项)

MATLAB返回如下输出:

优化终止:少于options.meshtolerance和约束违规的网格尺寸小于选项.ConstraintTolerance。x = -1.3516 1.0612 fval = -9.5394

相关话题