主要内容

自定义绘图函数

关于自定义Plot函数

使用patternsearch除了软件中包含的绘图函数,您可以编写自己的自定义绘图函数,在模式搜索的每次迭代中调用该函数来创建绘图。此示例演示如何创建一个图形函数,该函数显示最佳目标函数值从前一次迭代到当前迭代的对数变化。更多的绘图功能细节可在绘图选项

创建自定义绘图函数

要为本例创建绘图函数,将以下代码复制并粘贴到MATLAB中的新函数文件中®编辑器:

函数Stop = psplotchange(optimvalues, flag)绘制最佳目标函数的变化%的值。%前一次迭代中最佳目标函数值持续的Last_best stop = false;如果(比较字符串(国旗,“init”甘氨胆酸)集(,“Yscale”“日志”);设置情节持有;包含(“迭代”);ylabel (“数值变化记录”);标题([“最佳函数值的变化”]);结束%当前迭代中最佳目标函数值Best = min(optimvalues.fval);将last_best设置为best如果optimvalues.iteration== 0 last_best = best;其他的目标函数值变化百分比Change = last_best -最好的;情节(optimvalues。迭代,改变,“r”);结束

将文件另存为psplotchange.m在MATLAB路径下的文件夹中。代码解释在绘图函数是如何工作的

提出问题

问题是一样的使用模式搜索和优化实时编辑器任务约束最小化.要建立这个问题:

  1. 在MATLAB命令行输入以下命令:

    X0 = [2 1 0 9 1 0];Aineq = [-8 7 3 -4 9 0];Bineq = 7;Aeq = [7 1 8 3 3 3;5 0 -5 1 -5 8;-2 -6 7 1 1 9;1 -1 2 -2 3 -3];Beq = [84 62 65 1];H = [36 17 19 12 8 15;17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; F = @(x)0.5*x'*H*x + f'*x;
  2. 因为这是一个线性约束问题,设PollMethod选项“GSSPositiveBasis2N”.包括@psplotbestf内置绘图函数和自定义绘图函数@psplotchange在选项中。

    选项= optimoptions(“patternsearch”...“PlotFcn”{@psplotbestf, @psplotchange},...“PollMethod”“GSSPositiveBasis2N”);

使用自定义绘图函数运行优化

通过调用运行示例patternsearchx0

[x,fval] = patternsearch(F,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);

因为这个比例y下面自定义图形中的-axis是对数的,该图形只显示大于0的变化。

绘图函数是如何工作的

plot函数使用包含在以下结构中的信息。

  • optimvalues解算器的当前状态,一个结构

  • 国旗—算法的当前状态,字符向量

自定义绘图函数最重要的表述,psplotchange.m,总结如下表所示。

自定义Plot函数语句

声明 描述
持久last_best

创建持久变量last_best为上一代中最佳目标函数值。在多次调用plot函数时保存持久变量。

集(gca,‘Yscale’,‘日志’)

在算法开始之前设置好图。

Best = min(optimvalues.fval)

最好的等于目标函数的最小值。这个领域optimvalues.fval包含当前迭代中的目标函数值。的变量最好的为目标函数的最小值。获取结构字段的完整描述optimvalues,请参阅图功能结构

Change = last_best - best

设置变量改变取前一次迭代的最佳目标函数值减去当前迭代的最佳目标函数值。

情节(optimvalues。迭代,改变,'.r')

绘制变量改变在当前目标函数值处,为当前迭代所包含的optimvalues.iteration

相关的话题