自定义绘制函数
关于自定义Plot函数
使用一个patternsearch
除了软件中包含的函数外,您还可以编写自己的自定义Plot函数,在模式搜索的每次迭代中调用该函数来创建Plot。这个例子展示了如何创建一个绘图函数,该函数显示从上一个迭代到当前迭代的最佳目标函数值的对数变化。更多plot功能详情,请浏览绘图选项.
创建自定义Plot函数
要为本例创建plot函数,请将以下代码复制并粘贴到MATLAB中的一个新函数文件中®编辑器:
函数Stop = psplotchange(optimvalues, flag)绘制最佳目标函数的变化%的值。%前一次迭代的最佳目标函数值持续的Last_best stop = false;如果(比较字符串(国旗,“init”甘氨胆酸)集(,“Yscale”,“日志”);设置好情节持有在;包含(“迭代”);ylabel (“记录价值变化”);标题([“最佳函数值的变化”]);结束%当前迭代中最佳目标函数值最好= min (optimvalues.fval);将last_best设置为best如果optimvalues.iteration== 0 last_best = best;其他的%目标函数值的变化Change = last_best - best;情节(optimvalues。迭代,改变,“r”);结束
将文件保存为psplotchange.m
在MATLAB路径下的文件夹中。代码解释在Plot函数是如何工作的.
设定问题
问题是一样的使用模式搜索和优化实时编辑器任务的约束最小化.设置问题:
在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;
因为这是一个线性约束问题,设
PollMethod
选项“GSSPositiveBasis2N”
.包括@psplotbestf
内置的plot函数和自定义的plot函数@psplotchange
的选项。选择= optimoptions (“patternsearch”,...“PlotFcn”{@psplotbestf, @psplotchange},...“PollMethod”,“GSSPositiveBasis2N”);
使用自定义Plot函数运行优化
通过调用运行该示例patternsearch
从x0
.
[x, fval] = patternsearch (F, x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
因为它的规模y-axis在较低的自定义图是对数的,该图只显示大于0的变化。
Plot函数是如何工作的
plot函数使用以下结构中包含的信息。
optimvalues
-求解器的当前状态,一个结构国旗
-算法的当前状态,一个字符向量
自定义绘图函数最重要的语句,psplotchange.m
,归纳如下表。
自定义Plot功能语句
声明 | 描述 |
---|---|
持久last_best |
创建持久变量 |
集(gca,‘Yscale’,‘日志’) |
在算法开始之前设置好图形。 |
最佳= min (optimvalues.fval) |
集 |
Change = last_best - best |
设置变量 |
情节(optimvalues。迭代,改变,“r”) |
情节的变量 |