自定义绘图函数
关于自定义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路径下的文件夹中。代码解释在绘图函数是如何工作的.
提出问题
问题是一样的使用模式搜索和优化实时编辑器任务约束最小化.要建立这个问题:
在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
内置绘图函数和自定义绘图函数@psplotchange
在选项中。选项= optimoptions(“patternsearch”,...“PlotFcn”{@psplotbestf, @psplotchange},...“PollMethod”,“GSSPositiveBasis2N”);
使用自定义绘图函数运行优化
通过调用运行示例patternsearch
从x0
.
[x,fval] = patternsearch(F,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
因为这个比例y下面自定义图形中的-axis是对数的,该图形只显示大于0的变化。
绘图函数是如何工作的
plot函数使用包含在以下结构中的信息。
optimvalues
解算器的当前状态,一个结构国旗
—算法的当前状态,字符向量
自定义绘图函数最重要的表述,psplotchange.m
,总结如下表所示。
自定义Plot函数语句
声明 | 描述 |
---|---|
持久last_best |
创建持久变量 |
集(gca,‘Yscale’,‘日志’) |
在算法开始之前设置好图。 |
Best = min(optimvalues.fval) |
集 |
Change = last_best - best |
设置变量 |
情节(optimvalues。迭代,改变,'.r') |
绘制变量 |