探索优化实时编辑器任务中的 patternsearch
算法
从 R2022b 开始,patternsearch
有四种算法选项:
"classic"
"nups"
(Nonuniform Pattern Search)
"nups-gps"
"nups-mads"
此示例展示了如何在使用优化实时编辑器任务解决问题时尝试不同的 patternsearch
算法。
指定问题
设置一个具有二次加线性目标函数、边界和两个线性约束的优化问题。通常,quadprog
是解决此类问题的最佳求解器。但是,此示例使用 patternsearch
,因此您可以尝试其不同的算法。
将此问题的变量数设置为 N = 10
。为目标函数 fun(x) = x*Q*x'
– N*x*z
创建一个大小为 N
×N
的伪随机对称矩阵 Q
和一个长度为 N
的伪随机向量 z
。
N = 10;
rng default
x0 = rand(1,N);
x0 = x0/(2*sum(x0));
Q = 6*eye(N) + randn(N);
Q = (Q + Q');
z = rand(N,1);
fun = @(x)x*Q*x' - N*x*z;
对问题设置线性约束:sum(x) <= 1
和 sum(i*x) <= N/3
,其中 i
是向量 x
的索引。
A = [ones(1,N);1:N]; % sum(x) <= 1, sum(i*x) <= N/3
b = [1;N/3];
确认 Q
是正定的,因此该问题是凸的。
eig(Q)
ans = 10×1
1.5071
4.0347
7.3749
9.0561
11.6929
11.9473
13.0976
15.2099
16.1175
18.8949
在优化实时编辑器任务中创建问题
打开一个新的或现有的实时脚本。在实时编辑器标签的代码部分中,点击任务以打开实时编辑器任务库。在优化下,点击优化。
选择方法
在优化实时编辑器任务中,选择基于求解器的方法。
指定问题类型
选择这些选项来指定问题的类型:
目标 - 非线性
约束 - 下界、上界和线性不等式
求解器 - patternsearch
选择问题数据
为问题数据选择以下选项:
目标函数-单击来自文件箭头并选择函数句柄。点击选择箭头并选择乐趣。
初始点 - x0
约束 - 下界 0
约束 - 上界 1
约束-线性不等式约束数组 A 和 b
指定求解器选项
单击箭头展开任务的指定求解器选项部分。然后,点击添加按钮。该任务为算法设置指定了经典算法。
显示进度
选择要显示的两个图:最佳值和评估计数。
您的优化实时编辑器任务应与下图中的任务相匹配。
使用不同的算法寻找解决方案
选择问题的选项后,点击实时编辑器选项卡中运行部分中的运行来运行求解器。求解器运行 "classic"
patternsearch
算法并显示两个指定的图。
将算法更改为 nups。求解器运行新算法并显示两个指定的图。
求解器以 "classic"
算法函数计算次数的大约四分之一完成 "nups"
算法的运行,并达到稍好(更低)的目标函数值。
在优化实时编辑器任务中,您可以继续探索其他 pattersearch
算法和绘图函数,或其他选项和求解器。
patternsearch stopped because the mesh size was less than options.MeshTolerance.