要使用软件附带的plot函数,您可以编写自己的定制plot函数,在模式搜索的每次迭代中调用该函数来创建plot。这个示例展示了如何创建一个plot函数,该函数显示从前一个迭代到当前迭代的最佳目标函数值的对数变化。更多情节功能详情,请参阅情节选项.
要为本例创建plot函数,请将以下代码复制并粘贴到MATLAB中的新函数文件中®编辑器:
函数stop = psplotchange(优化值,标志)% PSPLOTCHANGE绘制最佳目标函数的变化%值。%前一次迭代的最佳目标函数值持续的Last_best stop = false;如果(比较字符串(国旗,'在里面'甘氨胆酸)集(,“Yscale”,“日志”);%设置plot持有上;包含(“迭代”);ylabel (“记录值的变化”);标题(['改变最佳功能值']);结束%当前迭代中最佳目标函数值BEST = min(优化值.FVAL);%将last_best设置为best如果optimvalues.iteration== 0 last_best = best;其他的目标函数值的百分比变化更改= last_best - 最好;绘图(OptimValues.Ceration,改变,“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];
因为这是一个线性约束问题,设PollMethod
选择'gsspositivebasis2n'
.包括@psplotbestf
内置情节功能和自定义情节功能@psplotchange
在选项中。
选项= Optimoptions(“patternsearch”,...“PlotFcn”{@psplotbestf, @psplotchange},...“PollMethod”,'gsspositivebasis2n');
通过调用运行示例patternsearch
从x0
.
[x, fval] = patternsearch (@lincontest7 x0,...AINEQ,BINEQ,AEQ,BEQ,[],[],[],选项);
因为这个规模y-axis在下面的自定义图中是对数的,图中只显示大于0的变化。
plot函数使用以下结构中包含的信息。
optimvalues
-当前状态的求解器,一个结构
国旗
—算法的当前状态,字符向量
自定义plot函数最重要的语句是,psplotchange.m
,总结如下表。
自定义Plot函数语句
声明 | 描述 |
---|---|
持久last_best |
创建持久变量 |
SET(GCA,'YSCale','log') |
在算法开始之前设置情节。 |
Best = min(优化values.fval) |
集 |
change = last_best - 最好 |
设置变量 |
绘图(OptimValues.Ceration,改变,“r”) |
情节的变量 |