主要内容

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

使用 GPS 算法进行优化

此示例展示如何使用 GPS 算法解决优化问题,该算法是 patternsearch 求解器的默认算法。该示例使用 Optimize 实时编辑器任务以可视化方式完成优化。

目标函数

此示例使用目标函数 ps_example,该函数在您运行此示例时包含在内。查看该函数的代码。

type ps_example
function f = ps_example(x)
%PS_EXAMPLE objective function for patternsearch.

%   Copyright 2003-2021 The MathWorks, Inc.

f = zeros(1,size(x,1));
for i = 1:size(x,1)
    if  x(i,1) < -5
        f(i) = (x(i,1)+5)^2 + abs(x(i,2));
    elseif x(i,1) < -3
        f(i) = -2*sin(x(i,1)) + abs(x(i,2));
    elseif x(i,1) < 0
        f(i) = 0.5*x(i,1) + 2 + abs(x(i,2));
    elseif x(i,1) >= 0
        f(i) = .3*sqrt(x(i,1)) + 5/2 +abs(x(i,2));
    end
end

绘制函数。

fsurf(@(x,y)reshape(ps_example([x(:),y(:)]),size(x)),...
    [-6 2 -4 4],'LineStyle','none','MeshDensity',300)
colormap 'jet'
view(-26,43)
xlabel('x(1)')
ylabel('x(2)')
title('ps\_example(x)')

Figure contains an axes object. The axes object with title ps_example(x), xlabel x(1), ylabel x(2) contains an object of type functionsurface.

找到函数的最小值

要使用 ps_example 实时编辑器任务查找 Optimize 的最小值,请完成以下步骤。

  • 点击主页选项卡上文件部分中的新建实时脚本按钮,创建一个新的实时脚本。

new_live_script.png

  • 插入 Optimize 实时编辑器任务。点击插入选项卡,然后在代码部分中选择任务 > 优化

optimizelet_insert.png

optimizelet_choose.png

  • 点击基于求解器的任务。

optimizelet_initial.png

  • 为了输入问题数据,请点击插入选项卡上的分节符按钮插入新节。新节出现在任务的上方和下方。

  • 在任务上方的新部分中,输入以下代码来定义初始点和目标函数。

x0 = [2.1 1.7];
fun = @ps_example;
  • 要将这些变量放入工作区,请按 Ctrl + Enter 运行该部分。

  • 在任务的指定问题类型部分,点击目标 > 非平滑按钮。

  • 确保选定的求解器是 patternsearch

  • 在任务的选择问题数据部分中,选择目标函数> 函数句柄,然后选择 fun

  • 选择初始点 (x0) > x0

  • 在任务的显示进度部分,选择最佳值网格大小图。

optimizelet_patternsearch_setup.png

  • 要运行求解器,请点击任务窗口右上角的选项按钮 ,并选择运行节。图表出现在单独的图形窗口和任务输出区域中。

BFVforPS.png

上图显示了每次迭代中最佳点的目标函数值。通常,目标函数值在早期迭代中迅速提高,然后在接近最佳值时趋于平稳。

下图显示了每次迭代的网格大小。每次迭代成功后网格大小都会增大,每次迭代失败后网格大小都会减小。有关详细信息,请参阅模式搜索轮询的工作原理

优化停止,因为网格大小变得小于由 MeshTolerance 选项定义的网格大小容差值。最小函数值约为-2。

要查看解和目标函数值,请查看任务的顶部。

optimizelet_ps_solution.png

Optimize 任务将变量 solutionobjectiveValue 放入工作区。通过在任务下方放置一个新部分来查看这些值,并包含此代码。

disp(solution)
disp(objectiveValue)

Ctrl+Enter 运行该节。

接下来将出现“优化实时编辑器”任务的最终状态。

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

Figure Pattern Search contains 2 axes objects. Axes object 1 with title Best Function Value: -2, xlabel Iteration, ylabel Function value contains an object of type scatter. Axes object 2 with title Current Mesh Size: 9.53674e-07, xlabel Iteration, ylabel Mesh size contains an object of type scatter.

disp(solution)
   -4.7124   -0.0000
disp(objectiveValue)
   -2.0000

另请参阅

|

主题