直接搜索通常运行更快,如果你vectorize目标和非线性约束函数。这意味着您的函数使用一个函数调用一次性计算轮询或搜索模式中的所有点,而不必一次遍历一个点。因此,选择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 = vectorizedr f (x) = x(: 1)。(:,2)^ 4 + x。^ 4 - 4 * x(: 1)。^ 2 * x(:, 2)。^ 2…+ 3 * x(: 1)闲置* x (:, 2);
提示
如果你想在模式搜索和遗传算法中使用相同的目标(适应度)函数,把你的函数写成用行向量表示的点,然后写x0
作为一个行向量。遗传算法总是以个体作为矩阵的行。这是一个设计决策——遗传算法不需要用户提供的填充,所以需要有一个默认格式。
最小化vectorizedc
,输入以下命令:
选择= optimoptions(‘patternsearch’,‘UseVectorized’,真的,UseCompletePoll, true);x0 = (0, 0);[x, fval] = patternsearch (@vectorizedc, x0,…[],[],[],[],[],[],[], 选项)
MATLAB®返回如下输出:
优化终止:网孔尺寸小于选项。网孔公差。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] = ellipsecosh c (x) (: 1) = x(: 1)。^ 2/9 + x(:, 2)。^ 2/4-1;c (:, 2) = cosh (x (: 1)) - x (:, 2) 1;测查= [];
最小化vectorizedr
(定义在矢量化目标函数)受约束ellipsecosh
:
x0 = (0,0);选择= optimoptions(‘patternsearch’,‘UseVectorized’,真的,UseCompletePoll, true);[x, fval] = patternsearch (@vectorizedr, x0,…[],[],[],[],[],[],@ ellipsecosh选项)
MATLAB返回以下输出:
优化终止:筛孔尺寸小于选项。meshttolerance和constraint违犯小于options. constraintolerance。X = -1.3516 fval = -9.5394