Main Content

本页采用了机器翻译。点击此处可查看最新英文版本。

探索优化实时编辑器任务中的 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) <= 1sum(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

在优化实时编辑器任务中创建问题

打开一个新的或现有的实时脚本。在实时编辑器标签的代码部分中,点击任务以打开实时编辑器任务库。在优化下,点击优化

选择方法

优化实时编辑器任务中,选择基于求解器的方法。

optimizelet_choose.png

指定问题类型

选择这些选项来指定问题的类型:

  • 目标 - 非线性

  • 约束 - 下界、上界和线性不等式

  • 求解器 - patternsearch

选择问题数据

为问题数据选择以下选项:

  • 目标函数-单击来自文件箭头并选择函数句柄。点击选择箭头并选择乐趣

  • 初始点 - x0

  • 约束 - 下界 0

  • 约束 - 上界 1

  • 约束-线性不等式约束数组 Ab

指定求解器选项

单击箭头展开任务的指定求解器选项部分。然后,点击添加按钮。该任务为算法设置指定了经典算法。

显示进度

选择要显示的两个图:最佳值评估计数

您的优化实时编辑器任务应与下图中的任务相匹配。

optimizelet_patternsearch_setup.png

使用不同的算法寻找解决方案

选择问题的选项后,点击实时编辑器选项卡中运行部分中的运行来运行求解器。求解器运行 "classic" patternsearch 算法并显示两个指定的图。

ps_run1.png

将算法更改为 nups。求解器运行新算法并显示两个指定的图。

ps_run2.png

求解器以 "classic" 算法函数计算次数的大约四分之一完成 "nups" 算法的运行,并达到稍好(更低)的目标函数值。

优化实时编辑器任务中,您可以继续探索其他 pattersearch 算法和绘图函数,或其他选项和求解器。

Live Task
patternsearch stopped because the mesh size was less than options.MeshTolerance.

另请参阅

相关主题