直接搜索通常运行更快,如果你矢量化目标和非线性约束函数。这意味着您的函数一次评估轮询或搜索模式中的所有点,其中一个函数调用,而无需一次循环到一个函数。因此,选择UseVectorized
=真的
仅适用于什么时候UseCompletePoll
要么UseCompleteSearch
也设定为真的
.但是,当你设置时UseVectorized
=真的
,Patternsearch.
检查目标和任何非线性约束函数给矢量化计算的正确形状的输出,不管设置UseCompletePoll
要么UseCompleteSearch
选项。
如果存在非线性约束,则目标函数和非线性约束一切都需要被矢量化,以便以算法以矢量化方式计算。
请注意
写入矢量化目标函数或非线性约束函数以接受具有任意数量的矩阵。Patternsearch.
有时甚至在向量化计算过程中也会计算单个点。
向量化的目标函数接受一个矩阵作为输入,并生成一个函数值向量,其中每个函数值对应于输入矩阵的一行或一列。Patternsearch.
解析矩阵的行或列是否表示如下图案的点数的歧义。假设输入矩阵有米
行和n
列:
如果初始点x0
列向量有大小吗米
,目标函数将矩阵的每一列作为模式中的一个点,并返回一个大小为行的向量n
.
如果初始点x0
行向量的大小是多少n
,目标函数将矩阵的每一行作为图案中的点,并返回大小的列向量米
.
如果初始点x0
是一个标量,Patternsearch.
假设x0
是一个行向量。因此,输入矩阵有一列(n
= 1,表示输入矩阵为向量),矩阵的每一项表示目标函数求值的一行。在这种情况下,目标函数的输出是一个大小的列向量米
.
矩阵和计算用下图表示。
向量化函数结构
例如,假设目标函数是
如果是初始矢量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
的约束矩阵nc和n量表信分别列,行数与输入矩阵中的行数相同。同样,对于列向量x0
的约束矩阵nc和n量表信行数,列数与输入矩阵相同。在图向量化函数结构,“结果”包括两者nc和n量表信.
假设非线性约束是
为行形式编写这些约束的函数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